我是一名新人,一路上学习。我在页面上有两个表单(我只显示其中一个表单,因为另一个表单是具有不同变量的相同代码)。它们的错误消息都显示在页面加载上。我怎么能阻止这个?
我已阅读多篇有关此事的帖子,但我仍无法找到解决方案。
<?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>";
}
?>
答案 0 :(得分:2)
else
之后有if (isset($_POST['Update']))
。在其他内部,您显示的错误就像用户尝试提交表单一样。如果用户尝试提交表单,$_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注入的风险。请改用{{3}}。
答案 1 :(得分:1)
问题是每次没有设置变量$_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>";
}
}
希望有所帮助!