@Script_Kiddy

Не скрывать форму обратной связи при ошибке?

Есть простой код заказа обратного звонка
<div class="messages"></div>
	<div class="form1"><input type="phone" id="user_phone" value="" placeholder="Ваш телефон:" />
	<input type="button" value="Отправить" id="btn_submit" /></div>


<script>
		$(document).ready(function(){
			$('#btn_submit').click(function(){
				// собираем данные с формы
				var user_phone 	 = $('#user_phone').val();
				// отправляем данные
				$.ajax({
					url: "action.php", // куда отправляем
					type: "post", // метод передачи
					dataType: "json", // тип передачи данных
					data: { // что отправляем
						"user_phone": 	user_phone
					},
					// после получения ответа сервера
					success: function(data){
						 // выводим ответ сервера
						$('.messages').html(data.result);
						$('.form1').hide();	
					}
				});
			});
		});
	</script>
<script type="text/javascript">
   jQuery(function($){
   $("#user_phone").mask("+7 (999) 999-99-99");
   });
</script>

и соответственно обработчик
<?php
	$msg_box = ""; // в этой переменной будем хранить сообщения формы
	$errors = array(); // контейнер для ошибок
	// проверяем корректность полей
	if($_POST['user_phone'] == "") 	 $errors[] = "Поле 'Ваше имя' не заполнено!";

	// если форма без ошибок
	if(empty($errors)){		
		// собираем данные из формы
		$message  = "Телефон: " . $_POST['user_phone'] . "<br/>";	
		send_mail($message); // отправим письмо
		// выведем сообщение об успехе
		$msg_box = "<span style='color: green;'>Сообщение успешно отправлено!</span>";
	}else{
		// если были ошибки, то выводим их
		$msg_box = "";
		foreach($errors as $one_error){
			$msg_box .= "<span style='color: red;'>$one_error</span><br/>";
		}
	}

	// делаем ответ на клиентскую часть в формате JSON
	echo json_encode(array(
		'result' => $msg_box
	));
	
	
	// функция отправки письма
	function send_mail($message){
		// почта, на которую придет письмо
		$mail_to = "1@mail.ru"; 
		// тема письма
		$subject = "Заказан обратный звонок с ";
		
		// заголовок письма
		$headers= "MIME-Version: 1.0\r\n";
		$headers .= "Content-type: text/html; charset=utf-8\r\n"; // кодировка письма
		$headers .= "From: Обратный звонок <info@>\r\n"; // от кого письмо
		
		// отправляем письмо 
		mail($mail_to, $subject, $message, $headers);
	}

Код работает, на почту отсылается все успешно. Стоит маска телефона jquery.maskedinput.min.js
При успешном выполнении претензий нет, форма скрывается, сообщение об успешной отправке показывается, письмо уходит на почту. Но если не дописать, например, номер телефона и нажать отправить, то форма скрывается и выскакивает сообщение об ошибке. Вот нужно, чтобы при ошибке форма не скрывалась, только после успешной отправки.

Спасибо.
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 1
@magarif
Программист
0) Вам нужно отловить в js, что поле заполнено не верно. Посмотрите доку mask, там все есть.
1) с сервера возвращайте не только сообщение, но и флаг успех/провал. Или даже код:
0 - успех
1 - телефон не заполнен
2 - ещё какая-то ошибка
3 - и т.д.

А на клиенте смотрите код ответа и решайте:
- скрывать форму и показывать сообщение
- вывести ошибку на форму/ подсветить ошиблчные поля и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы