2

我和我的朋友正在创建一个请愿板,我正在向它添加一个喜欢/不喜欢的功能。我打算让它只有用户可以喜欢/不喜欢它。问题是,我不知道如何确保用户不会多次向按钮发送垃圾邮件以及如何注册哪个用户喜欢/不喜欢哪个主题。以下是我到目前为止的代码。

编辑:谢谢我现在正在创建喜欢/不喜欢表。但是现在我必须将用户与数据库进行比较,以查看他们之前是否喜欢过评论。我知道我必须使用 WHERE(检查喜欢和不喜欢的表),但我不确定如何将它与 IF 结合使用。

<?php
include connect.php

if (isset($_POST['like']) || isset($_POST['dislike'])) 
{
    if($_SESSION['signed_in']){
        if (isset($_POST['like'])) {
            $sql="UPDATE 
                    topics
                SET
                    likes=likes+1,
                WHERE
                    id=topic_id";

            echo "You liked it";
        }

        elseif (isset($_POST['dislike'])) {
            $sql="UPDATE 
                    topics
                SET
                    dislikes=dislikes+1,
                WHERE
                    id=topic_id";

            echo "You disliked it";
        }
    }
    else{
        echo 'Please log in.'
}

?>
4

2 回答 2

5

您应该有一个包含以下列的“喜欢”表。

"article_id", "user_id", 主键应该包含两列

用户每点赞一篇文章,INSERT INTO 就点赞 VALUES($article_id, $user_id); 如果有人喜欢两次,它将失败,这要归功于主键。

每次用户不喜欢时,删除喜欢 WHERE article_id = $article_id AND user_id = $user_id。如果他愿意,这将允许用户再次喜欢。

要获取文章的点赞数,请运行 SELECT COUNT(*) as nb_of_likes FROM likes WHERE article_id = $article_id,而不是将数字存储在文章表中。

说得通 ?

于 2012-11-01T13:29:24.257 回答
0

以下解决方案是可能的,可以一起使用:

  • 如果您使用注册/登录机制,那么您可以在内部设置一些计数机制,以便每个用户可以在每个请愿书上点赞一次(就像 Bgi 建议的那样)。
  • 即使他创建了一个新用户,您也可以存储一个 cookie,阻止他进一步喜欢。
  • 当然,人们可以删除 cookie 或使用其他浏览器,因此您可以使用例如 md5 对他们的 IP 进行哈希处理,并比较该哈希是否已在使用请求。
  • 当然,多人可以共享同一个 IP,因此 IP 散列可能并不总是一个好的解决方案。或者,您可以使用 facebook API,并要求人们有一定数量的朋友或其他东西来验证他们的真实性。

您将永远无法完全摆脱垃圾邮件发送者,这取决于您的请愿书的具体程度。因此,您越想防止利用请愿书,它的匿名性就越低。

于 2012-11-01T13:37:41.530 回答