簡體   English   中英

PHP中的表單驗證-同時顯示錯誤和成功消息

[英]Form validation in php - the error and success message display at the same time

我正在學習編碼,並創建了一個簡單的表單,其中錯誤消息顯示在每個輸入字段的正下方。 但是,當我檢查表單時,成功消息與錯誤消息同時出現,而不是在正確輸入所有字段並驗證表單之后顯示。 你能幫忙嗎? 提前謝謝你。 這是我的代碼。

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

你那里有一些問題...

因此,第一件事就是您如何進行檢查。

if(!$_POST) {

這不是檢查帖子已發布的有效方法,您需要執行以下操作

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

會更合適,因為您正在檢查POST數組是否實際設置,然后檢查它是否為空,並且&&運算符是短路運算符,因此如果不滿足任何一個條件,則檢查將失敗。

類似地,在您的比較中說if(!$ _ POST ['email']){無效,因為您實際上是在詢問“帖子數組的電子郵件部分是否不正確”,而您需要在哪里詢問“是否不是空白,是有效的電子郵件地址”

您需要注意= ==和===運算符之間的區別。 您可以在此處找到更多信息: 3個相等

還有此處的filter_var函數: http : //php.net/manual/zh/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/zh/function.preg-match.php中的 preg_match

除此之外,如果您想實時監視字段和錯誤消息等,您將不得不考慮合並Javascript並使用AJAX與腳本進行通信,然后將響應解析回相應的div 。

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

但是,最好是同時進行客戶端和服務器端驗證,希望這對您有所幫助,即使這並不是一個完整的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM