为什么此验证代码不能按预期工作



我有一个表单,for m的操作是同一页。我正在尝试:

  1. 成功提交表单后显示感谢信息
  2. 在检测到错误的字段旁边显示错误消息
  3. 以上所有内容必须显示在同一页中

我的代码是:

<?php
    $errors = array();
    if (isset($_POST["Ask_the_Question"])) {
        $guest_name = $_POST["guest_name"];
        $title = $_POST["faq_title"];
        $description = $_POST["faq_desc"];
        $title = $_POST["faq_title"];
        /* validation */
        if (empty($guest_name)) {
            $errors['guest_name'] = "Please type your name!";
        }   
        if(!empty($errors)){ echo '<h1 style="color: #ff0000;">Errors!</h1><h6 style="color: #ff0000;">Please check the fields which have errors below. Error hints are in Red.</h6>';}
        if(empty($errors)){     
            echo 'Thanks, We have received your feed back';
        }
    }
    else {
?>
            <form action="index.php" method="post" class="booking_reference">
                <input type="text" name="guest_name" placeholder="Your Name" value="<?PHP if(!empty($errors)) { echo $guest_name;} ?>" />
                <?php if(isset($errors['guest_name'])) { echo '<span style="color: red">'.$errors['guest_name'].'</span>'; } ?>
                <input type="email" name="guest_email" placeholder="Your email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,4}$" required />
                <input type="text" name="faq_title" placeholder="FAQ Title"/>
                <input type="text" name="faq_desc" placeholder="FAQ Description"/>
                <input type="submit" name="Ask_the_Question" value="Ask the Question" />
            </form>
<?php
        }
?>

在这个问题中,我只对第一部分进行了验证和展示。

当我提交此表单时,如果没有任何错误,我将收到消息谢谢,我们已经收到您的反馈这很好,正如预期的那样。

当存在错误/字段客人姓名为空时,我在表单提交过程中收到消息错误!请检查下面有错误的字段。错误提示为红色。这也很好。

但当我收到上述消息时,我的表单就消失了。为什么?我还想表明请键入您的姓名字段旁边。

试试下面的代码。我已经删除了其他部分,并设置了true/false标志来检查是否有效。

<?php
    $errors = array();
    if (isset($_POST["Ask_the_Question"])) {
        $guest_name = $_POST["guest_name"];
        $title = $_POST["faq_title"];
        $description = $_POST["faq_desc"];
        $title = $_POST["faq_title"];
        /* validation */
        $chkValidate = "true";
        if (empty($guest_name)) {
            $errors['guest_name'] = "Please type your name!";
            $chkValidate = "false";
        }   
        if(!empty($errors)){ echo '<h1 style="color: #ff0000;">Errors!</h1><h6 style="color: #ff0000;">Please check the fields which have errors below. Error hints are in Red.</h6>';
            $chkValidate = "false";
        }
        if($chkValidate == "true"){     
            echo 'Thanks, We have received your feed back';
        }
    }
    ?>
            <form action="index.php" method="post" class="booking_reference">
                <input type="text" name="guest_name" placeholder="Your Name" value="<?php if(!empty($errors) && $chkValidate != "false") { echo $guest_name;} ?>" />
                <?php if(isset($errors['guest_name'])) { echo '<span style="color: red">'.$errors['guest_name'].'</span>'; } ?>
                <input type="email" name="guest_email" placeholder="Your email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,4}$" required  />
                <input type="text" name="faq_title" placeholder="FAQ Title"/>
                <input type="text" name="faq_desc" placeholder="FAQ Description"/>
                <input type="submit" name="Ask_the_Question" value="Ask the Question" />
            </form>
<?php
?>

只需删除else条件,因为如果$_POST["Ask_the_Question"]设置为,实际上您的表单将不会显示

