当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行


SQL/PHP updates multiple rows when client modifies javascript function parameter for two buttons to be the same

我正在尝试创建一个投票功能,用户可以在其中查看多个评论并对每个评论进行投票。每个投票按钮都是这样的,

<input type="button" value="UpVote93" id="upvote_55" onclick="upvote('commendID1')">
<input type="button" value="UpVote42" id="upvote_56" onclick="upvote('commendID2')">

upvote(param)函数是这样的ajax调用,

function upvote(x) {
     $.ajax({
          url: 'dbHandler.php',
          type: 'post',
          data: {
               "action": 'UPVOTE_COMMENT',
               "unique_answer_id": x
           },
           success: function(data){ 
                 alert(1);
            },
            failure: function(data){ 
                 alert(0);
            },
            complete: function(data) {
                 alert(2);  
            }
      });
}

php更新语句如下所示,

$query = $conn->query("UPDATE answers SET vote_count = vote_count+1 WHERE commentID='$commentID' LIMIT 1>

问题是,用户可以将第二个按钮向上投票参数更改为"commentID1"。现在,当他单击第二个按钮时,mysql数据库中的两行将更新这两个注释,即commentID1和commentID2。

我在投票教程网站上尝试了同样的方法,并能够复制这个问题。然而,当我厌倦了Quora这样的网站时,这个bug就不存在了。实现此功能的最佳方法是什么?

您可以尝试将输入转换为html数组。PHP擅长阅读这些内容。类似于:

<input name="MyArray[]" /> 
<input name="MyArray[]" />

然后,您可以将输入读取为数组,并将其处理为数组。

你指的是用户可以多次投票支持评论吗?

  1. 如果你的用户必须登录,那么你可以很容易地将他们的用户id存储在数据库中的投票旁边,以确保他们每个评论只投票一次。

  2. 如果不需要登录,您可以将他们的IP地址存储在DB中,也可以将其保存在他们已经投票的会话(或可能是cookie)中。