web-dev-qa-db-fra.com

jQuery AJAX formulaire en utilisant mail () PHP le script envoie un courrier électronique, mais POST les données du formulaire HTML sont indéfinies

Merci d'avoir pris le temps de regarder, les gars. Je crée un formulaire de contact assez simple AJAX à l'aide de jQuery. L'e-mail est envoyé, mais à l'ouverture de l'e-mail, il n'y a pas de données POST. Je ne récupère donc que les chaînes que j'ai définies dans le script PHP. Sur le client de messagerie de mon téléphone, le contenu de l'e-mail indique littéralement "non défini". J'ai essayé d'ajouter en vain différents types de données d'en-tête, ainsi qu'un certain nombre de variantes de la fonction PHP mail (). 

Je suis tout à fait disposé à adopter une solution plus simple pour une forme simple AJAX, alors merci d'avance pour toute nouvelle approche. 

Voici le formulaire:

   <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>

Le 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;
    });
});

Le script PHP (fichier externe 'email.php'):

<?php
if($_POST){
    $name = $_POST['form_name'];
    $email = $_POST['form_email'];
    $message = $_POST['form_msg'];

//send email
    mail("[email protected]", "This is an email from:" .$email, $message);
}
?>
11
Jason Sears

Il n'est pas nécessaire de créer une chaîne de requête. Il suffit de mettre vos valeurs dans un objet et jQuery se chargera du reste pour vous.

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);
    }
});
19
Seain Malkin

Laissez votre code email.php identique, mais remplacez ce code 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);
            }
        });

avec ça:

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

Alors que vos noms d'entrée de formulaire correspondent.

6

Vous utilisez les mauvais paramètres de publication:

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

Les identifiants javascript/html ne sont pas pertinents pour le POST réel, en particulier lorsque vous créez votre propre chaîne de données et que vous n'utilisez pas ces mêmes identifiants.

4
Marc B

Vous utilisez un nom de paramètre incorrect, essayez:

if($_POST){
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['text'];

//send email
    mail("[email protected]", "51 Deep comment from" .$email, $message);
}
4
Garis M Suero

Votre code devrait être:

   <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);
    }
});

Le PHP:

<?php
if($_POST){
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['text'];

//send email
    mail("[email protected]","My Subject:",$email,$message);
}
?>
2
Hil

Votre script PHP (fichier externe 'email.php') devrait ressembler à ceci:

<?php
if($_POST){
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['text'];

//send email
    mail("[email protected]", "51 Deep comment from" .$email, $message);
}
?>
0
EmCo