Удаление постов.
Откроем
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>
";
//
удаление постов
if
($userid == $loggedInUserId) {
$posts
.= "<input type='submit' name='dletepost' value='x'/>";
}
$posts
.= "
</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>
";
//
удаление постов
if
($userid == $loggedInUserId) {
$posts
.= "<input type='submit' name='dletepost' value='x'/>";
}
$posts
.= "
</form><hr
/><br />";
}
}
return $posts;
}
}
?>
Идем в profile.php
<?php
include('./classes/DB.php');
include('./classes/Login.php');
include('./classes/Post.php');
include('./classes/Image.php');
$username
= '';
$isFollowing
= False;
$verified
= False; // верифицирован ли пользователь
if
(isset($_GET['username'])) {
if
(DB::query('SELECT username FROM users WHERE username=:username',
array(':username'=>$_GET['username']))) {
$username
= DB::query('SELECT username FROM users WHERE username=:username',
array(':username'=>$_GET['username']))[0]['username'];
$userid
= DB::query('SELECT id FROM users WHERE username=:username',
array('username'=>$_GET['username']))[0]['id']; // id
залогиненного
$verified
= DB::query('SELECT verified FROM users WHERE username=:username',
array(':username'=>$_GET['username']))[0]['verified'];
$followerid
= Login::isLoggedin(); // Получаем id фолловера. Это
id залогиненного
//
проверяем была ли нажата кнопка follow
if
(isset($_POST['follow'])) {
//
когда не можешь быть фолловером самого
себя
if
($userid != $followerid) {
if
(!DB::query('SELECT follower_id FROM followers WHERE user_id=:userid
AND follower_id=:followerid', array(':userid'=>$userid,
':followerid'=>$followerid))) {
//
пользователь с id=6 нажимает follow и
пользователь становится верефицированным
if
($followerid == 6) {
DB::query('UPDATE users SET verified=1 WHERE
id=:userid', array(':userid'=>$userid));
}
DB::query('INSERT INTO followers VALUES (:id,
:userid, :followerid)', array(':id'=>null,':userid'=>$userid,
':followerid'=>$followerid));
//DB::query('INSERT INTO followers VALUES (\'\',
:userid, :followerid)', array(':userid'=>$userid,
':followerid'=>$followerid));
}
else {
echo 'Already following!';
}
$isFollowing = True;
}
}
//
проверяем была ли нажата кнопка unfollow
if
(isset($_POST['unfollow'])) {
//
когда не можешь быть фолловером самого
себя
if
($userid != $followerid) {
if
(DB::query('SELECT follower_id FROM followers WHERE user_id=:userid
AND follower_id=:followerid', array(':userid'=>$userid,
':followerid'=>$followerid))) {
//
пользователь с id=6 нажимает unfollow и
пользователь становится неверефицированным
if
($followerid == 6) {
DB::query('UPDATE users SET verified=0 WHERE
id=:userid', array(':userid'=>$userid));
}
DB::query('DELETE FROM followers WHERE
user_id=:userid AND follower_id=:followerid',
array(':userid'=>$userid, ':followerid'=>$followerid));
}
$isFollowing = False;
}
}
if
(DB::query('SELECT follower_id FROM followers WHERE user_id=:userid
AND follower_id=:followerid', array(':userid'=>$userid,
':followerid'=>$followerid))) {
$isFollowing = True;
}
//
удаление поста
if
(isset($_POST['deletepost'])) {
//
проверяем существует ли этот пост
if
(DB::query('SELECT id FROM posts WHERE id=:postid AND
user_id=:userid', array(':postid'=>$_GET['postid'],
':userid'=>$followerid))) {
//
удалем пост
DB::query('DELETE FROM posts WHERE id=:postid and
user_id=:userid', array(':postid'=>$_GET['postid'],
':userid'=>$followerid));
//
удаляем лайки, связанные с постом
DB::query('DELETE FROM post_likes WHERE
post_id=:postid', array(':postid'=>$_GET['postid']));
echo
'Post deleted!';
}
}
//
Отправка формы
if
(isset($_POST['post'])) {
if
($_FILES['postimg']['size'] == 0) {
Post::createPost($_POST['postbody'],
Login::isLoggedIn(), $userid);
}
else {
$postid = Post::createImgPost($_POST['postbody'],
Login::isLoggedIn(), $userid);
Image::uploadImage('postimg', "UPDATE posts
SET postimg=:postimg WHERE id=:postid",
array(':postid'=>$postid));
}
}
//
лайки
if
(isset($_GET['postid']) && !isset($_POST['deletepost'])) {
Post::likePost($_GET['postid'], $followerid);
}
$posts
= Post::displayPosts($userid, $username, $followerid);
}
else {
die('User
not found!');
}
}
?>
<h1><?php
echo $username; ?>'s' Profile<?php if ($verified) { echo ' -
Verified'; } ?> </h1>
<form
action="profile.php?username=<?php echo $username; ?>"
method="post">
<?php
//
кнопка follow не будет отображаться для
своего собственного профайла
if
($userid != $followerid) {
if
($isFollowing) {
echo
'<input type="submit" name="unfollow"
value="Unfollow"/>';
}
else {
echo
'<input type="submit" name="follow"
value="Follow"/>';
}
}
?>
</form>
<form
action="profile.php?username=<?php echo $username; ?>"
method="post" enctype="multipart/form-data">
<textarea
name="postbody" cols="80" rows="8"></textarea>
<br />
Upload
an image:
<input
type="file" name="postimg"/>
<input
type="submit" name="post" value="Post"/>
</form>
<div
class="posts">
<?php
echo $posts; ?>
</div>
Обязательно
удалим связь между таблицами post_like
и posts по id!!!!!
Иначе будет ошибка при удалении
лайкнутых постов.
Комментариев нет:
Отправить комментарий