我是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">
答案 0 :(得分:1)
每次通过验证阶段时,都会将$errors
重置为0
。
e.g。
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!
}
但是oops,“foo”错了,现在你说一切都还好,因为你的错误计数器被重置了。只需从验证/验证阶段中删除$errors = 0
的所有。
答案 1 :(得分:0)
请参阅Marc B的回答,指出第一个初始问题。
您在每次检查的其他位置重置$ errors = 0。您必须删除这些语句,否则如果后面的检查语句有效,则会重置$ errors变量。
此外,在检查期间不打印错误会更好,而是附加到错误数组,并在发生所有错误检查后检查错误变量。
e.g。
if($errors>0){
print_r($errorArray);
}
或
if($errors>0){
foreach($errorArray as $error){
echo $error;
}
}
此外,没有其余的代码也不清楚,但是在重定向到此页面后,上半部分似乎是验证,但这种情况永远不会发生,因为您自动将表单操作设置为{{1}首先,因为$ errors在第一页加载时没有值。我可能会在没有完整页面的情况下误解你的代码。
您应该考虑删除表单中的迂回运算符,并将操作始终为contactconfirm.php
。
然后您可以使用条件逻辑来检查是否没有错误,如果没有,则使用contact.php
重定向。有关详细信息,请参阅此documentation on header。