[英]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.