表格行动的三元运营商

时间:2014-10-21 21:28:45

标签: php validation

我是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">

2 个答案:

答案 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