首页 > 解决方案 > php中的表单验证——错误和成功信息同时显示

问题描述

我正在学习编码并创建了一个简单的表单,错误消息显示在每个输入字段的下方。但是,当我检查表单时,成功消息与错误消息同时出现,而不是在正确输入所有字段并验证表单时显示。你能帮忙吗?提前谢谢你。这是我的代码。

</php>

$errorMessage = "";
$successMessage = "";
$emailError = "";
$emailconfirmError = "";
$nameError = "";
$messageError = "";
$servicesError = "";


$name = $email = $emailConfirm = $services = $message = "";

$email = isset($_POST['email']) ? $_POST['email'] : '';
$emailConfirm = isset($_POST['emailConfirm']) ? $_POST['emailConfirm'] : '';


if ($_POST) {

    if (!$_POST['email']) {

        $emailError .="The email is required";

    }

    if (!$_POST['emailConfirm']) {

        $emailconfirmError .="Please confirm your email <br>";

    }
    if ($_POST['emailConfirm'] && $email != $emailConfirm) {

       $emailconfirmError .="The email addresses do not match <br>";   
}

    if (!$_POST['name']) {

        $nameError .="The name field is required <br>";

    }

    if (!$_POST['services'])  {

       $servicesError .="Please select a service required <br>";

    }

    if (!$_POST['message']) {

        $messageError .="The message field is required <br>";

    }


    if ($_POST['email'] && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) {

       $emailError .= "The email address is invalid.<br>";

    }

    if ($name = $email = $emailConfirm = $services = $message != "") {

        echo $emailError;
        echo $emailconfirmError;
        echo $name;
        echo $services;
        echo $message;

    }else {

        $emailTo = "kamala_guliyeva@hotmail.com";

        $services = $_POST['services'];

        $message = $_POST['message'];

        $headers = "From: ".$_POST['email'];



    if (mail($emailTo, $services, $message, $headers)) {

            $successMessage = '<div class="alert alert-success" role="alert">Thank you for your message. We\'ll get back to you ASAP!</div>';


        } else {

            $errorMessage = '<div class="alert alert-danger" role="alert"><p>Your message couldn\'t be sent - please try again</div>';

        }
    }
}        

和 HTML

<div id="quote">
<div class="container">
        <h2 class="section-title">Request a Quote</h2>
        <hr align="left" width="8%" class="style-one">
        <br>
    <div><? echo $errorMessage.$successMessage; ?></div>
      <form id="quoteForm" method="post">
        <div class="row">
            <div class="col-md-6">
                <div class="form-group">
                    <input type="email" class="form-control" style="height:60px" id="email" name="email" placeholder="Your email">
                    <label class="error" id="emailError"><?php echo $emailError; ?></label>
                </div>

                <div class="form-group">
                    <input type="email" class="form-control" style="height:60px" id="emailConfirm" name="emailConfirm" placeholder="Re-type your email">
                    <label class="error" for="e-mailConfirm" id="emailconfirmError"><?php echo $emailconfirmError; ?></label>
                </div>

                 <div class="form-group">
                    <input type="name" class="form-control" id="name" style="height:60px" name="name" placeholder="Your Name">
                    <label class="error" for="name" id="nameError"><?php echo $nameError; ?></label>
                </div> 

                </div>   

            <div class="col-md-6">
                <div class="form-group">
                    <select class="form-control" id="services" name="services" style="height:60px">
                      <option value="">Select Services</option>
                      <option value="Installation">Installation</option>
                      <option value="Repair">Repair</option>
                      <option value="Service and Maintenance">Service and Maintenance</option>
                    </select>
                    <label class="error" for="services" id="servicesError"><?php echo $servicesError; ?></label>
                  </div>
              <div class="form-group">
                <textarea class="form-control" id="message" name="message" placeholder="Message" style="height: 163px;" cols="35"></textarea>
                <label class="error" for="message" id="messageError"><?php echo $messageError; ?></label>
              </div>  
             </div> 
             </div>

            <div class="form-row text-center">
                <div class="col-12">
                    <button type="submit" style="width:10rem" class="btn quoteButton pt-3 pb-3 text-align-center">Get a Quote</button>
                </div>
            </div>

    </form>

</div>
</div>

标签: php

解决方案


你有几个问题...

所以首先是你如何做你的检查。

if(!$_POST) {

不是检查帖子是否发生的有效方法,您需要执行类似的操作

if(isset($_POST) && !empty($_POST)) {

会更合适,因为您正在检查 POST 数组是否实际设置,然后它不为空 && 运算符是短路运算符,因此如果不满足任一条件,则检查将失败。

同样,在您的比较中说 if(!$_POST['email']) { 无效,因为您实际上是在询问“帖子数组的电子邮件部分是否不正确”,而您需要询问“是否是不是空白,并且是有效的电子邮件地址”

您需要注意 = == 和 === 运算符之间的区别。您可以在此处找到更多信息:3 个不同的等于

还有这里的 filter_var 函数:http: //php.net/manual/en/function.filter-var.php

if($_POST['email']!=="" && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    //all good
} else {
   //set your error message
}

您可以使用正则表达式来验证“名称”参见手册http://php.net/manual/en/function.preg-match.php中的 preg_match

除了所有这些,如果您想实时监控字段和错误消息等,您将不得不考虑合并 Javascript 并使用 AJAX 与您的脚本进行通信,然后将响应解析回适当的 div .

看看 Rasmus 30 秒 AJAX 教程将为您提供此http://rajshekhar.net/blog/archives/85-Rasmus-30-second-AJAX-Tutorial.html的起点

但是,最好同时进行客户端和服务器端验证,希望这会有所帮助,即使它本身并不是一个完整的答案。


推荐阅读