您将遇到的最大障碍是识别唯一身份用户。最好的方法是强制注册和登录。那是另一个话题的讨论。
不管你的表需要有 2 个其他列。
QuestionID MediumINT (15),无符号,主索引,自动增量。这应该是第一列。
QuestionVoters 文本,NULL。该字段将保存已投票的用户 ID 的 json 编码数组。 array('123', '38', '27', '15')
在您的While() 循环中检查用户的ID 是否在QuestionVoters 数组中。
如果存在,则不要给他们投票操作。否则,使用按钮构建表单以提交到处理页面。
<?php
// Need to assign the user's ID to a variable ($userID) to pass to the form.
$userID = '123'; // this needs to be handled on your end.
// updated sql to include Id and voters
$sql = "SELECT QuestionID, QuestionHeader, QuestionText, QuestionVotes, QuestionVoters FROM question ORDER BY QuestionVotes DESC LIMIT 3";
while($row = $result->fetch_assoc()) {
$voters = json_decode($row['QuestionVoters'], true); // array of userid's that have voted
IF (in_array($userID, $voters)) {
// user has voted
echo "\n
<div class=\"col-md-4\">
<h2>". $row["QuestionHeader"]. "</h2>
<p>". $row["QuestionText"]. "</p>
<p>" . $row["QuestionVotes"] . "</p>
</div>";
}ELSE{
// user has not voted
echo "\n
<div class=\"col-md-4\">
<form action=\"vote_processing.php\" name=\"voting\" method=\"post\">
<input type=\"hidden\" name=\"qid\" value=\"".$row['QuestionID']."\" />
<input type=\"hidden\" name=\"userid\" value=\"".$userID."\" />
<h2>". $row["QuestionHeader"]. "</h2>
<p>". $row["QuestionText"]. "</p>
<p><button type=\"submit\" value=\"Submit\">" . $row["QuestionVotes"] . "</button></p>
</form>
</div>";
}
}
?>
vote_processing.php(示例)
<?php
IF (isset($_POST['qid'])) {
$qid = htmlspecialchars(strip_tags(trim($_POST['qid']))); // basic sanitization
$userid = htmlspecialchars(strip_tags(trim($_POST['userid']))); // basic sanitization
IF ( (is_int($qid)) && (is_int($userid)) ) { // validate that both are integers
// db connection
$connection = mysqli_connect('localhost', 'root', '', 'test');
mysqli_set_charset($connection, 'utf8');
if (!$connection) {
die("Database connection failed: " . mysqli_error());
}
// Get voters array
$sql = "SELECT QuestionVoters FROM question WHERE QuestionID = '".$qid."'";
$result = $connection->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
IF (!empty($row['QuestionVoters'])) {
// decode users array
$voters = json_decode($row['QuestionVoters'], true);
}ELSE{
$voters = array(); // create array
}
}
mysqli_free_result($result);
// re-validate the userID "is not" in array
IF (!in_array($userid, $voters)) { // note the ! [meaning NOT].
$voters[] = $userid; // add userid to voters array
$qvoters = json_encode($voters); // encode voters array
// update vote
$sql_upd = "UPDATE question SET QuestionVotes = QuestionVotes + 1, QuestionVoters = $qvoters WHERE QuestionID = '".$qid."'";
$upd_result = $connection->query($sql_upd);
}
}
mysqli_close($connection);
}
}
// redirct back to previous page
?>