Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prosty formularz
Forum PHP.pl > Forum > XML, AJAX
Moodey
Witam!

Napisałem prosty skrypt formularza i chciałbym go wzbogacić efektami po stronie klienta. Po wykonaniu tego kodu funkcja "success: function(data)" nie działa... tzn plik php wykonuje się osobno i wynik zwraca na nowej czystej stronie, a mail dociera w formie takiej w jakiej dotrzeć powinien. Wyświetlenie diva wiadomości o poprawnym wysłaniu po prostu nie działa, a strona jak za starych dobrych lat chce wyświetlać w nowym oknie wiadomość o wysłaniu.

Sprawdzałem przeróżne formy zakończenia formularza ale nie mam pojęcia co dalej moge zrobić...

Pomocy! wink.gif))

  1. <?php
  2.  
  3.  
  4. $Name = $_POST['name'];
  5. $SenderEmail = $_POST['email'];
  6. $SenderPhone = $_POST['phone'];
  7. $MailContent = $_POST['message'];
  8. $TargetEmail = "mail@mail.pl";
  9.  
  10.  
  11. $headers = "MIME-Version: 1.0" . "\r\n";
  12. $headers = 'Content-type: text/html; charset=utf-8' . "\r\n";
  13. $Od = "=?UTF-8?Q?".$Name."?=";
  14. $headers .= "From: " . $Od . " <" . $SenderEmail . ">\r\n";
  15.  
  16. $MailMessage = '
  17. <!doctype html>
  18. <html>
  19. <head>
  20. <meta charset="utf-8">
  21. <title>Wiadomość z formularza na stronie storkart.pl</title>
  22. <style type="text/css">
  23. p {
  24. font-family: Arial, Helvetica, sans-serif;
  25. font-size: 12px;
  26. }
  27.  
  28. </style>
  29. </head>
  30. <body>
  31. <p><img src="" alt="" /></p><br /><br />
  32. <hr><br /><br />
  33. <p>'. $MailContent .'</p><br /><br />
  34. <p><b>Wiadomość od:</b> '.$Name.'<br />
  35. <b>Adres zwrotny:</b> '.$SenderEmail.'<br />
  36. <b>Telefon zwrotny:</b> '.$SenderPhone.'</p>
  37.  
  38.  
  39. </body>
  40. </html>';
  41.  
  42. // wysyłamy wiadomość e-mail
  43.  
  44. if( @mail( $TargetEmail, "Wiadomość z formularza na stronie mail.pl", $MailMessage, $headers ) ) {
  45. $content = 1;
  46. }
  47. else
  48. {
  49. $content = 0;
  50. }
  51.  
  52. // i tutaj w klauzuli success w funkcji $.ajax() powinno pójść info o poprawnym wykonaniu kodu...
  53.  
  54. echo $content;
  55. ?>


skrypt front-end

  1.  
  2. //form
  3.  
  4. var inputs = new Array();
  5.  
  6. inputs["name"] = "imię, nazwisko";
  7. inputs["email"] = "e-mail";
  8. inputs["phone"] = "numer telefonu";
  9. inputs["message"] = "treść wiadomości";
  10.  
  11. $("#name,#email,#phone,#message").focus(function()
  12. {
  13. if(
  14. $(this).val()==inputs[$(this).attr("id")])
  15. $(this).val("");
  16. }).blur(function()
  17. {
  18. if($(this).val()=="")
  19. $(this).val(inputs[$(this).attr("id")]);
  20. });
  21.  
  22. $("#submit").click(function()
  23. {
  24. name = $("#name").val();
  25. email = $("#email").val();
  26. phone = $("#phone").val();
  27. message = $("#message").val();
  28. var mail_match =/^[^@]+@[^@]+.[a-z]{2,}$/;
  29.  
  30. if((email.search(mail_match) == -1))
  31. {
  32. alert("Proszę podać poprawny adres e-mail");
  33. return false;
  34. }
  35. else
  36. {
  37. $(".ajax_loader").slideDown();
  38. $.ajax({
  39. url: "/send.php",
  40. type: "POST",
  41. dataType:"json",
  42. data:
  43. {
  44. name: name,
  45. email: email,
  46. phone: phone,
  47. message: message
  48. },
  49. success: function(data)
  50. {
  51. if(data == 1)
  52. {
  53. alert('poszło!');
  54. // $(".contact_ajax_result").slideDown();
  55. }
  56. else
  57. {
  58. alert("Wstąpił błąd podczas wysyłania wiadomośc. Proszę spróbować ponownie.");
  59. }
  60. }
  61.  
  62. });
  63. $(".ajax_loader").slideUp();
  64. }
  65. });
  66.  
  67.  
  68. //end form
  69.  


no i formularzyk pomijając css'y:

  1. <form action="send.php" method="post" class="foot-form">
  2.  
  3. <div>
  4. <input name="name" id="name" type="text" value="imię, nazwisko" />
  5. </div>
  6. <div>
  7. <input name="email" id="email" type="text" value="e-mail" />
  8. </div>
  9. <div>
  10. <input name="phone" id="phone" type="text" value="numer telefonu" />
  11. </div>
  12. <div>
  13. <textarea name="message" id="message" cols="5" rows="5" >treść wiadomości</textarea>
  14. </div>
  15. <div>
  16. <input type="image" name="submit" id="submit" src="images/wyslijbtn.png" alt="Wyślij" />
  17. </div>
  18. </form>





SmokAnalog
Hej! Podstawowy błąd jaki tutaj masz to związanie wysyłania formularza z click() na przycisku submit. To zdarzenie działa, ale mimo to formularz się przeładuje. To, co Cię interesuje to zdarzenie submit() wywoływane NA FORMULARZU. Rzuć okiem na submit() - http://api.jquery.com/submit/

Pamiętaj, by zakończyć działanie funkcji wewnątrz submit() instrukcją:
[JAVASCRIPT] pobierz, plaintext
  1. return false;
[JAVASCRIPT] pobierz, plaintext

W przeciwnym wypadku działanie będzie podobne jak w Twoim skrypcie, tzn. funkcja się wykona, ale po tym formularz się przeładuje.

Pochwalam fakt, że robisz dwie warstwy na formularzu - JS dla gładszego User Experience oraz PHP jako zabezpieczenie / metodę dla użytkowników z wyłączonym JS.
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.