Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][PHP][AJAX][JQUERY] Blad 405 The requested method POST is not allowed for the URL /ajax/index.html., Problem z formularzem kontaktowym PHP/AJAX/JQUERY blad 405
MrSeefeld
post 21.02.2010, 23:53:09
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 21.02.2010

Ostrzeżenie: (0%)
-----


Witam!

Poniewaz nie znam sie jeszcze zbyt dobrze na jquery a o php nie wiem wlasciwie nic - formularzow kontaktowych do stron szukam w internecie.
Dzis wygrzebalem cos dosc ciekawego - idealnie nadajacego sie do projektu nad ktorym akualnie pracuje:

Link do oryginalnego tutka

Wprowadzilem kilka zmian:
1. Dodalem element textarea - na tresc wiadomosci - oraz kod jquery sprawdzajacy czy jakas wiadomosc zostala w ogole wpisana.
3. Pozmienialem troche w stylach - usunalem pozycjonowanie absolutne, zmienilem polozenie ostrzezenia o bledzie w wypelnieniu formularza.
4. Zmianilem adresy email na ktore maja przychodzic wiadomosci z formularza- zgodnie z instrukcia zawarta w readme.txt

(The process.php file in /bin does need adjustment to send an email correctly. At a minimum, you need to change the $to, $email, $fromaddress, and $mail->From to get it to work )

I wszystko by bylo pieknie gdyby to dzialalo:]

Wyskakuje blad 405 Method Not Allowed
The requested method POST is not allowed for the URL /ajax/index.html.

Sprawdzanie formularza dziala poprawnie. Jednak w momencie w ktorym formularz jest komplenty i ma zostac przekazany do scryptu wykonawczego dzieje sie cos dla mnie nie zrozumialego.

plik html mozna podejrzec tutaj:

Link do strony na serwerze

kod JS (JQuery)
Kod
$(function() {
  $('.error').hide();
  $('input.text-input').css({backgroundColor:"#FFFFFF"});
  $('input.text-input').focus(function(){
    $(this).css({backgroundColor:"#CCC"});
  });
  $('input.text-input').blur(function(){
    $(this).css({backgroundColor:"#FFFFFF"});
  });

  $(".button").click(function() {
        // validate and process form
        // first hide any error messages
    $('.error').hide();
        
      var name = $("input#name").val();
        if (name == "") {
      $("label#name_error").show();
      $("input#name").focus();
      return false;
    }
        var email = $("input#email").val();
        if (email == "") {
      $("label#email_error").show();
      $("input#email").focus();
      return false;
    }
    var phone = $("input#phone").val();
        if (phone == "") {
      $("label#phone_error").show();
      $("input#phone").focus();
      return false;
    }
    var mess = $("textarea#mess").val();
        if (mess == "") {
      $("label#mess_error").show();
      $("textarea#mess").focus();
      return false;
    }
        
        var dataString = 'name='+ name + '&email=' + email + '&phone=' + phone  +'&mess=' + mess;
        //alert (dataString);return false;
        
        $.ajax({
      type: "POST",
      url: "process.php",
      data: dataString,
      success: function() {
        $('#contact_form').html("<div id='message'></div>");
        $('#message').html("<h2>Contact Form Submitted!</h2>")
        .append("<p>We will be in touch soon.</p>")
        .hide()
        .fadeIn(1500, function() {
          $('#message').append("<img id='checkmark' src='images/check.png' />");
        });
      }
     });
    return false;
    });
});
runOnLoad(function(){
  $("input#name").select().focus();
});