<?php
    $errors = array();
    if (isset($_POST["Ask_the_Question"])) {
        $guest_name = $_POST["guest_name"];
        $title = $_POST["faq_title"];
        $description = $_POST["faq_desc"];
        $title = $_POST["faq_title"];
        /* validation */
        if (empty($guest_name)) {
            $errors['guest_name'] = "Please type your name!";
        }   
        if(!empty($errors)){ echo '<h1 style="color: #ff0000;">Errors!</h1><h6 style="color: #ff0000;">Please check the fields which have errors below. Error hints are in Red.</h6>';}
        if(empty($errors)){     
            echo 'Thanks, We have received your feed back';
        }
    }
            <form action="index.php" method="post" class="booking_reference">
                <input type="text" name="guest_name" placeholder="Your Name" value="<?PHP if(!empty($errors)) { echo $guest_name;} ?>" />
                <?php if(isset($errors['guest_name'])) { echo '<span style="color: red">'.$errors['guest_name'].'</span>'; } ?>
                <input type="email" name="guest_email" placeholder="Your email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,4}$" required />
                <input type="text" name="faq_title" placeholder="FAQ Title"/>
                <input type="text" name="faq_desc" placeholder="FAQ Description"/>
                <input type="submit" name="Ask_the_Question" value="Ask the Question" />
            </form>

原因在这里:

<?php
if (isset($_POST["Ask_the_Question"])) {
        $guest_name = $_POST["guest_name"];
        $title = $_POST["faq_title"];
        $description = $_POST["faq_desc"];
        $title = $_POST["faq_title"];
        /* validation */
        if (empty($guest_name)) {
            $errors['guest_name'] = "Please type your name!";
        }   
        if(!empty($errors)){ echo '<h1 style="color: #ff0000;">Errors!</h1><h6 style="color: #ff0000;">Please check the fields which have errors below. Error hints are in Red.</h6>';}
        if(empty($errors)){     
            echo 'Thanks, We have received your feed back';
        }
    } else {
      // your form code will never be called if $_POST['Ask_the_Question'] is set

要做你想实现的事情,你可能想做这样的事情:

<?php
    $errors = array();
    if (isset($_POST["Ask_the_Question"])) {
        $guest_name = $_POST["guest_name"];
        $title = $_POST["faq_title"];
        $description = $_POST["faq_desc"];
        $title = $_POST["faq_title"];
        /* validation */
        if (empty($guest_name)) {
            $errors['guest_name'] = "Please type your name!";
        }   
        if(!empty($errors)){ echo '<h1 style="color: #ff0000;">Errors!</h1><h6 style="color: #ff0000;">Please check the fields which have errors below. Error hints are in Red.</h6>';}
     }
     if(empty($errors)){     
          echo 'Thanks, We have received your feed back';
      } else { ?>
            <form action="index.php" method="post" class="booking_reference">
                <input type="text" name="guest_name" placeholder="Your Name" value="<?PHP if(!empty($errors)) { echo $guest_name;} ?>" />
                <?php if(isset($errors['guest_name'])) { echo '<span style="color: red">'.$errors['guest_name'].'</span>'; } ?>
                <input type="email" name="guest_email" placeholder="Your email" pattern="[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,4}$" required />
                <input type="text" name="faq_title" placeholder="FAQ Title"/>
                <input type="text" name="faq_desc" placeholder="FAQ Description"/>
                <input type="submit" name="Ask_the_Question" value="Ask the Question" />
            </form>
           <?php
        }
    }
?>

其他答案也可以,但只是为了澄清发生了什么。

但当我收到上面的信息时,我的表格就消失了。为什么?

你的表单会消失,因为如果你通过了第一个,如果,你就无法到达你的其他

if (isset($_POST["Ask_the_Question"])) {
    ...
} else {
    xxx;
}

这意味着,如果你想看到你的表格,你必须把它放在一个可以显示的地方,比如elseif(有更多的限制),或者如果是内部或外部。

if (isset($_POST["Ask_the_Question"]) && empty($errors)) {
    ...
} elseif (isset($_POST["Ask_the_Question"]) && !empty($errors)) {
    ...
} else {
    ...
}

我还想展示一下,请键入你的名字!在田野旁边。

要显示所有错误,您可以在任何您想显示它们的地方使用例如foreach。

foreach ($errors as &$error) {
    echo "Error: $error<br />n";
}

顺便说一句,注意empty();作用

最新更新