gpt4 book ai didi

php - 如何编写投票系统?

转载 作者:行者123 更新时间:2023-11-29 01:07:12 25 4
gpt4 key购买 nike

我刚开始自学 php。我正在给自己做微型项目来插入自己。

到目前为止,我有一个 MYSQL 数据库,它是通过 php 表单创建的。一栏是业力。我将数据库表的值显示在一个 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 会向如下网址发出请求:

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

In this URL, we can see the vote is being cast on post #1303528. And the vote-type is represented by 2. This 2 likely represents "add one." You could use a more basic url, and go with something like:

    vote.php?answerid=383&vote=1

The vote.php page would have code similar to the following:

(warning: do not use this code as-is. It is meant to be an example, not a solution)

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

}

关于php - 如何编写投票系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1303528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com