PHP
  1. <?php
  2. if ((isset($_POST['name'])) && (strlen(trim($_POST['name'])) > 0)) {
  3. $name = stripslashes(strip_tags($_POST['name']));
  4. } else {$name = 'No name entered';}
  5. if ((isset($_POST['email'])) && (strlen(trim($_POST['email'])) > 0)) {
  6. $email = stripslashes(strip_tags($_POST['email']));
  7. } else {$email = 'No email entered';}
  8. if ((isset($_POST['phone'])) && (strlen(trim($_POST['phone'])) > 0)) {
  9. $phone = stripslashes(strip_tags($_POST['phone']));
  10. } else {$phone = 'No phone entered';}
  11. if ((isset($_POST['mess'])) && (strlen(trim($_POST['mess'])) > 0)) {
  12. $mess = stripslashes(strip_tags($_POST['mess']));
  13. } else {$phone = 'No message entered';}
  14. ?>
  15. <html>
  16. <head>
  17. <style type="text/css">
  18. </style>
  19. </head>
  20. <body>
  21. <table width="550" border="1" cellspacing="2" cellpadding="2">
  22. <tr bgcolor="#eeffee">
  23. <td>Name</td>
  24. <td><?=$name;?></td>
  25. </tr>
  26. <tr bgcolor="#eeeeff">
  27. <td>Email</td>
  28. <td><?=$email;?></td>
  29. </tr>
  30. <tr bgcolor="#eeffee">
  31. <td>Phone</td>
  32. <td><?=$phone;?></td>
  33. </tr>
  34. <tr bgcolor="#eeffee">
  35. <td>Message</td>
  36. <td><?=$mess;?></td>
  37. </tr>
  38. </table>
  39. </body>
  40. </html>
  41. <?
  42. $body = ob_get_contents();
  43.  
  44. $to = 'xxx@yyyy';
  45. $email = 'zzz@yyyy';
  46. $fromaddress = "aaa@bbbb";
  47. $fromname = "Online Contact";
  48.  
  49. require("phpmailer.php");
  50.  
  51. $mail = new PHPMailer();
  52.  
  53. $mail->From = "xxx@yyyy";
  54. $mail->FromName = "Contact Form";
  55. $mail->AddAddress("email_address@example.com","Name 1");
  56. $mail->AddAddress("another_address@example.com","Name 2");
  57.  
  58. $mail->WordWrap = 50;
  59. $mail->IsHTML(true);
  60.  
  61. $mail->Subject = "Demo Form: Contact form submitted";
  62. $mail->Body = $body;
  63. $mail->AltBody = "This is the text-only body";
  64.  
  65. if(!$mail->Send()) {
  66. $recipient = 'your_email@example.com';
  67. $subject = 'Contact form failed';
  68. $content = $body;
  69. mail($recipient, $subject, $content, "From: mail@yourdomain.com\r\nReply-To: $email\r\nX-Mailer: DT_formmail");
  70. }
  71. ?>


Oprocz tych 3 - formularz posiada phpmailer oraz scrypt runonload.js

Probowalem odniesc sie do oryginalu - zmieniajac tylko adres maila w miejscu podanym w instrukcji - co prawda blad nie wyskakuje - pokazuje sie informacja o wyslalej wiadomosci -ale sam mail nigdy nie dociera.

W momencie kiedy zmieniam wartosc ktorej nie powinienem (zgodnie z instrukcja podana przez autora) mail dociera ale w postaci kolorowej ramki ktora tworzy plik wykonawczy php.
Link do funkcjonalnego oryginalu - ale bez pola textarea

Przesiedzialem juz nad tym dzis kilka godzin i najwyrazniej niz z mojej wiedzy juz nie wydoje:]
Jezeli macie chwilke bylbym ogromnie wdzieczny za jakies sugestie.

pozdrawiam, Piotrek

Ten post edytował thek 31.03.2010, 22:19:16
Go to the top of the page
+Quote Post
ziqzaq
post 22.02.2010, 10:00:15
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


Wywala ci skrypt js, jest tam conajmniej jeden błąd:
Kod
file: tutorial.js
error: phone is not defined
line 36:  var dataString = 'name='+ name + '&e...'&phone=' + phone +'&mess=' + mess;

Przeczytaj treść błędu, wyciągnij wnioski, popraw.
Polecam wpisać w google "firefox firebug" i zainteresować się tym dodatkiem jeśli bawisz się javascriptem. Ułatwi ci to debugowanie skryptów.
Pozdr.
Go to the top of the page
+Quote Post
MrSeefeld
post 22.02.2010, 12:36:31
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 21.02.2010

