Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX] Problem z przesyłaniem zmiennych post do php
Forum PHP.pl > Forum > XML, AJAX
Volume
Nie wiem kompletnie dlaczego mail dochodzi, ale bez danych zawartych w zmiennych post. To jest moja pierwsza styczność z AJAX'em i za bardzo nie wiem gdzie jest błąd w poniższym skrypcie, który psiałem na podstawie jakiegos tutorialu z sieci.

plik html z formularzem + js
  1.  
  2. <form id="formail" action="" method="post">
  3. <?php echo $blad_wysylania; ?>
  4. <div id="wynik_wysylania"></div>
  5. <div><label for="e_nazwa">Podpis: </label><input id="e_nazwa" type="text" name="e_nazwa" /></div>
  6. <div><label for="e_mail">Twój e-mail: </label><input id="e_mail" type="text" name="e_mail" /></div>
  7. <div><label for="e_temat">Temat: </label><input id="e_temat" type="text" name="e_temat" /></div>
  8. <div><label for="e_tresc">Treść: </label><textarea id="e_tresc" name="e_tresc" rows="10" cols="30"></textarea></div>
  9. <div><input type="submit" id="e_wyslij" name="e_wyslij" value="Wyślij e-mail" /></div>
  10. </form>
  11. <script type="text/javascript">
  12.  
  13.  
  14. $("#e_wyslij").click(function(){
  15. var valid = '';
  16. var name = $("#e_nazwa").val();
  17. var mail = $("#e_mail").val();
  18. var subject = $("#e_temat").val();
  19. var text = $("#e_tresc").val();
  20. if (name.length<1) {
  21. valid += '<br />Błędny podpis.';
  22. }
  23. if (!mail.match(/^([a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,4}$)/i)) {
  24. valid += '<br />Błędny Email.';
  25. }
  26. if (subject.length<1) {
  27. valid += '<br />Błędny tytuł.';
  28. }
  29. if (text.length<1) {
  30. valid += '<br />Błędna treść.';
  31. }
  32. if (valid!='') {
  33. $("#wynik_wysylania").fadeIn("slow");
  34. $("#wynik_wysylania").html("Error:"+valid);
  35. }
  36. else {
  37. var datastr ='name=' + name + '&mail=' + mail + '&subject=' + subject + '&text=' + text;
  38. $("#wynik_wysylania").css("display", "inline-block");
  39. $("#wynik_wysylania").html("Wysyłanie wiadomości .... ");
  40. $("#wynik_wysylania").fadeIn("slow");
  41. //setTimeout("send('"+datastr+"')",2000);
  42. setTimeout("send('" + datastr + "')",1000);
  43. }
  44. return false;
  45. });
  46.  
  47. function send(datastr){
  48. $.ajax({
  49. type: "POST",
  50. url: "http://nazwa_strony.pl/mail.php",
  51. data: datastr,
  52. cache: false,
  53. success: function(html){
  54. $("#wynik_wysylania").fadeIn("slow");
  55. $("#wynik_wysylania").html("Wysłane!");
  56. //setTimeout('$("#wynik_wysylania").fadeOut("slow")',2000);
  57. setTimeout('$("#wynik_wysylania").fadeOut("slow")',1000);
  58. }
  59. });
  60. }
  61.  

plik: mail.php
  1. <?php
  2. $mail = $_POST['e_mail'];
  3. $name = $_POST['e_nazwa'];
  4. $subject = $_POST['e_temat'];
  5. $text = $_POST['e_tresc'];
  6.  
  7. $to = "mojmail@tlen.pl";
  8. $message ="You received a mail from ".$mail;
  9. $message .="Text of the message : ".$text;
  10.  
  11. if(mail($to, $subject,$message)){
  12. echo "mail successful send";
  13. }
  14. else{
  15. echo "theres some errors to send the mail, verify your server options";
  16. }
  17. ?>
mortus
Najpierw proponuję sprawdzić, czy AJAX wysyła dane. W tym celu zakomentuj cały kod w pliku mail.php i na początku daj:
  1. echo '<pre>';
  2. var_dump($_POST);

[JAVASCRIPT] pobierz, plaintext
  1. // zastąp na chwilę linię 55
  2. $("#wynik_wysylania").html("Wysłane!");
  3. // tym
  4. $("#wynik_wysylania").html(html);
[JAVASCRIPT] pobierz, plaintext

I zobacz, co się dzieje. Korzystaj przy tym z narządzi developerskich np. Firebug dla Firefox-a, zakładka konsola.

PS: U mnie Twój skrypt wysłał dane, więc działa. Możesz ewentualnie spróbować:
1. pozamieniać & na & amp; (spacja została zrobiona celowo, ale normalnie nie powinno jej być) w zmiennej datastr,
2. przekazać dane jako obiekt (metoda $.ajax() przekształci ten obiekt w odpowiedni łańcuch znaków):
[JAVASCRIPT] pobierz, plaintext
  1. var data = { 'name': name, 'mail': mail, 'subject': subject, 'text': text }
[JAVASCRIPT] pobierz, plaintext
Volume
A moze to byc wina wordpressa? Generalnie próbuję ten formularz podpiac pod wordpressa.
mortus
Nie sądzę, aby była to wina WordPress-a, ale proponuję, abyś sobie zainstalował Firebug-a w FF i podejrzał rządania i odpowiedzi. Zakładka Sieć (oczywiście musi być włączona) i Wszystko (lub XHR dla AJAX-a). Dowiesz się, co jest wysyłane i jaka jest odpowiedź, a to pozwoli ustalić przyczynę problemu.

PS: Oczywiście wrzuć do pliku mail.php kod, który podałem wyżej.
Volume
W Post dostaje:
Kod
mail_x    zxczxczxcz@zxcxzc.pl
name_x    asdasdasdzxcv
subject_x    zxczxczxczcvvcx
text_x    xcv xcv xcvxc vxcv xc vxc vxcv xcv
Źródło
name_x=asdasdasdzxcv&mail_x=zxczxczxcz@zxcxzc.pl&subject_x=zxczxczxczcvvcx&text_x=xcv xcv xcvxc vxcv xc vxc vxcv xcv

odpowiedz:
Kod
<pre>array(4) {
  ["name_x"]=>
  string(13) "asdasdasdzxcv"
  ["mail_x"]=>
  string(20) "zxczxczxcz@zxcxzc.pl"
  ["subject_x"]=>
  string(15) "zxczxczxczcvvcx"
  ["text_x"]=>
  string(34) "xcv xcv xcvxc vxcv xc vxc vxcv xcv"
}
</pre>


Ps. pozmienialem name i zmienne na wszelki wypadek jakby mialo kolidowac z atrybutami z wordpressa ale nic to nie pomaga.

EDIT

sprawdzilem ten skrypt na innym serwerze - i tam tez nie dziala...


Ok problem rozwiazany byl bardzo banalny, inne zmienen mialem w AjAXie inne w pliku php wysylajacym mail
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.