Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [AJAX + PHP] Pobieranie danych i przesyłanie.
Gazder
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 22.10.2011

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


Witam, jako, że jestem w tym dość zielony proszę o małą pomoc.
Chciałem stworzyć Formularz Kontaktowy przez AJAX'a w połączeniu z PHP. Wszystko szło sprawnie, do momentu testów biggrin.gif
Tyle co udało mi się na stukać:
AJAX:
  1. <script type="text/javascript">
  2. var XMLHttpRO = false;
  3.  
  4. function PrzetwarzajDane() {
  5. xmlHttpRO = GetXmlHttpObject();
  6. var name = document.contact.name.value;
  7. var subject = document.contact.subject.value;
  8. var address = document.contact.address.value;
  9. var body = encodeURIComponent(document.contact.body.value);
  10. xmlHttpRO.open("POST", "check_email.php");
  11. xmlHttpRO.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  12. XMLHttpRO.send('&name=' + name + '&subject=' + subject + '&address=' + address + '&body=' + body);
  13. xmlHttpRO.onreadystatechange = stateChanged;
  14. }
  15.  
  16. function stateChanged() {
  17. if (xmlHttpRO.readyState == 4 || xmlHttpRO.readyState == "complete") {
  18. document.getElementById("edytor").innerHTML=xmlHttp.responseText;
  19. }
  20. }
  21.  
  22. function GetXmlHttpObject() {
  23. var request = null;
  24. if (window.XMLHttpRequest) {
  25. request = new XMLHttpRequest();
  26. }
  27. else if (window.ActiveXObject) {
  28. request=new ActiveXObject("Microsoft.XMLHTTP");
  29. }
  30. return request;
  31. }
  32. </script>


check_email.php PHP:
  1. <?PHP
  2. $freaky['config']['to'] = 'bomba9871@wp.pl';
  3. if(isSet(!$_POST['name'] or !$_POST['subject'] or urldecode(!$_POST['body']))){
  4. echo("<html><script>alert('Nie mozna kontynuowac, przeoczyles/as wymagane pola!');</script></html>");
  5. }
  6. else{
  7. $freaky['header'] = 'From: $_POST['name'] <$_POST['address']>';
  8. $freaky['name'] = $_POST['name'];
  9. $freaky['subject'] = $_POST['subject'];
  10. $freaky['body'] = urldecode($_POST['body']);
  11. $contact = mail($freaky['config']['to'],$freaky['subject'],$freaky['body'],$freaky['header']);
  12. if($contact) {
  13. echo("<html><script>alert('Sukces! Informacje, ktore umiesciles w formularzu zostaly wyslane.');</script></html>");
  14. }
  15. else {
  16. echo("<html><script>alert('Blad! Nie można kontynuować(?).');</script></html>");
  17. }
  18. }
  19. ?>


PHP:
  1. <?PHP
  2. echo '<style type="text/css">.submit { width:150px;height:30px; }</style>
  3. Currently, all the fields are required for a fast response.<br /><br />
  4. <form name="contact" method="post" action="">
  5. <table border="0" cellpadding="4" cellspacing="1" width="100%">
  6. <tr><td colspan="2"><span style="font-weight:bold;">Contact Form</span></td></tr>
  7. <tr><td width="20%">Name</td><td width="80%"><input type="text" name="name" /></td></tr>
  8. <tr><td>Subject</td><td><input type="text" name="subject" /></td></tr>
  9. <tr><td>E-mail</td><td><input type="text" name="address" /></td></tr>
  10. <tr><td>Message</td><td><textarea cols="40" rows="10" name="body"></textarea></td></tr>
  11. <td><input type="button" value="Wyślij" onclick="PrzetwarzajDane(value);" /></td><td><input type="reset" value="Wyczyść" class="submit" /></td></tr>
  12. </table>';
  13. ?>


Co jest źle? Dlaczego przy próbie wysłania formularza nic nie następuje? Żadnych błędów, wiadomości a e-mail nie wychodzi.
Proszę o pomoc, z góry dziękuję.
Go to the top of the page
+Quote Post
amii
post
Post #2





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


