我在教自己php的初期。 我正在给自己微观项目以推动自己。
到目前为止,我有一个MYSQL数据库,通过php表单创建。一栏是因果报应。 我将数据库表的值显示在html表中,并且在每行的末尾,我想点击一个超链接,让我们说一个加号,将该行的业力级别增加1.然后加号会消失。
我应该每行都有一个自动增量整数作为主键。
答案 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会将请求发送到以下网址:
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 schema,php - db-integration和ajax to update a vote。
代码相当简单直接。需要注意的一点是“ filter_input ”,这些函数来自PHP库,用于清理用户输入以防止SQL注入。