2010-07-27 8 views
0

Je suis en utilisant la fonction AJAX jQuery pour envoyer un message à partir d'un formulaire de contact -PHP Mail & Ajax: Le message ne contient pas de données de formulaire

$('form button').click(function() { 

    $("input").removeClass("error"); 
    $("textarea").removeClass("error"); 

    var name = $("#name").val(); 
    if (name == "" || name == "Name" || name == "Namn") { 
     $("#name").addClass("error"); 
     $("#name").focus(); 
     return false; 
    } 

    var email = $("#email").val(); 
    if (email == "" || email == "Email" || email == "Epost") { 
     $("#email").addClass('error'); 
     $("#email").focus(); 
     return false; 
    } 

    var message = $("#message").val(); 
    if (message == "") { 
     $("#message").addClass('error'); 
     $("#message").focus(); 
     return false; 
    } 

    // Non-verifying fields 
    var phone = $("input#phone").val(); 

    // Gather data 
    var post = 'name=' + name + '&email=' + email + '&phone=' + phone + '&message=' + message; 

    // Disable form 
    var limit = document.forms[0].elements.length; 
    for (i = 0; i < limit; i++) { 
     document.forms[0].elements[i].disabled = true; 
    } 

    // Send data 
    $.ajax({ 
     type: "POST", 
     url: "form_handler.php", 
     data: post, 
     success: function() { 
      $('div.contact form').animate({ 
       opacity: 0.25 
      }, function() { 
       $('div.contact div.confirm').fadeIn(200); 
      }); 
     }, 
     error: function() { 
      $('div.contact form').animate({ 
       opacity: 0.25 
      }, function() { 
       $('div.contact div.deny').fadeIn(200); 
      }); 
     } 
    }); 
    return false; 
}); 

Je sais que ce n'est pas la méthode la plus sûre étant donné que je Révélez la Mail fichier dans mon code JS mais néanmoins je veux que cela fonctionne avant que je décide d'essayer autre chose. Dans mon formulaire de contact je les champs ci-dessus (nom, email, téléphone et messagerie) et dans « form_handler.php » les paramètres ressemblent à ceci -

<?php 
header('Content-type: text/html; charset=UTF-8'); 

$name = $_POST['name']; 
$email = $_POST['email']; 
$phone = $_POST['phone']; 
$message = $_POST['message']; 

$to = "[email protected]"; 
$subject = "Meddelande från x.se"; 
$body = "------------------------------------------------------------------------------------------------------------------------\n\n"; 
$body .= "Meddelande från $name:\n\n"; 
$body .= "$message\n\n"; 
$body .= "Avsändarens epost: $email\n"; 
$body .= "Avsändarens telefonnummer: $phone\n\n"; 
$body .= "------------------------------------------------------------------------------------------------------------------------"; 
$headers = "From: $email"; 

mail($to,$subject,$body,$headers); 
?> 

Quand je combine les scripts que je puisse générer un message bien il ne contient aucune donnée de formulaire. Ai-je manqué quelque chose?

+0

Avez-vous essayé le dumping '_POST' $ pour voir si vous obtenez même les données? – Maerlyn

+0

Je ne suis pas très qualifié avec PHP - Où dois-je le mettre? –

+0

au tout début, faites un 'var_dump ($ _ POST); die(); 'cela affichera toutes les valeurs reçues via post, puis arrêtera le script. – Maerlyn

Répondre

1

Je pense que vous voulez vraiment passer un tableau JSON comme paramètre de données au lieu de la chaîne de style GET.

Quelque chose comme:

post = { 'name' : name, ... } 
+0

Je suis confus :) –

+0

Si vous voulez dire le passage à "post var = { 'name': nom, 'email': email, 'téléphone': téléphone, 'message': message};" dans le fichier JS, cela n'a pas aidé. –

+0

Ensuite, lancez Firebug et regardez la requête AJAX. L'onglet net a un moyen très simple de voir ce qui est envoyé à votre serveur. Si les données parviennent au serveur, déterminez ce qui ne va pas avec votre PHP. – funwhilelost

Questions connexes