1. Podstawowa sprawa, gdzie masz odpalaną funkcję PrzetwarzajDane w Twoim skrypcie widzę tylko przypisanie
var XMLHttpRO = false;

2. Sprawdzaj też status odpowiedzi na zasadzie + obsługa błędów:
if (myrequest.readyState==4 && myrequest.status==200) {
//do sth
}


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
Gazder
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 22.10.2011

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


Nie wiem dokładnie o co chodzi z tym pierwszym podpkt., ale skasowałem w tym wypadku FALSE.
A funkcję wywołuję tu:
  1. <td><input type="button" value="Wyślij" onclick="PrzetwarzajDane(value);" /></td><td><input type="reset" value="Wyczyść" class="submit" /></td></tr>

Co do drugiego podpkt. to dodałem ten nowy warunek.
Znalazłem jeszcze jeden mały błąd, ale w efekcie czego dalej nie działa.
Proszę o pomoc, wkleję to co zmieniłem.
  1. <script type="text/javascript">
  2. var XMLHttpRO;
  3.  
  4. function PrzetwarzajDane() {
  5. xmlHttpRO = GetXmlHttpObject();
  6. var name = document.contact.name.value;
  7. var subject = document.contact.subject.value;
  8. var address = document.contact.address.value;
  9. var body = encodeURIComponent(document.contact.body.value);
  10. xmlHttpRO.open("POST", "check_email.php");
  11. xmlHttpRO.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  12. XMLHttpRO.send('&name=' + name + '&subject=' + subject + '&address=' + address + '&body=' + body);
  13. xmlHttpRO.onreadystatechange = stateChanged;
  14. }
  15.  
  16. function stateChanged() {
  17. if ((xmlHttpRO.readyState == 4 || xmlHttpRO.readyState == "complete") && xmlHttpRO.status==200) {
  18. document.getElementById("edytor").innerHTML=xmlHttpRO.responseText;
  19. }
  20. }
  21.  
  22. function GetXmlHttpObject() {
  23. var request = null;
  24. if (window.XMLHttpRequest) {
  25. request = new XMLHttpRequest();
  26. }
  27. else if (window.ActiveXObject) {
  28. request=new ActiveXObject("Microsoft.XMLHTTP");
  29. }
  30. return request;
  31. }
  32. </script>


  1. <?PHP
  2. echo '<style type="text/css">.submit { width:150px;height:30px; }</style>
  3. Currently, all the fields are required for a fast response.<br /><br />
  4. <form name="contact" method="post" action="">
  5. <table border="0" cellpadding="4" cellspacing="1" width="100%">
  6. <tr><td colspan="2"><span style="font-weight:bold;">Contact Form</span></td></tr>
  7. <tr><td width="20%">Name</td><td width="80%"><input type="text" name="name" /></td></tr>
  8. <tr><td>Subject</td><td><input type="text" name="subject" /></td></tr>
  9. <tr><td>E-mail</td><td><input type="text" name="address" /></td></tr>
  10. <tr><td>Message</td><td><textarea cols="40" rows="10" name="body"></textarea></td></tr>
  11. <td><input type="button" value="Send" onclick="PrzetwarzajDane(value);" class="submit" /></td><td><input type="reset" value="Clear" class="submit" /></td></tr>
  12. </table></form>';
  13. ?>


  1. <?PHP
  2. $freaky['config']['to'] = 'bomba9871@wp.pl';
  3. if(isSet(!$_POST['name'] or !$_POST['subject'] or urldecode(!$_POST['body']))){
  4. echo("<html><script>alert('Nie mozna kontynuowac, przeoczyles/as wymagane pola!');</script></html>");
  5. }
  6. else{
  7. $freaky['header'] = 'From: $_POST['name'] <$_POST['address']>';
  8. $freaky['name'] = $_POST['name'];
  9. $freaky['subject'] = $_POST['subject'];
  10. $freaky['body'] = urldecode($_POST['body']);
  11. $contact = mail($freaky['config']['to'],$freaky['subject'],$freaky['body'],$freaky['header']);
  12. if($contact) {
  13. echo("<html><script>alert('Sukces! Informacje, ktore umiesciles w formularzu zostaly wyslane.');</script></html>");
  14. }
  15. else {
  16. echo("<html><script>alert('Blad! Nie można kontynuować(?).');</script></html>");
  17. }
  18. }
  19. ?>


