Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP][AJAX][JQUERY] Blad 405 The requested method POST is not allowed for the URL /ajax/index.html.
Forum PHP.pl > Forum > Przedszkole
MrSeefeld
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
ziqzaq
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.
MrSeefeld
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!
piotrooo89
właśnie zdebuggowałem Twój formularz i nie masz process.php.
MrSeefeld
Pokazywalo blad sciezki. Poprawilem. Niestety dalej brak reakcji po submit.
ziqzaq
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).
MrSeefeld
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!

ziqzaq
Dublujesz id "mess" w formularzu. ID w dokumencie HTML ma być unikalne.
piotrooo89
no ale jaki problem, że masz undefined mess? u mnie wszytko jest OK wysyłane.
MrSeefeld
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!
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.