Форма jQuery AJAX с использованием mail () PHP-скрипт отправляет электронную почту, но данные POST из HTML-формы не определены

Спасибо, что нашли время посмотреть, ребята. Я создаю симпатичную базовую форму контакта AJAX с помощью jQuery. Письмо отправляется, но после открытия электронной почты нет данных POST, поэтому я просто получаю строки, определенные в PHP-скрипте. На почтовом клиенте моего телефона содержимое письма буквально говорит «undefined». Я попытался добавить разные типы данных заголовка безрезультатно, а также ряд вариантов функции PHP mail ().

Я более чем готов принять более легкое решение для простой формы AJAX, поэтому заранее заблаговременно за любые новые подходы.

Вот форма:

<section id="left"> <label for="form_name">Name</label> <input name="form_name" id="form_name" type="text" > <label for="form_email">Email</label> <input name="form_email" id="form_email" type="email" > </section> <section id="right"> <label for="form_msg">Message</label> <textarea name="form_msg" id="form_msg"></textarea> <input id="submit" class="button" name="submit" type="submit" value="Send"> </section> </form> 

JQuery AJAX:

 $(function() { $("#contact .button").click(function() { var name = $("#form_name").val(); var email = $("#form_email").val(); var text = $("#msg_text").val(); var dataString = 'name='+ name + '&email=' + email + '&text=' + text; $.ajax({ type: "POST", url: "email.php", data: dataString, success: function(){ $('.success').fadeIn(1000); } }); return false; }); }); 

PHP-скрипт (внешний файл «email.php»):

 <?php if($_POST){ $name = $_POST['form_name']; $email = $_POST['form_email']; $message = $_POST['form_msg']; //send email mail("email@gmail.com", "This is an email from:" .$email, $message); } ?> 

Нет необходимости создавать строку запроса. Просто поместите свои значения в объект, и jQuery позаботится о вас для остальных.

 var data = { name: $("#form_name").val(), email: $("#form_email").val(), message: $("#msg_text").val() }; $.ajax({ type: "POST", url: "email.php", data: data, success: function(){ $('.success').fadeIn(1000); } }); 

Оставьте свой код email.php тем же, но замените этот код JavaScript:

  var name = $("#form_name").val(); var email = $("#form_email").val(); var text = $("#msg_text").val(); var dataString = 'name='+ name + '&email=' + email + '&text=' + text; $.ajax({ type: "POST", url: "email.php", data: dataString, success: function(){ $('.success').fadeIn(1000); } }); 

с этим:

  $.ajax({ type: "POST", url: "email.php", data: $(form).serialize(), success: function(){ $('.success').fadeIn(1000); } }); 

Чтобы имена ввода формы совпадали.

Вы используете неправильные параметры сообщений:

  var dataString = 'name='+ name + '&email=' + email + '&text=' + text; ^^^^-$_POST['name'] ^^^^--$_POST['name'] etc.... 

Идентификаторы javascript / html не имеют отношения к фактическому POST, особенно когда вы создаете свою собственную строку данных и не используете те же идентификаторы.

Вы используете неправильное имя параметра, попробуйте:

 if($_POST){ $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['text']; //send email mail("j.andrew.sears@gmail.com", "51 Deep comment from" .$email, $message); } 

Ваш PHP-скрипт (внешний файл «email.php») должен выглядеть так:

 <?php if($_POST){ $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['text']; //send email mail("j.andrew.sears@gmail.com", "51 Deep comment from" .$email, $message); } ?> 

Код должен быть:

  <section id="right"> <label for="form_msg">Message</label> <textarea name="form_msg" id="#msg_text"></textarea> <input id="submit" class="button" name="submit" type="submit" value="Send"> </section> 

Js

 var data = { name: $("#form_name").val(), email: $("#form_email").val(), message: $("#msg_text").val() }; $.ajax({ type: "POST", url: "email.php", data: data, success: function(){ $('.success').fadeIn(1000); } }); 

PHP:

 <?php if($_POST){ $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['text']; //send email mail("email@gmail.com","My Subject:",$email,$message); } ?>