Ostrzeżenie: (0%)
-----


Rzeczywiscie. Przeoczenie. Poprawilem blad w kodzie js. Co prawda teraz juz nie wyskakuje blad - ale po nacisnieciu submit nie dzieje sie nic:]

Sprawdzalem sciezki pliku php - wydaje sie w porzadku.

Korzystam z firebuga - ale nie wiem dokladnie jak sprawdzac bledy w js. Po Googluje na ten temat - ale wydaje mi sie ze blad jest gdzies w pliku php.




Dzieki za uwage!
Go to the top of the page
+Quote Post
piotrooo89
post 22.02.2010, 12:42:07
Post #4


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




właśnie zdebuggowałem Twój formularz i nie masz process.php.


--------------------
Go to the top of the page
+Quote Post
MrSeefeld
post 22.02.2010, 13:01:11
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 21.02.2010

Ostrzeżenie: (0%)
-----


Pokazywalo blad sciezki. Poprawilem. Niestety dalej brak reakcji po submit.
Go to the top of the page
+Quote Post
ziqzaq
post 22.02.2010, 13:35:41
Post #6





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


Ehhh...
Zobacz sobie czy istnieje na twojej stronie id o nazwie "contact_form".
Dlaczego? Bo się próbujesz do niego odwoływać tu:
[JAVASCRIPT] pobierz, plaintext
  1. $('#contact_form').html('<div id="message"></div>');
[JAVASCRIPT] pobierz, plaintext

Dodatkowo radzę ci odrazu żebyś nie testował tego na białym tle strony bo tekst który się pojawia po wysłaniu jest koloru - tak, tak - białego. dry.gif
Ogólnie skrypt się wykonuje (request do pliku process.php jest ok).
Go to the top of the page
+Quote Post
MrSeefeld
post 22.02.2010, 16:31:15
Post #7





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 21.02.2010

Ostrzeżenie: (0%)
-----


Poprawilem te kolory - poprawilem zle ID..i formularz dziala - no przynajmniej w czesci.



Tak jak wspominalem wczesniej do formularza dodalem textarea - po zdebugowaniu jquery textarea jest jako undefined - i tak samo przychodzi w emailu.



Jak juz rowniez wspominalem po zmianach w pliku process.php mail nie dochodzil wiec powpisywalem w kilku innych miejscach adres maila -



po zmianie tych dwoch parametrow :
  1. $mail->AddAddress("piotr@seefeld.pl","Name 1");
  2. $mail->AddAddress("piotr@seefeld.pl","Name 2");



Email dochodzi ale w formie tabelki (zdjecie ponizej)


Metoda prob i bledow nie uzyskalem zadnych wnioskow wiec moze kod cos pomorze:

  1. <?php
  2. if ((isset($_POST['name'])) && (strlen(trim($_POST['name'])) > 0)) {
  3. $name = stripslashes(strip_tags($_POST['name']));
  4. } else {$name = 'No name entered';}
  5. if ((isset($_POST['email'])) && (strlen(trim($_POST['email'])) > 0)) {
  6. $email = stripslashes(strip_tags($_POST['email']));
  7. } else {$email = 'No email entered';}
  8. if ((isset($_POST['phone'])) && (strlen(trim($_POST['phone'])) > 0)) {
  9. $phone = stripslashes(strip_tags($_POST['phone']));
  10. } else {$phone = 'No phone entered';}
  11. if ((isset($_POST['mess'])) && (strlen(trim($_POST['mess'])) > 0)) {
  12. $mess = stripslashes(strip_tags($_POST['mess']));
  13. } else {$phone = 'No message entered';}
  14. ?>
  15. <html>
  16. <head>
  17. <style type="text/css">
  18. </style>
  19. </head>
  20. <body>
  21. <table width="550" border="1" cellspacing="2" cellpadding="2">
  22. <tr bgcolor="#eeffee">
  23. <td>Name</td>
  24. <td><?=$name;?></td>
  25. </tr>
  26. <tr bgcolor="#eeeeff">
  27. <td>Email</td>
  28. <td><?=$email;?></td>
  29. </tr>
  30. <tr bgcolor="#eeffee">
  31. <td>Phone</td>
  32. <td><?=$phone;?></td>
  33. </tr>
  34. <tr bgcolor="#eeffee">
  35. <td>Message</td>
  36. <td><?=$mess;?></td>
  37. </tr>
  38. </table>
  39. </body>
  40. </html>
  41. <?
  42. $body = ob_get_contents();
  43.  
  44. $to = 'piotr@seefeld.pl';
  45. $email = 'piotr@seefeld.pl';
  46. $fromaddress = "piotr@seefeld.pl";
  47. $fromname = "Online Contact";
  48.  
  49. require("phpmailer.php");
  50.  
  51. $mail = new PHPMailer();
  52.  
  53. $mail->From = "piotr@seefeld.pl";
  54. $mail->FromName = "Contact Form";
  55. $mail->AddAddress("piotr@seefeld.pl","Name 1");
  56. $mail->AddAddress("piotr@seefeld.pl","Name 2");
  57.  
  58. $mail->WordWrap = 50;
  59. $mail->IsHTML(true);
  60.  
  61. $mail->Subject = "Demo Form: Contact form submitted";
  62. $mail->Body = $body;
  63. $mail->AltBody = "This is the text-only body";
  64.  
  65. if(!$mail->Send()) {
  66. $recipient = 'your_email@example.com';
  67. $subject = 'Contact form failed';
  68. $content = $body;
  69. mail($recipient, $subject, $content, "From: mail@yourdomain.com\r\nReply-To: $email\r\nX-Mailer: DT_formmail");
  70. }
  71. ?>




Dzieki za uwage!

Go to the top of the page
+Quote Post
ziqzaq
post 22.02.2010, 19:26:46
Post #8





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


Dublujesz id "mess" w formularzu. ID w dokumencie HTML ma być unikalne.
Go to the top of the page
+Quote Post
piotrooo89
post 22.02.2010, 21:53:15
Post #9


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




no ale jaki problem, że masz undefined mess? u mnie wszytko jest OK wysyłane.


--------------------
Go to the top of the page
+Quote Post
MrSeefeld
post 22.02.2010, 23:55:34
Post #10





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 21.02.2010

Ostrzeżenie: (0%)
-----


Witam!


Poprawilem wszystkie kwestie na ktore zwrociliscie uwage i wyglada to teraz nastepujaco:

Formularz kontaktowy jQuery/Ajax/PHP

Poprawilem style wyrowniania itp.

Zauwazylem nastepujacy problem: w momencie kiedy wypelnisz caly formularz i klikniej DWA razy na submit pokazuje sie dwa razy obraz potwierdzajacy.



I mail dochodzi na poczte 2 razy.

Znacie jakis sposob aby jQuery wykonywalo polecenie submit tylko raz?




Pozatym meczy mnie caly czas ten kod PHP - zmodyfikowany przeze mnie doslownie na macu -pacu.

Po pierwsze zmodyfikowalem go tam gdzie nie powinienem:
( wedlug autora do zmiany sa: $to, $email, $fromaddress, i $mail->From )


Lecz dopiero po zmiane:

  1. $mail->AddAddress("piotr@seefeld.pl","Name 1");
  2. $mail->AddAddress("piotr@seefeld.pl","Name 2");


wiadomosci zaczely docierac na poczte.



Po drugie. Jak juz dotrze ten email to w oknie "od" jest podany email ktory ja wpisalem w kodzie php(wedlug zalecen autora) a nie email ktory jest wpisywany w formularzu. Kod PHP chodz bardzo przejrzysty nic mi nie mowi- za wysoka szkola jazdy jak dla mnie narazie.


Jezeli ktos ma ochote to caly formularz razem z plikami php oraz scryptami do pobrania tutaj:
Formularz kontaktowy - bledy w php




Dzieki za uwage! Jestescie bardzo pomocni!

Ten post edytował MrSeefeld 22.02.2010, 23:59:11
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 16:46