如何编制投票系统?

时间:2009-08-20 01:38:27

标签: php mysql counter increment

我在教自己php的初期。 我正在给自己微观项目以推动自己。

到目前为止,我有一个MYSQL数据库,通过php表单创建。一栏是因果报应。 我将数据库表的值显示在html表中,并且在每行的末尾,我想点击一个超链接,让我们说一个加号,将该行的业力级别增加1.然后加号会消失。

我应该每行都有一个自动增量整数作为主键。

2 个答案:

答案 0 :(得分:12)

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

用户答案投票

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

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会将请求发送到以下网址:

    http://stackoverflow.com/posts/1303528/vote/2

在此网址中,我们可以看到在#1303528帖子上投票。投票类型由2表示。这可能代表“添加一个”。您可以使用更基本的网址,并使用以下内容:

    vote.php?answerid=383&vote=1

vote.php页面的代码类似于以下内容:

(警告:不要按原样使用此代码。它只是一个示例,而不是解决方案)

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.";
    }
  }

}

答案 1 :(得分:2)

我个人喜欢Jonathan的回答。

但是,如果您觉得可能需要更多信息,我可能会提供帮助。

作为一个小方案项目,我试图为我的大学制作一个像bash.org这样的报价数据库 它是使用MySql和PHP开发的,它的发布/投票方式与您要完成的内容非常相似。
它绝不是一个设计良好的网络应用程序。然而,它可能会让你朝着正确的方向前进。

实时测试网站link(温柔!)

GitHub上的代码link

我会看一下database schemaphp - db-integrationajax to update a vote

代码相当简单直接。需要注意的一点是“ filter_input ”,这些函数来自PHP库,用于清理用户输入以防止SQL注入。