пятница, 29 сентября 2017 г.

Соцсеть. Хештеги. Урок 24.

Хештеги.


Идем в файл Post.php

<?php
class Post {
public static function createPost($postbody, $loggedInUserId, $profileUserId) {
// валидация формы
if (strlen($postbody) > 160 || strlen($postbody) < 1) {
die('Incorrect length!');
}

// чтобы ты мог отправлять посты только от своего имени!
if ($loggedInUserId == $profileUserId) {
// 0 - кол-во лайков по умолчанию
DB::query('INSERT INTO posts VALUES (:id, :postbody, NOW(), :userid, 0, \'\')', array(':id'=>null, ':postbody'=>$postbody, ':userid'=>$profileUserId));
} else {
die('Incorrect user!');
}
}
public static function createImgPost($postbody, $loggedInUserId, $profileUserId) {
// валидация формы
if (strlen($postbody) > 160) {
die('Incorrect length!');
}

// чтобы ты мог отправлять посты только от своего имени!
if ($loggedInUserId == $profileUserId) {
// 0 - кол-во лайков по умолчанию
DB::query('INSERT INTO posts VALUES (:id, :postbody, NOW(), :userid, 0, \'\')', array(':id'=>null, ':postbody'=>$postbody, ':userid'=>$profileUserId));
$postid = DB::query('SELECT id FROM posts WHERE user_id=:user_id ORDER BY id DESC LIMIT 1', array(':user_id'=>$loggedInUserId))[0]['id'];
return $postid;
} else {
die('Incorrect user!');
}
}
public static function likePost($postId, $likerId) {
if (!DB::query('SELECT user_id FROM post_likes WHERE post_id=:postid AND user_id=:userid', array(':postid'=>$postId, ':userid'=>$likerId))) {
DB::query('UPDATE posts SET likes=likes+1 WHERE id=:postid', array(':postid'=>$postId));
DB::query('INSERT INTO post_likes VALUES (:id, :postid, :userid)', array(':id'=>null, ':postid'=>$postId, ':userid'=>$likerId));
} else {
DB::query('UPDATE posts SET likes=likes-1 WHERE id=:postid', array(':postid'=>$postId));
DB::query('DELETE FROM post_likes WHERE post_id=:postid AND user_id=:userid', array(':postid'=>$postId, ':userid'=>$likerId));
}
}
public static function link_add($text) {
$text = explode(" ", $text); // explode — Разбивает строку с помощью разделителя
$newstring = "";
foreach ($text as $word) {
// если первый символ слова @
if (substr( $word, 0, 1) == "@") {
$newstring .= "<a href='profile.php?username=".substr($word, 1)."'>".htmlspecialchars($word)." </a>"; // ссылка на профиль пользователя
} else if (substr( $word, 0, 1) == "#") {
$newstring .= "<a href='topics.php?topic=".substr($word, 1)."'>".htmlspecialchars($word)." </a>"; // ссылка на профиль пользователя
} else {
$newstring .= htmlspecialchars($word)." ";
}
}
return $newstring;
}
public static function displayPosts($userid, $username, $loggedInUserId) {
// посты
$dbposts = DB::query('SELECT * FROM posts WHERE user_id=:userid ORDER BY id DESC', array(':userid'=>$userid));
$posts = "";
foreach($dbposts as $p) {
if (!DB::query('SELECT post_id FROM post_likes WHERE post_id=:postid AND user_id=:userid', array(':postid'=>$p['id'], ':userid'=>$loggedInUserId))) {
//print_r($p);
$posts .= "<img src='".$p['postimg']."'>".(self::link_add($p['body']))."
<form action='profile.php?username=$username&postid=".$p['id']."' method='post'>
<input type='submit' name='like' value='Like'/>
<span>".$p['likes']." likes</span>
</form>
<hr /><br />";
} else {
$posts .= "<img src='".$p['postimg']."'>".(self::link_add($p['body']))."
<form action='profile.php?username=$username&postid=".$p['id']."' method='post'>
<input type='submit' name='unlike' value='Unlike'/>
<span>".$p['likes']." likes</span>
</form>
<hr /><br />";
}
}
return $posts;
}
}
?>

Создадим в таблице БД posts еще одну колонку topics varchar 400

