Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何规划投票系统?_Php_Mysql_Counter_Increment - Fatal编程技术网

Php 如何规划投票系统?

Php 如何规划投票系统?,php,mysql,counter,increment,Php,Mysql,Counter,Increment,我刚刚开始自学php。 我给自己微型项目来推动自己 到目前为止,我有一个通过php表单创建的MYSQL数据库。一列是为业力。 我将数据库表的值显示在一个html表中,在每行的末尾,我希望单击一个超链接,比如一个加号,将该行的业力级别提高1。然后加号就会消失 我希望每一行都有一个自动递增的整数作为主键。对于这个例子,让我们假设您对这么多答案进行投票。这将需要至少三个表: 用户,答案,投票 投票表将保存所有历史记录: voteid | userid | answerid | value ------

我刚刚开始自学php。 我给自己微型项目来推动自己

到目前为止,我有一个通过php表单创建的MYSQL数据库。一列是为业力。 我将数据库表的值显示在一个html表中,在每行的末尾,我希望单击一个超链接,比如一个加号,将该行的业力级别提高1。然后加号就会消失


我希望每一行都有一个自动递增的整数作为主键。

对于这个例子,让我们假设您对这么多答案进行投票。这将需要至少三个表:

用户答案投票

投票表将保存所有历史记录:

voteid | userid | answerid | value
----------------------------------
   1   |   12   |   383    |   1
   2   |   28   |   383    |  -1  (negative number would require signed values)
在这个例子中,我们看到记录了两票。用户12和28都对答案383进行了投票。用户12喜欢它,并在其支持中添加了1。用户28不喜欢它,从它的支持中减去1

每当用户投票时,您都应该首先检查该用户是否已经对该特定问题进行了投票。如果他们有,您可以拒绝任何进一步的投票尝试,或用新的投票覆盖他们的旧投票

SELECT * 
FROM votes 
WHERE (userid = 12) 
  AND (answerid = 383)
这是一个非常简单的示例查询,它将告诉您用户是否已经投票。如果它返回记录,你就知道他们已经投票了。您可以用一条非常友好的“对不起,您已经投票了”消息来回应,或者您可以覆盖它:

UPDATE votes 
SET value = $votevalue 
WHERE (userid = 12) 
  AND (answerid = 383)
话虽如此,让我们看看SO是如何做到这一点的: 单击向上投票箭头时,SO会向url发出请求,如下所示:

http://stackoverflow.com/posts/1303528/vote/2
就个人而言,我喜欢乔纳森的回答。

然而,如果你觉得你可能需要更多的信息,我可能会提供帮助

作为一个小型项目,我尝试为我的大学建立一个类似bash.org的报价数据库。
它是使用MySql和PHP开发的,它的发布/投票功能与您试图实现的功能非常相似
这绝不是一个设计良好的web应用程序。然而,它可能会让你朝着正确的方向前进

现场测试现场:(温柔一点!)

GitHub上的代码:

我会看一看这个,这个,还有这个


代码的前言相当简单明了。需要注意的是“过滤输入”,这些函数来自PHP库,用于清理用户输入以防止SQL注入

真正的问题在哪里?嗯,也许你想要AJAX。缓存投票计数也是个好主意,尤其是对于流行问题。 vote.php?answerid=383&vote=1
if ($_GET) {

  $userid   = $_SESSION["userid"]; // assumes the user is logged in via SESSIONS
  $answerid = $_GET["answerid"];
  $votetype = $_GET["vote"];

  $query = "SELECT * 
            FROM votes 
            WHERE (userid = {$userid}) 
              AND (answerid = {$answerid})";

  $result = mysql_query($query) or die(mysql_error());

  if (mysql_num_rows($result) > 0) {
    # User has voted
    print "Sorry, you are only allowed one vote.";
  } else {
    # User has not voted, cast the vote
    $query = "INSERT INTO votes (userid, answerid, votevalue)
              VALUES({$userid},{$answerid},{$vote})";
    $result = mysql_query($query) or die(mysql_error());
    if (mysql_affected_rows($result) > 0) {
      print "Your vote has been recorded.";
    }
  }

}