我对php比较新。在下面的代码中,我试图更新用户' dietID' (他们当前的饮食,他们在注册时选择了它们),以便它改变存储在用户数据库中的dietID。但是,在按下“更改”后,提交按钮,没有任何反应,没有任何更新。谁能理解为什么?
表格处理代码:
<?php
if(trim($_POST['submit']) == "Change") {
require_once("connect.php");
if (!$db_server) {
die("Unable to connect to MySQL: " . mysqli_connect_error($db_server));
} else {
mysqli_select_db($db_server, $db_database) or die("<h1>Couldn't find db</h1>");
//UPDATE records of users table
$query="UPDATE users SET dietID=".$dietopt." WHERE ID= $sess_userID";
mysqli_query($db_server, $query) or die("Update failed" . mysqli_error($db_server));
}
require_once("db_close.php");
} else {
$message= "Your diet has been updated";
}
?>
形式:
Would you like to change what your current diet is? Please select one
<br>
<form action="account.php" method="post">
<td><input type="radio" name="dietopt" value="Meat-eater"/>Meat-eater</td>
<tr>
<td><input type="radio" name="dietopt" value="Vegetarian"/>Vegetarian</td></tr>
<tr>
<td><input type="radio" name="dietopt" value="Vegan"/>Vegan</td></tr>
<br>
<input type="submit" name="Change" value="Change">
<br>
</form>
和在注册页面上创建的会话变量(不以任何格式,从注册页面的整个代码的片段中复制和粘贴):
$dietopt = $row['dietID'];
$_SESSION['diet'] = $dietopt;
$dietopt= trim($_POST['dietopt']);
答案 0 :(得分:1)
要纠正的一些事情:
首先,提交按钮的名称为&#34;更改&#34;,因此您应该更改:
if(trim($_POST['submit']) == "Change") {
由:
if(trim($_POST['Change']) == "Change") {
其次, $ dietopt 的值将是一个字符串,例如&#34; Vegan&#34; ,因此需要引用。如果这确实是你所期望的,那么替换这一行:
$query="UPDATE users SET dietID=".$dietopt." WHERE ID= $sess_userID";
人:
$query="UPDATE users
SET dietID='"
.mysqli_real_escape_string($db_server,$_POST['dietopt']). "'
WHERE ID= $sess_userID";
我在这里使用了$_POST['dietopt']
,但如果您确定 $ dietopt 的值已正确设置,则可以使用它。
对mysqli_real_escape_string的调用可防止通过该值注入SQL。我建议改为使用prepared statements。
最后,设置 $ message 变量的位置也有问题:当用户到达此页面而未提交任何内容时,它会设置它。相反,它应该在成功更新后立即设置。所以删除它:
} else {
$message= "Your diet has been updated";
在查询后添加消息分配,如下所示:
mysqli_query($db_server, $query) or die("Update failed" . mysqli_error($db_server));
$message= "Your diet has been updated";
然后,您应该在某处显示该消息。这取决于您想要显示的其他内容,但您可以简单地添加到PHP块的末尾(在结束?>
之前)以下内容:
if (isset($message)) {
echo "<h4 style='color:green'>$message</h4>";
}
...或使用您想要的任何HTML和样式。
结束,最后一句话:
Please, don't use mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。