我是一个新手,只是一路学习。我在一个页面上有两个表单(我只显示了其中一个,因为另一个表单是带有不同变量的相同代码)。它们的两条错误消息都显示在页面加载上。我该怎么阻止?
我已经读了很多关于这方面的帖子,但我仍然找不到解决方案。
<?php
if(isset($_POST['Update'])) {
$c_fname = $_POST['fname'];
$c_lname = $_POST['lname'];
$c_email = $_POST['email'];
$c_phone = $_POST['phone'];
// Save $_POST to $_SESSION
//query
$insert_det = "INSERT INTO Cus_acc_details(CUS_Fname,CUS_Lname,Cus_Email,CUS_Phone)
VALUES (?,?,?,?)
ON DUPLICATE KEY
UPDATE
Cus_acc_details.CUS_Fname = '$c_fname',
Cus_acc_details.Cus_Lname = '$c_lname',
Cus_acc_details.Cus_Email = '$c_email',
Cus_acc_details.CUS_Phone = '$c_phone'";
$stmt = mysqli_prepare($dbc, $insert_det);
//new
// $stmt = mysqli_prepare($dbc, $insert_c);
//debugging
//$stmt = mysqli_prepare($dbc, $insert_c) or die(mysqli_error($dbc));
mysqli_stmt_bind_param($stmt, 'sssi', $c_fname, $c_lname, $c_email, $c_phone);
/* execute query */
$r = mysqli_stmt_execute($stmt);
// if inserted echo the following messges
if ($r) {
echo "<script> alert('Saved')</script>";
}
} else {
echo "<b>Oops! we have an issu </b>";
}
?>
在if (isset($_POST['Update']))
之后有一个else
。在其他内容中,您显示错误,就好像用户试图提交表单一样。如果用户尝试提交表单,则仅设置$_POST['Update']
。将其他内容移动到if:中
if (isset($_POST['Update'])) {
/* a bunch of code to insert into the DB */
// if inserted echo the following messges
if ($r) {
echo "<script> alert('Saved')</script>";
}else{
echo "<b>Oops! we have an issu </b>";
}
}
此外:
评论者是对的。您面临SQL注入的风险。请使用事先准备好的语句。
问题是每次未设置变量$_POST['Update']
时,您的else语句都在运行。
解决此问题的一种方法是将错误消息移动到表单检查代码中。像这样的东西会起作用:
if (isset($_POST['Update'])) {
/* unchanged code snipped */
if ($r) {
echo "<script> alert('Saved')</script>";
} else {
echo "<b>Oops! we have an issu </b>";
}
}
希望能有所帮助!