Я изучаю кодирование и создал простую форму, где сообщения об ошибках
отображается чуть ниже каждого поля ввода. Тем не менее, когда я проверяю форму
сообщение об успехе появляется одновременно с сообщениями об ошибках
отображения, когда все поля введены правильно и сформировать
подтверждено. Не могли бы вы помочь. Спасибо заранее. Вот мой
код.
</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 на самом деле, а затем, что он не пустой && operator — оператор короткого замыкания, поэтому, если какое-либо условие не выполнено, проверка не будет выполнена.
Точно так же в ваших сравнениях говорится, что if (! $ _ POST [’email’]) {недопустимо, потому что вы фактически спрашиваете, «является ли часть почтового массива post неверной», где вы должны спрашивать, «если это не пустой и является действующим адресом электронной почты
Вы должны знать о разнице между операторами = == и ===. Вы можете найти больше информации здесь: 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
}
Вы можете использовать регулярные выражения для проверки ‘name’, смотрите preg_match в руководстве http://php.net/manual/en/function.preg-match.php
Помимо всего этого, если вы хотите отслеживать в реальном времени поля, сообщения об ошибках и т. Д., Вам нужно будет рассмотреть возможность включения Javascript и использования AJAX для связи с вашим сценарием, а затем проанализировать ответ обратно в соответствующий раздел. ,
Взгляните на 30-секундный учебник по AJAX Rasmus, который даст вам отправную точку для этого http://rajshekhar.net/blog/archives/85-Rasmus-30-second-AJAX-Tutorial.html
Однако рекомендуется проводить валидацию как на стороне клиента, так и на стороне сервера, надеясь, что это поможет, даже если это не полный ответ.
Других решений пока нет …