php-47
php-47 copied to clipboard
如果一个用户点赞后,再次登入一个用户,点击提示点赞失败
rt
@jianchenghanshe https://github.com/su-xiaolin/php-47/commit/eda21b1668624a1560d0249100bf91dee284ebe6
@su-xiaolin 貌似没有吧
@jianchenghanshe 你确定没有吗?
@su-xiaolin
` if (!isset($_SESSION["praise_{$id}_{$uid}"]) || $_SESSION["praise_{$id}_{$uid}"] != true) {
ArticleModel::create()->increasePraiseNumber($id);
//echo $_SESSION["praise_{$id}_{$uid}"];die;
// id为$id的文章已经赞过了
$_SESSION["praise_{$id}_{$uid}"] = true;
$this->redirect("index.php?p=frontend&c=Article&a=detail&id={$id}", "点赞成功。");
} else {
// 已经赞过
$this->redirect("index.php?p=frontend&c=Article&a=detail&id={$id}", "已经赞过了,不能重复点赞。");
}`
登陆不同用户可以给同一篇文章点赞。我尝试修改部分代码,貌似可以了。
👍,这种方式也非常好。
@su-xiaolin 但是如果这样的话,会存好多个用户的session感觉有点拖沓,有没有其他办法?
session_destroy()
厉害!!!
我的思路:
- 在user表中添加一个字段liked_article_id,用于记录该用户所有点过赞的文章的ID号(使用{}包裹每个ID)
alter tableuseradd columnliked_article_idvarchar(500) not null default '0'; - 用户对文章点赞时,通过地址栏获取文章ID,通过session获取用户ID,从数据库中查找出该用户已赞的文章ID字段
$id = $_GET['id'];
$uid = $_SESSION['user']['id'];
$likedArticle = ArticleModel::create()->getLikedArticle($uid);
public function getLikedArticle($uid)
{
$sql = "SELECT `liked_article_id` FROM `user` WHERE id = {$uid}";
return $this->getOne($sql);
}
判断本文章的ID在liked_article_id字段中是否存在
$needle = "{" . $id . "}";
$haystack = $likedArticle['liked_article_id'];
if (mb_strpos($haystack, $needle)) { // 点过赞
$this->redirect("index.php?p=frontend&c=Article&a=detail&id={$id}", '您已点过赞,请勿重复点赞');
} else {
ArticleModel::create()->likeIncrement($id); // article表的like字段自增
$haystack .= "{" . $id . "}"; // 将本文章的ID字段添加至user表的liked_article_id字段
ArticleModel::create()->updateLikedArticle($uid, $haystack);
$this->redirect("index.php?p=frontend&c=Article&a=detail&id={$id}", '点赞成功');
}
public function updateLikedArticle($uid, $likedArticle)
{
$sql = "UPDATE `user` SET `liked_article_id` = '{$likedArticle}' WHERE `id` = {$uid}";
return $this->exec($sql);
}
@zzpwestlife good。
@zzpwestlife 非常好👍
@zzpwestlife 赞