Пустая заявка с формы сайта
Очень нужна помощь - заявка с формы сайта приходит пустая. Далее детально.
Есть у меня форма заявки
<form id="promo-form" action="#">
<div class="form-group">
<input name="name" placeholder="Ваше имя" type="text" class="form-control">
</div>
<div class="form-group">
<input name="phone" placeholder="Ваш телефон" type="tel" class="form-control">
</div>
<button class="btn btn-block btn-info button_submit" id="btn_promo">Заказать сейчас</button>
</form>
Эти данные обрабатываются скриптом:
$('#promo-form').validate({
rules: {
name: "required",
phone: "required"
},
messages: {
name: "Пожалуйста, введите свое имя",
phone: "Пожалуйста, введите свой номер телефона",
},
submitHandler: function(form) {
$.post({
url: "mailer/smart.php",
contentType: 'application/json',
data: $(form).serialize(),
}).done(function() {
$(this).find("input").val("");
// $('#order-form').fadeOut();
$('.overlay, #thanks').fadeIn('slow');
$('form').trigger('reset');
});
return false;
}
});
Затем отправляются на почту:
<?php
$name = $_POST['name'];
$phone = $_POST['phone'];
require_once('phpmailer/PHPMailerAutoload.php');
$mail = new PHPMailer;
$mail->CharSet = 'utf-8';
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.mail.ru'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = '[email protected]'; // Наш логин
$mail->Password = '*****'; // Наш пароль от ящика
$mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465; // TCP port to connect to
$mail->setFrom('[email protected]', 'ДанныйСайт'); // От кого письмо (повторить логин ящика)
$mail->addAddress('МояПочта@mail.ru'); // Add a recipient
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Заявка с сайта';
$mail->Body = '
Пользователь оставил данные <br>
Имя: ' . $name . ' <br>
Номер телефона: ' . $phone . '';
if(!$mail->send()) {
return false;
} else {
return true;
}
?>
Письмо приходит на почту, но все данные отсутствуют. Код PHP был скопирован с просторов интернета, встречается довольно часто и все его хвалят. Почему не работает у меня( Где я допустила ошибку?
Ответы (1 шт):
Уберите параметр contentType из скрипта и все заработает
$('#promo-form').validate({
rules: {
name: "required",
phone: "required"
},
messages: {
name: "Пожалуйста, введите свое имя",
phone: "Пожалуйста, введите свой номер телефона",
},
submitHandler: function(form) {
$.post({
url: "mailer/smart.php",
data: $(form).serialize(),
}).done(function() {
$(this).find("input").val("");
// $('#order-form').fadeOut();
$('.overlay, #thanks').fadeIn('slow');
$('form').trigger('reset');
});
return false;
}
});
ContentType
При отправке данных на сервер используйте этот тип содержимого. По умолчанию используется "application/x-www-form-urlencoded; charset = UTF-8", что отлично подходит для большинства случаев. Если вы явно передаете контент-тип в $.ajax(), он всегда будет отправляться на сервер (даже если данные не отправляются). Если кодировка не указана, данные будут переданы на сервер с использованием кодировки сервера по умолчанию; вы должны соответствующим образом декодировать его на стороне сервера.