为什么此验证代码无法按预期工作?

时间:2015-04-04 17:26:57

标签: php arrays forms validation

我有一个表格,而m的动作是同一页面。 我想:

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

    <?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
            }
    ?>
    

    我限制了验证并仅在本问题的第一部分中显示。

    当我提交此表单时如果没有任何错误,我收到消息谢谢,我们已收到您的反馈 这很好,并按预期工作。

    当存在错误/字段访客姓名为空时,我在表单提交过程中收到消息错误! 请检查以下有错误的字段。错误提示为红色。 那也没关系。

    但是当我收到上述消息时,我的表单就消失了。为什么? 另外,我希望在该字段旁边显示请输入您的姓名!

4 个答案:

答案 0 :(得分:4)

尝试下面的代码。我已经删除了else part并设置了带有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

?>

答案 1 :(得分:1)

只需删除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>

答案 2 :(得分:1)

原因在于:

<?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

        }
    }

?>

答案 3 :(得分:1)

其他答案很好,但只是为了澄清会发生什么。

  

但是当我得到上述信息时,我的表格就消失了。为什么呢?

您的表单会消失,因为如果您通过第一个,如果,则无法访问其他

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

这意味着如果你想看到你的表单,你必须将它放在某个地方,它可以显示为elseif(有更多限制),或者ifs inner或outer。

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

另外我想要表明请输入你的名字!在田野旁边。

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

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

请注意empty(); function