Идем в файл Post.php
<?php
class Post {
public static function createPost($postbody, $loggedInUserId, $profileUserId) {
// валидация формы
if (strlen($postbody) > 160 || strlen($postbody) < 1) {
die('Incorrect length!');
}
// создание топиков
$topics = self::getTopics($postbody);

// чтобы ты мог отправлять посты только от своего имени!
if ($loggedInUserId == $profileUserId) {
// 0 - кол-во лайков по умолчанию
DB::query('INSERT INTO posts VALUES (:id, :postbody, NOW(), :userid, 0, \'\', :topics)', array(':id'=>null, ':postbody'=>$postbody, ':userid'=>$profileUserId, ':topics'=>$topics));
} else {
die('Incorrect user!');
}
}
public static function createImgPost($postbody, $loggedInUserId, $profileUserId) {
// валидация формы
if (strlen($postbody) > 160) {
die('Incorrect length!');
}
// создание топиков
$topics = self::getTopics($postbody);

// чтобы ты мог отправлять посты только от своего имени!
if ($loggedInUserId == $profileUserId) {
// 0 - кол-во лайков по умолчанию
DB::query('INSERT INTO posts VALUES (:id, :postbody, NOW(), :userid, 0, \'\', :topics)', array(':id'=>null, ':postbody'=>$postbody, ':userid'=>$profileUserId, ':topics'=>$topics));
$postid = DB::query('SELECT id FROM posts WHERE user_id=:user_id ORDER BY id DESC LIMIT 1', array(':user_id'=>$loggedInUserId))[0]['id'];
return $postid;
} else {
die('Incorrect user!');
}
}
public static function likePost($postId, $likerId) {
if (!DB::query('SELECT user_id FROM post_likes WHERE post_id=:postid AND user_id=:userid', array(':postid'=>$postId, ':userid'=>$likerId))) {
DB::query('UPDATE posts SET likes=likes+1 WHERE id=:postid', array(':postid'=>$postId));
DB::query('INSERT INTO post_likes VALUES (:id, :postid, :userid)', array(':id'=>null, ':postid'=>$postId, ':userid'=>$likerId));
} else {
DB::query('UPDATE posts SET likes=likes-1 WHERE id=:postid', array(':postid'=>$postId));
DB::query('DELETE FROM post_likes WHERE post_id=:postid AND user_id=:userid', array(':postid'=>$postId, ':userid'=>$likerId));
}
}
public static function getTopics($text) {
$text = explode(" ", $text); // explode — Разбивает строку с помощью разделителя
$topics = "";
foreach ($text as $word) {
// если первый символ слова @
if (substr( $word, 0, 1) == "#") {
$topics .= substr($word, 1).",";
}
}
return $topics;
}
public static function link_add($text) {
$text = explode(" ", $text); // explode — Разбивает строку с помощью разделителя
$newstring = "";
foreach ($text as $word) {
// если первый символ слова @
if (substr( $word, 0, 1) == "@") {
$newstring .= "<a href='profile.php?username=".substr($word, 1)."'>".htmlspecialchars($word)." </a>"; // ссылка на профиль пользователя
} else if (substr( $word, 0, 1) == "#") {
$newstring .= "<a href='topics.php?topic=".substr($word, 1)."'>".htmlspecialchars($word)." </a>"; // ссылка на профиль пользователя
} else {
$newstring .= htmlspecialchars($word)." ";
}
}
return $newstring;
}
public static function displayPosts($userid, $username, $loggedInUserId) {
// посты
$dbposts = DB::query('SELECT * FROM posts WHERE user_id=:userid ORDER BY id DESC', array(':userid'=>$userid));
$posts = "";
foreach($dbposts as $p) {
if (!DB::query('SELECT post_id FROM post_likes WHERE post_id=:postid AND user_id=:userid', array(':postid'=>$p['id'], ':userid'=>$loggedInUserId))) {
//print_r($p);
$posts .= "<img src='".$p['postimg']."'>".(self::link_add($p['body']))."
<form action='profile.php?username=$username&postid=".$p['id']."' method='post'>
<input type='submit' name='like' value='Like'/>
<span>".$p['likes']." likes</span>
</form>
<hr /><br />";
} else {
$posts .= "<img src='".$p['postimg']."'>".(self::link_add($p['body']))."
<form action='profile.php?username=$username&postid=".$p['id']."' method='post'>
<input type='submit' name='unlike' value='Unlike'/>
<span>".$p['likes']." likes</span>
</form>
<hr /><br />";
}
}
return $posts;
}
}
?>

Создаем файл topics.php
<?php
include('./classes/DB.php');
include('./classes/Login.php');
include('./classes/Post.php');
include('./classes/Image.php');
if (isset($_GET['topic'])) {
// выбираем топики из БД
if (DB::query("SELECT topics FROM posts WHERE FIND_IN_SET(:topic, topics)", array(':topic'=>$_GET['topic']))) {
// выберем посты
$posts = DB::query("SELECT * FROM posts WHERE FIND_IN_SET(:topic, topics)", array(':topic'=>$_GET['topic']));
foreach ($posts as $post) {
//echo "<pre>";
//print_r($post);
//echo "</pre>";
echo $post['body'] ."<br />";
}
}
}

?>    

Комментариев нет:

Отправить комментарий

Materialize-css. Футер

Сделаем футер и прижмем к низу страницы. Документация: https://materializecss.com/footer.html