Witam, od bardzo długiego czasu chodzi mi pomysł serwisu społecznościowego (zresztą wtedy zacząłem robić podwaliny portalu), jednak niedawno wziąłem się w garść, ponieważ w najbliższym czasie zostanie zamknięty mój ulubiony portal - Google+. Stworzyłem podstawy mikrobloga, szablon serwisu, a w jego struktury nawet wchodzi notes (Google Docs jest trochę przepełniony funkcjami) czy też zakładki online (nie chcę znajomym śmiecić FB/Twittera/G+/NK, a o wklejaniu do dokumentu na GDocs napisałem wcześniej)
No dobra, to do rzeczy:
Mój problem polega na tym, iż nie wiem jak sprawdzić, czy dany użytkownik jest subskrybowany, i jednocześnie nie wiem, jak oddzielić wpisy subskrybowanych użytkowników od wszystkich userów. Jednak najważniejszą barierą jest to, że nie mogę pobierać danych autora danego wpisu i samego wpisu jednocześnie. Dane usera miałyby być pobierane na bazie numeru ID (coś jak na FB).
Oczywiście załączam kody:
MySQL
CREATE TABLE IF NOT EXISTS `buzz` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) DEFAULT NULL,
`kpost` varchar(250) DEFAULT NULL,
`data` datetime DEFAULT NULL,
`ip` int(15) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
INSERT INTO `buzz` (`id`, `uid`, `kpost`, `data`, `ip`) VALUES
(1, 1, 'Siema', '2014-12-12 20:48:09', 0),
(2, 1, 'Siemafh', '2014-12-12 20:48:21', 0),
(3, 1, 'Siema', '2014-12-12 20:48:45', 0),
(4, 1, '6i5i5iy', '2014-12-30 16:39:01', NULL),
(5, 1, 'Już?', '2014-12-30 16:39:26', NULL),
(6, 2, 'PEDAŁEN!', '2014-12-30 16:42:59', NULL),
(7, 2, 'ee;lem', '2014-12-30 16:43:04', NULL);
-- --------------------------------------------------------
--
-- Table structure for table `following`
--
CREATE TABLE IF NOT EXISTS `following` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`follower_id` int(11) DEFAULT NULL,
`date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
INSERT INTO `following` (`id`, `user_id`, `follower_id`, `date`) VALUES
(1, 1, 2, '2015-06-22 19:30:49');
CREATE TABLE IF NOT EXISTS `users` (
`user_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_fname` varchar(255) NOT NULL,
`user_lname` varchar(255) NOT NULL,
`user_full` varchar(255) NOT NULL,
`user_name` varchar(255) NOT NULL,
`user_password` varchar(255) NOT NULL,
`user_email` varchar(255) NOT NULL,
`user_birth` date NOT NULL,
`user_gender` int(11) NOT NULL,
`user_regdate` int(11) unsigned NOT NULL,
`user_status` varchar(255) NOT NULL,
`user_from` varchar(255) NOT NULL,
`user_website` varchar(255) NOT NULL,
`user_online` enum('active','inactive') NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
INSERT INTO `users` (`user_id`, `user_fname`, `user_lname`, `user_full`, `user_name`, `user_password`, `user_email`, `user_birth`, `user_gender`, `user_regdate`, `user_status`, `user_from`, `user_website`, `user_online`) VALUES
(1, 'Marek', 'Białkowicz', 'Marek "Mode" Białkowicz', 'mode', '15d61712450a686a7f365adf4fef581f', '[email protected]', '2010-06-03', 1, 1413913665, '', '', '', 'inactive'),
(2, 'Jarek', 'Pawlikowski', 'Jarek Pawlikowski', 'pawlik', '1392c309a2da8ca65641315bf7dc62f2', '[email protected]', '2000-07-26', 1, 1419938598, '', '', '', 'inactive'),
(3, 'Seba', 'Kowalski', 'Seba Kowalski', 'sebak', '231a47b64a5bce4c4404d7776858aafe', '[email protected]', '1997-03-19', 1, 1431966324, '', '', '', 'inactive');
index.php
<?php
include 'config.php';
db_connect();
// pobieramy dane usera
$user_data = get_user_data();
echo '<html>';
include 'include/head.htm';
echo '<body>';
include 'include/menu.php';
echo '<div id="wrapper">';
if(!$_SESSION['logged']) { ?>
<div id="logleft">
<fieldset style="margin: 5px;">
WITAJ NA NASZYM PORTALU!
</fieldset>
</div>
<div id="logright">
<form method="post" action="login.php">
<table cellpadding="3">
<tr><td>Login:</td><td><input type="text" value="name" name="name"></td></tr>
<tr><td>Hasło:</td><td><input type="password" value="password" name="password"></td></tr>
<tr><td>.</td><td><input type="submit" value="Zaloguj"></td></tr>
</table>
</form>
</div>
<?php } else {
include 'include/left.php';
?>
<div id="center" style="min-height: 600px;">
<div id="tab-container-1">
<ul id="tab-container-1-nav">
<li class="activeli"><a class="active" href="#tab1">Tablica</a></li>
<li class=""><a class="" href="#tab2">Subskrybowani</a></li>
<li class=""><a class="" href="#tab3">Events</a></li>
<li class=""><a class="" href="#tab4">Pytania</a></li>
<li class=""><a class="" href="#tab5">Zdjęcia</a></li>
</ul>
<div style="display: block;" class="tab" id="tab1">
<br />
<div id="wall"></div><div id="menutext"><b>Buzz</b></div>
<br />
<?php
// sprawdzamy czy user nie jest przypadkiem zalogowany
if(!$_SESSION['logged']) {
echo 'Zaloguj się';
} else {
// jeśli zostanie naciśnięty przycisk "Wyślij"
if(isset($_POST['kpost'])) {
// filtrujemy dane...
$_POST['uid'] = clear($_POST['uid']);
$_POST['kpost'] = clear($_POST['kpost']);
$_POST['ip'] = clear($_POST['ip']);
// sprawdzamy czy wszystkie pola zostały wypełnione
if(empty($_POST['uid']) || empty($_POST['kpost'])) {
echo '<p>Napisz coś, dopiero potem kliknij "wyślij"</p>';
} else {
mysql_query("INSERT INTO `buzz` (`uid`, `kpost`, `data`) VALUES ('{$_POST['uid']}', '{$_POST['kpost']}', '".date('Y-m-d H:i:s')."')");
echo '<p>Opublikowane! ;)</p>';
}
}
echo '<form method="POST" action="index.php">
<div style="border: 1px solid rgb(204, 204, 204); border-radius: 5px; background: rgb(242, 242, 242); color: #FFF; margin: 5px; padding: 5px;">
<input name="kpost" value="'.$_POST['kpost'].'" style="width: 540px;" class="sm" type="text">
<input type="hidden" value="'.$user_data['user_id'].'" name="uid">
<input type="hidden" value="'.$_SERVER['REMOTE_ADDR'].'" name="ip">
<font class="sm" face="Arial,Helvetica" size="-1" style="float: right;">
<input value="Wyślij" class="sm btnN btnC" type="SUBMIT" name="wyslij">
</font>
</div>
</form>';
}
//Pobieramy dane z bazy
$query = mysql_query ("SELECT * FROM `buzz` ORDER BY `data` DESC LIMIT 5");
//Początek struktury tabeli
echo '<table width="100%">';
//Pętla do wyświetlenia wszystkich wpisów
while($shout=mysql_fetch_array($query)) {
echo '
<div style="border-bottom: 1px solid #000; color: #000; margin: 5px; padding: 5px;">
<b><a href="profile.php?id='.$shout['uid'].'">**Imię i nazwisko użytkownika**</a>:</b> <small>'.$shout['data'].'</small><br/>
'.$shout['kpost'].'<br/>
<small>
<font face="Arial,Helvetica" size="-1"><input value="+1" class="sm btnA btnC" type="SUBMIT"></font>
- Skomentuj - Udostępnij
</small>
</div>';
}
//Koniec struktury tabeli
echo '</table>';
?>
</div>
<div style="display: none;" class="tab" id="tab2">
<br />
<div id="friend"></div><div id="menutext"><b>Contacts</b></div>
<br />
<h2>Users you're following</h2>
...
</div>
<div style="display: none;" class="tab" id="tab3">
<br />
<div id="event"></div><div id="menutext"><b>Events</b></div>
<br />
</div>
<div style="display: none;" class="tab" id="tab4">
<br />
<div id="ask"></div><div id="menutext"><b>Pytania</b></div>
<br />
</div>
<div style="display: none;" class="tab" id="tab5">
<br />
<div id="photo"></div><div id="menutext"><b>Zdjęcia</b></div>
<br />
</div>
</div>
<script type="text/javascript">
var tabber1 = new Yetii({
id: 'tab-container-1'
});
</script>
</div>
<?php
}
include 'include/footer.htm';
echo '</div>';
?>
</body>
</html>
<?php
db_close();
?>
profile.php
<?php
include 'config.php';
db_connect();
// filtrujemy id oraz rzutujemy je na int
$_GET['id'] = (int)clear($_GET['id']);
// pobieramy dane usera z podanego id
$this_user = get_this_user($_GET['id']);
$user_data = get_user_data();
echo '<html>';
include 'include/head.htm';
echo '<body>';
include 'include/menu.php';
if(!$_SESSION['logged']) {
echo_login();
} else {
// sprawdzamy czy znalazło użytkownika
// jeśli nie to wyświetlamy komunikat
// a jeśli tak to wyświetlamy wszystkie jego dane
// jeśli user nie ma podanej strony www lub skąd jest to wyświetlamy "brak"
if($this_user === false) {
echo '<p>Niestety, taki użytkownik nie istnieje.</p>
<p>[<a href="index.php">Powrót</a>]</p>';
} else {
echo '
<div id="wrapper">
<div id="left" style="float: left;">
<img src="images/avatar.png" width="100" height="100">
</div>
<div id="center">
<h2>Profil użytkownika '.$this_user['user_full'].'</h2>
<table>
<tr><td>Imię: </td><td>'.$this_user['user_fname'].'</td></tr>
<tr><td>Nazwisko: </td><td>'.$this_user['user_lname'].'</td></tr>
<tr><td>Nick: </td><td>'.$this_user['user_name'].'</td></tr>
<tr><td>Data rejestracji: </td><td>'.date("d.m.Y, H:i", $this_user['user_regdate']).'</td></tr>
<tr><td>Strona WWW: </td><td>'.(empty($this_user['user_website']) ? 'brak' : $this_user['user_website']).'</td></tr>
<tr><td>Data urodzenia: </td><td>'.$this_user['user_birth'].'</td></tr>
<tr><td>Nardowość: </td><td></td></tr>
<tr><td>Skąd: </td><td>'.(empty($this_user['user_from']) ? 'brak' : $this_user['user_from']).'</td></tr>
<tr><td>Telefon: </td><td></td></tr>
<tr><td>Email: </td><td>'.$this_user['user_email'].'</td></tr>
<tr><td>Znajomi: </td><td></td></tr>
<tr><td>Zaintereowania: </td><td></td></tr>
<tr><td>Płeć: </td><td>';
if($this_user['user_gender'] === 2) {
echo 'Kobieta';
} else {
echo 'Mężczyzna';
}
echo '</td></tr>
</table>
</div>
';
if($this_user === $user_data) {
echo 'Subowanie samego siebie jest jak lizanie swoich jaj';
} else {
echo '<form method="POST" action="sub.php">';
echo '<input type="hidden" value="'.$this_user['user_id'].'" name="user_id">';
echo '<input type="hidden" value="'.$user_data['user_id'].'" name="follower_id">';
echo '<input value="Dodaj do kręgów" class="sm btnA btnC" float="right" style="font-size: 10px; border: 1px solid #000;" type="SUBMIT"><br />';
echo '</form>';
}
}
}
</div>';
include 'include/footer.htm';
?>
</body>
</html>
<?php
db_close();
?>
config.php
<?php
// definiujemy dane do połączenia z bazą danych
define('DBHOST', 'localhost');
define('DBUSER', 'root');
define('DBPASS', '');
define('DBNAME', 'socialcms');
function db_connect() {
// połączenie z mysql
mysql_connect(DBHOST, DBUSER, DBPASS) or die('<h2>ERROR</h2> MySQL Server is not responding');
// wybór bazy danych
mysql_select_db(DBNAME) or die('<h2>ERROR</h2> Cannot connect to specified database');
}
function db_close() {
mysql_close();
}
function clear($text) {
// jeśli serwer automatycznie dodaje slashe to je usuwamy
if(get_magic_quotes_gpc()) {
$text = stripslashes($text);
}
$text = trim($text); // usuwamy białe znaki na początku i na końcu
$text = mysql_real_escape_string($text); // filtrujemy tekst aby zabezpieczyć się przed sql injection
$text = htmlspecialchars($text); // dezaktywujemy kod html
return $text;
}
function codepass($password) {
// kodujemy hasło (losowe znaki można zmienić lub całkowicie usunąć
return sha1(md5($password).'#!%Rgd64');
}
// funkcja na sprawdzanie czy user jest zalogowany, jeśli nie to wyświetlamy komunikat
function check_login() {
if(!$_SESSION['logged']) {
die('<p>To jest strefa tylko dla użytkowników.</p>
<p>[<a href="login.php">Logowanie</a>] [<a href="register.php">Zarejestruj się</a>]</p>');
}
}
function echo_login() {
echo '<p>To jest strefa tylko dla użytkowników.</p>
<p>[<a href="login.php">Logowanie</a>] [<a href="register.php">Zarejestruj się</a>]</p>';
}
// funkcja na pobranie danych usera
function get_this_user($user_id = -1) {
// jeśli nie podamy id usera to podstawiamy id aktualnie zalogowanego
if($user_id == -1) {
$user_id = $_SESSION['user_id'];
}
$result = mysql_query("SELECT * FROM `users` WHERE `user_id` = '{$user_id}' LIMIT 1");
if(mysql_num_rows($result) == 0) {
return false;
}
return mysql_fetch_assoc($result);
}
// funkcja na pobranie danych usera
function get_user_data($user_id = -1) {
// jeśli nie podamy id usera to podstawiamy id aktualnie zalogowanego
if($user_id == -1) {
$user_id = $_SESSION['user_id'];
}
$result = mysql_query("SELECT * FROM `users` WHERE `user_id` = '{$user_id}' LIMIT 1");
if(mysql_num_rows($result) == 0) {
return false;
}
return mysql_fetch_assoc($result);
}
// startujemy sesje
session_start();
// jeśli nie ma jeszcze sesji "logged" i "user_id" to wypełniamy je domyślnymi danymi
if(!isset($_SESSION['logged'])) {
$_SESSION['logged'] = false;
$_SESSION['user_id'] = -1;
}
?>
<!DOCTYPE html>
Byłbym wdzięczny za pomoc.
Pozdrawiam.