Пустая форма отправляется

Rik
463
0
Добрый день! Очень прошу о помощи, наткнулся на ваш сайт. Я начинающий, сделал форму по скрипту, который нашел с использованием JQuery Validation. Все работает, данные отправляются на почту, валидация тоже вроде есть, но: если оставить все поля пустыми, то форма все равно отправится (появится модальное окошко #thanks) и в форме только тогда появятся подсказки.
Я уже измучился, весь интернет перерыл, а JS пока не очень знаю, может есть какой-то способ сделать так, чтобы форма не отправлялась, пока все поля пустые? Вроде у каждого прописан required, есть preventDefault и return false, почему же так происходит?

Здесь часть кода из скриптового файла:
function validateForms(form) {
		$(form).validate({
			rules: {
				name: {
					required: true,
					minlength: 2
				},
				phone: "required",
				email: {
					required: true,
					email: true
				}
			},
			messages: {
				name: {
					required: "Пожалуйста, введите свое имя",
					minlength: jQuery.validator.format("Введите {0} символа!")
				},
				phone: "Пожалуйста, введите свой телефон",
				email: {
					required: "Пожалуйста, введите свою почту",
					email: "Неправильно введен адрес почты"
				}
			}
		});
	};

	validateForms('#consultation-form');
	validateForms('#consultation form');
	validateForms('#order form');

	$('input[name=phone]').mask("+7 (999) 999-99-99");

	$('form').submit(function(e) {
		e.preventDefault();
		$.ajax({
			type: "POST",
			url: "mailer/smart.php",
			data: $(this).serialize()
		}).done(function() {
			$(this).find("input").val("");
			$('#consultation, #order').fadeOut();
			$('.overlay, #thanks').fadeIn('slow');
			$('form').trigger('reset');
		});
		return false;
	});
Здесь файл PHP:
<?php 

$name = $_POST['name'];
$phone = $_POST['phone'];
$email = $_POST['email'];

require_once('phpmailer/PHPMailerAutoload.php');
$mail = new PHPMailer;
$mail->CharSet = 'utf-8';



$mail->isSMTP();                                      
$mail->Host = 'smtp.yandex.ru';  
$mail->SMTPAuth = true;                              
$mail->Username = 'логин';                 
$mail->Password = 'пароль';                           
$mail->SMTPSecure = 'ssl';                          
$mail->Port = 465;                                    
 
$mail->setFrom('почта отправителя', '');  
$mail->addAddress('почта получателя');     
$mail->isHTML(true);                                  

$mail->Subject = 'Данные';
$mail->Body    = '
		Пользователь оставил данные 
 
	Имя: ' . $name . ' 
	Номер телефона: ' . $phone . '
	E-mail: ' . $email . '';

if(!$mail->send()) {
    return false;
} else {
    return true;
}

?>

Комментарии ()

  1. Александр Мальцев
    08 апреля 2020, 06:32
    Добрый день!
    Чтобы у вас всё работало корректно необходимо:
    1. Добавить к каждой форме атрибут action, т.к. разные формы в принципе на сервере могут обрабатываться разными php-файлами:
    <form id="#consultation-form" method="post" action="mailer/smart.php">...</form>
    ...
    <form method="post" action="mailer/smart.php">...</form>
    
    2. Изменить весь представленный вами JavaScript код на следующий:
    $("form").each(function () {
      $(this).validate({
        rules: {
          name: {
            required: true,
            minlength: 2
          },
          phone: "required",
          email: {
            required: true,
            email: true
          }
        },
        messages: {
          name: {
            required: "Пожалуйста, введите свое имя",
            minlength: jQuery.validator.format("Введите {0} символа!")
          },
          phone: "Пожалуйста, введите свой телефон",
          email: {
            required: "Пожалуйста, введите свою почту",
            email: "Неправильно введен адрес почты"
          }
        },
        submitHandler: function (form) {
          $.ajax({
            type: "POST",
            url: $(form).attr('action'),
            data: $(form).serialize()
          }).done(function () {
            $(form).find("input").val("");
            $('#consultation, #order').fadeOut();
            $('.overlay, #thanks').fadeIn('slow');
            $(form).trigger('reset');
          });
          return false;
        }
      });
    });
    
    1. Rik
      11 апреля 2020, 12:44
      Александр, спасибо огромное, вы меня просто спасли!
      Действительно, переделал, все формы идеально работают.
      Спасибо за ваш труд!
    Войдите, пожайлуста, в аккаунт, чтобы оставить комментарий.