Ten post edytował Gazder 23.10.2011, 12:07:18
Go to the top of the page
+Quote Post
amii
post
Post #4





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Uruchamiasz skrypt na localhost ?
1. Jeśli tak to poczytaj co piszą tutaj o statusie -> http://www.javascriptkit.com/jsref/ajax.shtml
2. Po za tym spróbuj wywalić: var XMLHttpRO;
3. encodeURIComponent - stosuj na wszystkie parametry, aktualnie tylko filtrujesz body
4. Co to za value jest przesyłane do PrzetwarzajDane w deklaracji funkcja nie przyjmuje żadnych parametrów
5. $freaky['header'] = 'From: $_POST['name'] <$_POST['address']>'; tu masz podwójne ciapki i w ogóle zły zapis albo escape albo stosuj naprzemiennie z "
powinno być tak:
  1. $freaky['header'] = "From:". $_POST['name'] . "<". $_POST['address'].">";


Ten post edytował amii 23.10.2011, 14:25:07


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
Gazder
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 22.10.2011

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


Skrypty są na dedyku, więc wszystko powinno ładnie śmigać.
Dodałem poprawki i mam jeszcze jedno pytanie, za co odpowiada ten kawałek:
  1. function stateChanged() {
  2. if ((xmlHttpRO.readyState == 4 || xmlHttpRO.readyState == "complete") && xmlHttpRO.status==200) {
  3. document.getElementById("edytor").innerHTML=xmlHttpRO.responseText;
  4. }
  5. }

Chodzi konkretnie o:
...getElementById("edytor")...

Bo ja to skopiowałem z jakiegoś innego kodu który był w necie.

DNSy mi się zwaliły i nie mogę teraz sprawdzić czy skrypt już działa, jak wszytko będzie działać to dam znać na czym stoimy tongue.gif.
Go to the top of the page
+Quote Post
amii
post
Post #6





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Gazder tu jest pies pogrzebany smile.gif
Ten kod doczepia zwrócony przez php fragment do div z id=edytor, jeśli takiego nie masz to nie dziwne, że nie działa. Swoją drogą takie podstawy wypadałoby już znać bo bez tego tego nie zajedziesz.


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
Gazder
post
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 22.10.2011

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


Aha, no to ładnie biggrin.gif
Stronka już mi działa, ale skrypt nie.

Amii czyli mam rozumieć że gdy dam np.:
  1. <td><div id="edytor">Tekst</div></tr>

To w tymże miejscu pojawi się wynik tego całego AJAX'a?
Czyli np. ujrzę:
Cytat
Blad: Nie można kontynuować, przeoczyłeś/aś wymagane pola!


Jeśli to tak ma działać, to trochę kiepawo, bo chciałem aby błędy nie były wypisywane w danym miejscu tylko wyskakiwały okienka alert z wynikiem AJAX'a (alert('Nie mozna kontynuowac, przeoczyles/as wymagane pola!')wink.gif

