php-47 icon indicating copy to clipboard operation
php-47 copied to clipboard

如果一个用户点赞后,再次登入一个用户,点击提示点赞失败

Open jianchenghanshe opened this issue 9 years ago • 12 comments

rt

jianchenghanshe avatar Jun 08 '16 02:06 jianchenghanshe

@jianchenghanshe https://github.com/su-xiaolin/php-47/commit/eda21b1668624a1560d0249100bf91dee284ebe6

neatlife avatar Jun 08 '16 07:06 neatlife

@su-xiaolin 貌似没有吧

jianchenghanshe avatar Jun 08 '16 07:06 jianchenghanshe

@jianchenghanshe 你确定没有吗?

neatlife avatar Jun 08 '16 07:06 neatlife

@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}", "已经赞过了,不能重复点赞。");
        }`

登陆不同用户可以给同一篇文章点赞。我尝试修改部分代码,貌似可以了。

jianchenghanshe avatar Jun 08 '16 07:06 jianchenghanshe

👍,这种方式也非常好。

neatlife avatar Jun 08 '16 07:06 neatlife

@su-xiaolin 但是如果这样的话,会存好多个用户的session感觉有点拖沓,有没有其他办法?

jianchenghanshe avatar Jun 08 '16 07:06 jianchenghanshe

session_destroy()

neatlife avatar Jun 08 '16 08:06 neatlife

厉害!!!

jianchenghanshe avatar Jun 08 '16 08:06 jianchenghanshe

我的思路:

  1. 在user表中添加一个字段liked_article_id,用于记录该用户所有点过赞的文章的ID号(使用{}包裹每个ID) alter tableuseradd columnliked_article_idvarchar(500) not null default '0';
  2. 用户对文章点赞时,通过地址栏获取文章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 avatar Jun 09 '16 03:06 zzpwestlife

@zzpwestlife good。

howborn avatar Jun 09 '16 03:06 howborn

@zzpwestlife 非常好👍

neatlife avatar Jun 09 '16 09:06 neatlife

@zzpwestlife 赞

jianchenghanshe avatar Jun 10 '16 15:06 jianchenghanshe