Пустая заявка с формы сайта

Очень нужна помощь - заявка с формы сайта приходит пустая. Далее детально.

Есть у меня форма заявки

<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 шт):

Автор решения: frozencoast

Уберите параметр 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(), он всегда будет отправляться на сервер (даже если данные не отправляются). Если кодировка не указана, данные будут переданы на сервер с использованием кодировки сервера по умолчанию; вы должны соответствующим образом декодировать его на стороне сервера.

→ Ссылка