如何确保用户针对特定帖子仅点击我的投票链接一次?

时间:2017-04-09 10:50:42

标签: php html mysql

我有一个mysql表...

'用户'使用uname(字符串)作为主键。 '的帖子'以id为主键。

'帖子'有一个专栏 - '投票'

当用户登录时,他可以投票。问题是如何阻止他多次投票?

链接:(注意:$ q是帖子的ID)

<a href='./vote.php?upid=".$q."'>Upvote</a>

PHP:

if(isset($_GET["upid"])) {
        $plus = $_GET["upid"];
        $query = "UPDATE posts SET votes = votes + 1 WHERE id='$plus'";
        $result = mysqli_query($dbc, $query) or die('Error querying database!');
    }

2 个答案:

答案 0 :(得分:0)

采取两个步骤:

  1. Onclick将链接的样式设置为display:none。或者使用jQuery hide()。 (UX友好)(PHP:在未来页面加载时,如果用户已投票,则不显示链接。)

  2. 在您的数据库中,将操作保存在一个新的/单独的表中,只有在userid和postid的唯一组合时才允许INSERT。然后,您可以利用该表计算帖子ID的总票数。

  3. P.S。通过使用唯一的帖子ID和用户ID存储个人投票,您还可以允许用户撤消他们的投票。

答案 1 :(得分:0)

你是否记录了谁被投票了?如果是这样,你可以围绕上行投票链接做一个if语句,只有在没有投票的情况下才能显示链接?

这是最好的方式,我可以想到这样做,虽然你可以存储cookie /会话数据,但很明显它们很容易被绕过。 编辑:为了清楚起见,我说你不应该出于安全原因使用会话/ cookie数据,但是正如mickmackusa在评论中提到的那样,使用会话会因为越来越多的帖子而变得非常臃肿得到了投票。