表单操作的三元运算符



我是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 = 0ALL即可。

请参阅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")重定向。有关更多信息,请参阅标题中的此文档。

最新更新