FORM HELP - Получение PHP-скрипта для отправки данных по электронной почте через ajax

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

У меня есть контактная форма, которая использует немного AJAX для POST в мой файл PHP. У меня проблема в том, что когда я пытаюсь заставить PHP отправить эти данные по электронной почте, он не читает значения POST. PHP работал, когда я тестировал его без метода публикации JS/AJAX, но чтобы остановить обновление страницы, я выбрал вариант AJAX. Теперь, когда я добавил ajax, результат электронной почты не отображается с данными (я могу проверить и увидеть, что данные формы заполнены, просто неясно, почему они не заполняются в электронном письме) :

Name:   
Email:   
Message:

Любое руководство относительно того, почему мой почтовый сервер получает только текст, но не POST

Открытие и закрытие HTML в форме:

<form data-parsley-validate action="./assets/contactform.php" method="POST">
        <div class="formRow">
                    <label for="name" class="obscure">Name</label>
                    <input type="text" name="nameInput" id="name" placeholder="Name" required data-parsley-error-message="Please enter your name"></input>
                </div>
                <div class="formRow">
                    <label for="email" class="obscure">Email</label>
                    <input name="emailInput" id="email" type="email" placeholder="Email" required data-parsley-error-message="Please enter a valid email address"></input>
                </div>
                <div class="formRow">
                    <label for="message" class="obscure">Message</label>
                    <textarea name="messageInput" id="message">Message</textarea>
                </div>
<input type="submit" name="submit"></input>

Скрипт PHP:

<?php
    $to      = '[email protected]';
    $subject = 'Post from your website';
    $message = "Name: " . $_POST['nameInput'] . "\n Email: " . $_POST['emailInput'] . "\n Message: " . $_POST['messageInput'];
    $headers = 'From: [email protected]' . "\r\n" .
    'Reply-To: ' . $_POST['emailInput'] . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
    mail($to, $subject, $message, $headers);
    exit;
?>

Java для формы:

$(функция() {

$.ajax({
        type: 'POST',
        url: './assets/contactform.php',
        data:  { name : $('input[name=nameInput]').val(), 
                 email : $('input[name=emailInput]').val(),
                message : $('textarea[name=messageInput]').val() 
               },
        dataType: 'json'
})
event.preventDefault();

});

});

— Обновление от 07.08.2014—

Ниже приведен код jquery, который решил мою проблему.

// get the data from the form 
$('form').submit(function(event){
    var fdata = $(this).serializeArray();
    fdata.push({ name: 'submit', value: true });
    $.post('./assets/contactform.php', fdata, function (data) { 
        alert('Data Loaded:' + data); });
        console.log(fdata);
        event.preventDefault(); 
    });
});

person user3812602    schedule 07.07.2014    source источник
comment
Ваша проблема в вашем js-коде, особенно в переменной data. Взгляните на эту форму Ajax, которая не работает (jQuery - PHP).   -  person Athafoud    schedule 07.07.2014
comment
@Athafoud - Спасибо! Эта ссылка была суперпомощью. Я не смог найти его при поиске, так как я явно задавал неправильные вопросы. Благодарю вас!   -  person user3812602    schedule 08.07.2014
comment
@machineaddict - Непонятно, что вы имеете в виду под соответствием ключей? Я никогда раньше не использовал PHP... но приведенный выше скрипт отлично работал, как только я обновил свой JS. Для дальнейшего использования, какая часть синтаксиса была неправильной?   -  person user3812602    schedule 08.07.2014
comment
@ user3812602: в ajax имя, которое вы отправляете, называется name, в php вы используете $_POST['nameInput'], где должно быть $_POST['name']. Понятно? А Java for the form на самом деле javascript, это два разных языка программирования.   -  person machineaddict    schedule 08.07.2014


Ответы (1)


Я думаю, вы можете использовать jquery, который такой же, как ajax.

Вот HTML-код

<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(document).ready(function(){

  $('#submit').click(function(){

    $.post("sendemail.php", $("#contactform").serialize(), function(response) 
    {
       $('#message').html(response);
    });

  return false;
  });
});
</script>
</head>
<body>
<p> 
<form action="" method="post" id="contactform" >
<label for="name">Name:</label><br />
<input type="text" name="name" id="name" /><br />
<label for="email">Email:</label><br />
<input type="text" name="email" id="email" /><br />
<label for="emailcontent">Email Content:</label><br />
<textarea name="emailcontent" id="emailcontent"></textarea><br />
<input type="button" value="Send Email" id="submit" /><div id="message"> </div>
</form>
</p>
</body>
</html>

Вот код PHP, сохраните его с именем файла «sendemail.php».

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

$to = '[email protected]';
$subject = 'the subject';
$emailcontent = 'FROM: '.$name.' Email: '.$email.'Content: '.$emailcontent;
$headers = 'From: [email protected]' . "\r\n";

mail($to, $subject, $message, $headers);
echo "Your email was sent!";
person keeplearningtocode    schedule 07.07.2014
comment
Благодарю вас! Проблема заключалась в моей Java, которая сейчас исправлена. С PHP лучше сначала помещать информацию в переменные? В моей версии я просто помещаю контент прямо в $emailcontent. Но я видел, как это объявлено, как в вашем примере, просто интересно, в чем преимущества этого? - person user3812602; 08.07.2014
comment
Кому интересно, вот нужная мне разметка: // получить данные из формы $('form').submit(function(event) { var fdata = $(this).serializeArray(); fdata.push({ name : 'отправить', значение: true }); $.post('./assets/contactform.php', fdata, function (data) { alert('Данные загружены:' + данные); }); console.log( fdata); event.preventDefault(); }); - person user3812602; 08.07.2014
comment
Я не уверен, что в этом есть какое-то преимущество. Тем не менее, я думаю, что это может помочь сделать код легко читаемым, если я захочу добавить больше функций для обработки контента, т. е. проверки переменных с помощью функции PHP htmlspecialchars(), такой как эта $emailcontent = htmlspecialchars($_POST['emailcontent'] ); - person keeplearningtocode; 12.07.2014