我是PHP的新手,但我希望页面在出现错误时自行处理(contact.PHP),但如果通过验证,则转到另一个PHP页面(contactconfirm.PHP)。有人能告诉我这个代码出了什么问题吗?
if(isset($_POST['submit'])){
if(empty($name)) {
$errors ++ ;
echo "<p>You did not enter a name.</p>";
} else {
$errors = 0;
}
if(empty($email)) {
$errors ++ ;
echo "<p>You did not enter an e-mail.</p>";
} else {
$cleanEmail = filter_var($email, FILTER_SANITIZE_EMAIL);
if (!filter_var($cleanEmail, FILTER_VALIDATE_EMAIL)){
$errors ++;
echo "<p>Invalid e-mail. Please try again.</p>";
} else {
$errors = 0;
}
}
} //closes isset
?>
<div class="contact-form">
<div class="inputArea">
<form action="<?php echo ($errors > 0) ? 'contact.php' : 'contactconfirm.php' ?>" method="post">
每次通过验证阶段时,都会将$errors
重置为0
。
例如
check if "foo" is correct: nope, increments $errors -> `1`
check if "bar" is correct: yep, reset $errors to 0
if ($errors == 0)
everything is perfect! happy joy joy!
}
但是,"foo"是错误的,现在你说一切都好,因为你的错误计数器被重置了。只需从验证/验证阶段中删除$errors = 0
的ALL即可。
请参阅Marc B的回答,指出第一个初始问题。
您在每张支票的其他部分重置$errors=0。您必须删除这些语句,否则,如果后面的check语句有效,$errors变量将被重置。
此外,最好不要在检查期间打印错误,而是附加到错误数组中,并在所有错误检查发生后检查错误变量。
例如
if($errors>0){
print_r($errorArray);
}
或
if($errors>0){
foreach($errorArray as $error){
echo $error;
}
}
此外,如果没有其他代码,这一点还不清楚,但上半部分似乎是在重定向到此页面后进行验证,但这永远不会发生,因为您首先会自动将表单操作设置为contactconfirm.php
,因为$errors在第一页加载时不会有值。如果没有完整的页面,我可能会误解你的代码。
您应该考虑删除表单中的turnary操作符,并使操作始终为contact.php
。
然后,您可以使用条件逻辑来检查是否没有错误,如果没有,则使用header("Location: contactconfirm.php")
重定向。有关更多信息,请参阅标题中的此文档。