我有一个投票系统,主要是我期望它的工作方式。用户在屏幕上的特定项目的投票中向上或向下点击向上或向下投票按钮,并按照预期更新数据库并记录投票。但是我不希望用户多次投票。
我的数据库中有一个名为'votes'的表,在其中我有一个'id'列是主键,我有一个'reportid'列,它将报告ID插入表中,我也有一个名为'userid'的字段,用于记录当前登录用户的会话用户ID。按下投票按钮后,它会按照人们的预期将此信息记录在数据库中。
我的问题是我希望能够检查我的数据库以查看reportid和userid是否在同一行中,如果用户已经投票并且记录了reportid和userid然后我不想要我的要执行的代码,但如果它们不存在,那么我希望代码执行。
到目前为止,您可以看到我的代码:
<h4> Votes </h4>
<table>
<tr>
<th>Up-Votes</th>
<th>Down-Votes</th>
<tr/>
<tr>
<?php
// Connects to your Database
mysql_connect("localhost", "root", "pass") or die(mysql_error());
mysql_select_db("tablename") or die(mysql_error());
if ( isset( $_POST['Upvote'] ) )
{
mysql_query ("UPDATE reports SET up = up + 1 WHERE reportID = $id");
mysql_query ("INSERT INTO votes (reportname, userid)
VALUES ('$id', '$_SESSION[sess_uid]')"); /* This code is what is used to check if the user has voted */
} else if (isset( $_POST['Downvote'] ))
{
mysql_query ("UPDATE reports SET down = down + 1 WHERE reportID = $id");
mysql_query ("INSERT INTO votes (reportname, userid)
VALUES ('$id', '$_SESSION[sess_uid]')"); /* This code is what is used to check if the user has voted */
}
//Puts SQL Data into an array
$data = mysql_query("SELECT * FROM reports WHERE reportID = $id") or die(mysql_error());
while($ratings = mysql_fetch_array( $data ))
{
//This outputs the sites name
Echo "<td>" .$ratings['up']."</td>";
Echo "<td>" .$ratings['down']."</td>";
}
?>
</tr>
</table>
<br/>
<form method='POST'>
<input type='submit' value='up' name='Upvote' class="myButton">
<input type='submit' value='down' name='Downvote' class="myButton">
</form>
我的数据库表再次按预期更新我不确定如何检查现有信息,并且如果记录了他们的详细信息,则不允许用户再次投票。
由于
答案 0 :(得分:1)
给它一个旋转:
SELECT count(*) FROM votes WHERE reportname = $id AND userid = $_SESSION['sess_uid'];
在插入/更新查询之前运行该查询。如果计数大于0,则不要运行其他查询。
顺便说一下,你的查询很容易被SQL注入,这非常危险。此外,mysql_ *函数(mysql_query,mysql_fetch_assoc)在PHP中已弃用,应替换为PDO。
见这里:http://www.veracode.com/security/sql-injection
在这里:http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059