Co może być źle skoro dalej nie trybi?
Wkleje kody.

  1. <script type="text/javascript">
  2. function PrzetwarzajDane() {
  3. xmlHttpRO = GetXmlHttpObject();
  4. var name = encodeURIComponent(document.contact.name.value);
  5. var subject = encodeURIComponent(document.contact.subject.value);
  6. var address = encodeURIComponent(document.contact.address.value);
  7. var body = encodeURIComponent(document.contact.body.value);
  8. xmlHttpRO.open("POST", "check_email.php");
  9. xmlHttpRO.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  10. XMLHttpRO.send('&name=' + name + '&subject=' + subject + '&address=' + address + '&body=' + body);
  11. xmlHttpRO.onreadystatechange = stateChanged;
  12. }
  13.  
  14. function stateChanged() {
  15. if ((xmlHttpRO.readyState == 4 || xmlHttpRO.readyState == "complete") && xmlHttpRO.status==200) {
  16. document.getElementById("edytor").innerHTML=xmlHttpRO.responseText;
  17. }
  18. }
  19.  
  20. function GetXmlHttpObject() {
  21. var request = null;
  22. if (window.XMLHttpRequest) {
  23. request = new XMLHttpRequest();
  24. }
  25. else if (window.ActiveXObject) {
  26. request=new ActiveXObject("Microsoft.XMLHTTP");
  27. }
  28. return request;
  29. }
  30. </script>


  1. <?PHP
  2. echo '<style type="text/css">.submit { width:150px;height:30px; }</style>
  3. Currently, all the fields are required for a fast response.<br /><br />
  4. <form name="contact" method="post" action="">
  5. <table border="0" cellpadding="4" cellspacing="1" width="100%">
  6. <tr><td colspan="2"><span style="font-weight:bold;">Contact Form</span></td></tr>
  7. <tr><td width="20%">Name</td><td width="80%"><input type="text" name="name" /></td></tr>
  8. <tr><td>Subject</td><td><input type="text" name="subject" /></td></tr>
  9. <tr><td>E-mail</td><td><input type="text" name="address" /></td></tr>
  10. <tr><td>Message</td><td><textarea cols="40" rows="10" name="body"></textarea></td></tr>
  11. <td><input type="button" value="Send" onclick="PrzetwarzajDane();" class="submit" /></td><td><input type="reset" value="Clear" class="submit" /></td></tr>
  12. <td><div id="edytor">Tekst?</div></tr>
  13. </table></form>';
  14. ?>


  1. <?PHP
  2. $freaky['config']['to'] = 'xsalon@wp.pl';
  3. if(isSet(!$_POST['name'] or !$_POST['subject'] or urldecode(!$_POST['body']))){
  4. echo "<font color='red'>Blad:</font> Nie można kontynuować, przeoczyłeś/aś wymagane pola!";
  5. }
  6. else{
  7. $freaky['header'] = 'From: '.$_POST['name'].' <'.$_POST['address'].'>';
  8. $freaky['name'] = ''.$_POST['name'].'';
  9. $freaky['subject'] = ''.$_POST['subject'].'';
  10. $freaky['body'] = 'urldecode($_POST['body'])';
  11. $contact = mail($freaky['config']['to'],$freaky['subject'],$freaky['body'],$freaky['header']);
  12. if($contact) {
  13. echo "<font color='green'>Sukces!</font> Informacje, które umieściłeś w formularzu zostały wysłane.";
  14. }
  15. else {
  16. echo "<font color='red'>Blad:</font> Nie można kontynuować(?).";
  17. }
  18. }
  19. ?>


Odświeżam. Dalej potrzebuje pomocy.

Odświeżam. Dalej potrzebuje pomocy.

Ten post edytował Gazder 23.10.2011, 19:01:31
Go to the top of the page
+Quote Post
amii
post
Post #8





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Gazder popróbuj trochę sam masz tu proste tutoriale do AJAX:
http://www.w3schools.com/ajax/default.asp
http://www.javascriptkit.com/jsref/ajax.shtml
po polsku:
http://gajdaw.pl/ajax/wprowadzenie/p1.html

Od siebie dodam, że tu masz tak:
XMLHttpRO.send('&name=' + name + '&subject=' + subject + '&address=' + address + '&body=' + body);
a powinno być tak (poświęciłem na to pół minuty i zajrzałem w tutoriala):
XMLHttpRO.send('name=' + name + '&subject=' + subject + '&address=' + address + '&body=' + body);
Po za tym jeśli nie będzie działać pozmieniaj wszystko w/g przykładów z kursów i powstawiaj tylko swoje dane specyficzne dla formularza i wartości parametrów. Listuje błędy, testuj. To są absolutne podstawy.

Ten post edytował amii 29.10.2011, 11:59:55


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
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 Aktualny czas: 21.08.2025 - 22:26