表不会更新一些奇怪的原因
问题描述:
我想现在2小时想弄清楚为什么我的表不会更新,对于上帝的爱,我无法弄清楚。这是一个简单的民意调查设置。 我用“更新评论”替换了“更新评论”,它更新了评论没有问题。民意调查然而只是不会工作,所以我想这个问题是在数据库中,但这是我能得到的。也许有人可以帮我解决这个问题?表不会更新一些奇怪的原因
if (@$_POST['vote']) {
$check_votes = mysql_query ("SELECT votes FROM votes WHERE voter='$user' AND vote_subject='$subject'");
$numrows_votes = mysql_num_rows($check_votes);
if ($numrows_votes == 1) {
$error = "You already voted on this poll.";
}
else {
$check_polls = mysql_query ("SELECT * FROM polls WHERE poll_subject='$subject'");
while($row_polls = mysql_fetch_array($check_polls)) {
$vote1 = $row_polls['vote_one'];
$vote2 = $row_polls['vote_two'];
$numvote = 1;
$newvote1 = $vote1 + $numvote;
$newvote2 = $vote2 + $numvote;
$polloption = $_POST['choice'];
if ($polloption == "") {
$error = "You didn't select any option.";
}
else if ($polloption == "one") {
mysqli_query("UPDATE polls SET vote_one='$newvote1' WHERE poll_subject='$subject'");
}
else {
mysqli_query("UPDATE polls SET vote_two='$newvote2' WHERE poll_subject='$subject'");
}
}
}
}
这里是表单代码:
<form action="" method="POST">
<h4>What question would you like to ask?</h4>
<input type='radio' name='choice' value='one'>
<?php echo "$newvote1"; ?>
<br>
<input type='radio' name='choice' value='two'>
<?php echo "$newvote2"; ?>
<p class="buttons">
<input type="submit" name="vote" value="VOTE">
</p>
</form>
答
如通过上文@jeroen,你混合你的数据库API注释中。但是,你真正应该做的是抛弃它们并使用像PDO这样的更高级别的API。
mysql_*
函数已经5年不支持,并且将从下一版本的PHP中完全删除。如果使用得当,mysqli_*
函数可以正常工作,但PDO提供了许多方便的方法,还允许您更轻松地更改底层数据库。
这里是您的代码片段,用PDO快速重写,使用准备好的语句。完全未经测试,但应该工作,假设$db
是set up correctly。如果您打算对数据库做任何事情,您应该阅读准备好的声明并不断使用它们。
if (isset($_POST['vote'])) {
$stmt = $db->prepare("SELECT COUNT(*) FROM votes WHERE voter=? AND vote_subject=?");
$stmt->execute(array($user, $subject));
if ($stmt->fetchColumn() > 0) {
$error = "You already voted on this poll.";
} else {
$stmt = $db->prepare("SELECT * FROM polls WHERE poll_subject=?");
$stmt->execute(array($subject));
while($row_polls = $stmt->fetch(PDO::FETCH_ASSOC)) {
$vote1 = $row_polls['vote_one'];
$vote2 = $row_polls['vote_two'];
$numvote = 1;
$newvote1 = $vote1 + $numvote;
$newvote2 = $vote2 + $numvote;
$polloption = $_POST['choice'];
if ($polloption == "") {
$error = "You didn't select any option.";
} elseif ($polloption == "one") {
$stmt2 = $db->prepare("UPDATE polls SET vote_one=? WHERE poll_subject=?");
$stmt2->execute(array($newvote1, $subject));
} else {
$stmt2 = $db->prepare("UPDATE polls SET vote_two=? WHERE poll_subject=?");
$stmt2->execute(array($newvote2, $subject));
}
}
}
}
你知道在调用mysqli_query之后,你需要检查它是否成功并显示错误(如果有的话),对不对? –
你有没有试过['mysqli_commit()'](http://php.net/manual/en/mysqli.commit.php)? – samlev
@Lashane如何检查天气是否成功?对不起,我进入了php,因为它有2周的时间。所有这些都很新颖。 –