Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Przesyłanie zmiennych z formularza przez js do php
Forum PHP.pl > Forum > Przedszkole
renault12
Witam,

Mam problem z przesylaniem danych z formularza do php metoda js. Chce przeslac login i email dynamicznie do php, mam pewna funkcje w js ktora przy jednym parametrze chodzi dobrze ale ja wlasnie chce przeslac i login i email przez ta funkcje i tu robi sie problem. Wie ktos moze co moze byc zle? Takim kodem ktorego zaraz przedstawie sprawdza mi tylko login a chcialbym zeby sprawdzilo tez poprawnosc email.


[JAVASCRIPT] pobierz, plaintext
  1. var myAjax6 = new Ajax.Request('reg.php', {
  2. method: 'post',
  3. parametrs: "email=" + email,
  4. onSuccess: function(showResponse){
  5. errorResults.innerHTML = showResponse.responseText;
  6. }
  7. });
  8. var myAjax5 = new Ajax.Request('reg.php', {
  9. method: 'post',
  10. parameters: "login=" + login,
  11. onSuccess: function(showResponse){
  12. errorResults.innerHTML = showResponse.responseText;
  13. }
  14. });
[JAVASCRIPT] pobierz, plaintext


  1. $login = $_POST['login'];
  2. $email = $_POST['email'];
  3. $znaki = strlen($login);
  4. $zap = mysql_query("SELECT login FROM users WHERE login = '$login'") or die (mysql_error());
  5. $ile = mysql_num_rows($zap);
  6. if ($login != '') {
  7. if ($znaki >= 5 && $znaki <= 16) {
  8. if ($ile>0)
  9. {
  10. echo $email . '<font color="red">Błąd w formularzu.</font>';
  11. }
  12. } else {
  13. if ($znaki < 5)
  14. {
  15. echo 'Błąd w formularzu.';
  16. } else {
  17. if ($znaki > 16) {
  18. echo 'Błąd w formularzu.';
  19. }
  20. }
  21. }
  22.  
  23. if ($email != '')
  24. {
  25. if(strstr($email,'@'))
  26. {
  27. echo '';
  28. } else {
  29. if (strlen($email) < 6) {
  30. echo 'Niepoprawny adres email';
  31. } else {
  32. echo 'Niepoprawny adres email';
  33. }
  34. }
  35. }
  36. }


Proszę o pomoc
thomson89
Nie męcz się w JS. Przestaw się na jQuery. Naprawdę ułatwia to życie.

Przykład:
[JAVASCRIPT] pobierz, plaintext
  1. var login = $('#login').val();
  2. var pass = $('#pass).val();
  3.  
  4. $.post("reg.php", { login: login, pass: pass}, //nazwa zmiennej dla php : wartosc
  5. function(result){ //co ma sie dziać po wykonaniu
  6.  
  7. $('#wynik').html(result); //to co zwróci php przekazałem do diva wynik (zwróci w sensie funkcji echo po stronie php)
  8.  
  9. });
[JAVASCRIPT] pobierz, plaintext
renault12
A w jaki sposob moge przeslac zmienna z php do js aby potem móc ja odczytac ?
thomson89
Na powyższym przykładzie, wystarczy że dasz w skrypcie PHP:
  1. echo $zmienna


I ona będzie zawarta w zmiennej result już po stronie JS.
renault12
No a jesli juz mam jakis tekst w echo i jak dodam do tego tekstu jeszcze zmienna to potem bym musial rozbijac ten ciag znakow, nie da sie tego jakos oddzielnie przeslac?
thomson89
Zobacz funkcję.
everth
Straszna kaszana w tym twoim źródle. Nie wiem czy dobrze zrozumiałem ale chcesz wysłać login i email do serwera, sprawdzić je i odesłać odpowiedź za pomocą Ajaxa? Jeśli tak to za pomocą jQuery i kawałka kodu można zrobić to tak:
Przykładowy HTML:
  1. <form action='js.php' method='post' id='myForm'>
  2. <input type='text' name='form[login]' id='login' />
  3. <input type='text' name='form[email]' id='email' />
  4.  
  5. <input type='submit' >Wyślij</input>
  6. </form>

Kierunek JS -> PHP metoda POST, dane zwracamy za pomocą JSON :
  1. $form = $_GET['form'];
  2.  
  3. if (strlen($form['login'])>=6 && strlen($form['login'])<16 && filter_var($form['email'], FILTER_VALIDATE_EMAIL))
  4. $response['status'] = true;
  5. $reponse['message'] = 'Przyjęto dane';
  6. } else {
  7. $response['status'] = false;
  8. $reponse['message'] = 'Dane w formularzu są błędne, spadaj';
  9. }
  10.  
  11. echo json_encode($response);

I kod JS:
[JAVASCRIPT] pobierz, plaintext
  1. $('#myForm').submit(function() {
  2. data = $(this).serialize(); // zamieniamy dane z formularza w string
  3. $.post($(this).attr('action'),data,function(result) {
  4. // dane otrzymujemy w postaci obiektu result (zwykły obiekt JS, pola takie jak w naszym arrayu php
  5. typeClass = (result.status) ? 'good':'error'; //klasy stylujące w zależności od wyniku
  6. msgbox = $("<div style='position:absolute;top:30%;left:45%; z-index:1000' />");
  7. msgbox.addClass(typeClass);
  8. msgbox.text(result.message); //wstawiamy komunikat
  9. $('body').append(msgbox); //pokazujemy diva z komunikatem
  10. },'json'); //json oznacza jak jQuery ma traktować odpowiedź z serwera
  11. });
[JAVASCRIPT] pobierz, plaintext


Oczywiście div msgbox jest niedopracowany (nie można go zamknąć) ale to już twoja działka. Jeśli nie przeszkadza ci nadmiar kodu JS to możesz zainteresować się jQuery UI.
renault12
No mniej więcej mi o coś takiego chodziło, później to pod siebie zmodyfikuje.

Aaaa mam jeszcze jeden problem, z pliku php do js zwracam zmienna przez echo pod taka postacią js:


[JAVASCRIPT] pobierz, plaintext
  1. $('#errorResults').html(result);
[JAVASCRIPT] pobierz, plaintext


Tekst normalnie się wyświetla ale kiedy robie naprzyklad taki warunek nie śmiga

[JAVASCRIPT] pobierz, plaintext
  1. function(result){
  2. if ($.html(result) == '') {
  3. //kod
  4. }
  5. }
[JAVASCRIPT] pobierz, plaintext


Potrzebuję tego warunku dlatego ze chce sprawdzic czy w zmiennej jest jakis tekst, jesli jest to ma sie wywolac jakas funkcja no ale takowo sie nie dzieje : /
everth
Jeśli 'result' jest wynikiem funkcji echo w PHP to jest w JS interpretowane jako string, czyli nie $.html(result)==coś bo jakbyś zobaczył do api jquery to funkcja html z parametrem służy do dodawania zawartości (choć da się ją wykorzystać do porównania). Sprawdzasz zmienną result czyli:
[JAVASCRIPT] pobierz, plaintext
  1. if (typeof(result)==undefined || result=='') {...}
[JAVASCRIPT] pobierz, plaintext
renault12
Coś nie działa :/ Nie wiem gdzie jest błąd, zobacz sam:

[JAVASCRIPT] pobierz, plaintext
  1. $.post("reg.php", { login: login, email: email, haslo: haslo, re_haslo: re_haslo},
  2. function(result){
  3. $('#errorResults').html(result);
  4. });
  5. if (typeof(result)==undefined || result=='') {
  6. var divstyle = new String();
  7. divstyle = document.getElementById("txt2").style.visibility;
  8. divstyle = document.getElementById("sukces").style.visibility;
  9. if(divstyle.toLowerCase()=="visible" || divstyle == "")
  10. {
  11. document.getElementById("txt2").style.visibility = "hidden";
  12. document.getElementById("sukces").style.visibility = "visible";
  13. }
  14. }
[JAVASCRIPT] pobierz, plaintext
everth
Jak masz tak pisać to lepiej nie pisz w ogóle. To jest jeszcze gorsza kasza niż na początku, nie ma prawa działać: nadpisywana zmienna divstyle tak że w końcu nie wiadomo co ona reprezentuje (txt2, sukces? a może String()?), a skoro dodałeś już jQuery to zacznij z niego korzystać - wygoda i czystość kodu. Poniżej masz to trochę przerobione (na ile zrozumiałem co to w ogóle robi), zapoznaj się z jQuery i spróbuj to przepisać
[JAVASCRIPT] pobierz, plaintext
  1. $.post("reg.php", {
  2. login : login,
  3. email : email,
  4. haslo : haslo,
  5. re_haslo : re_haslo
  6. }, function(result) {
  7. showMsgBox(result); // ta funkcja musi zostać wywołana w tym miejscu
  8. });
  9.  
  10. function showMsgBox(result) {
  11. $('#errorResults').html(result);
  12.  
  13. if (typeof (result) == undefined || result == '') {
  14. elems = $("#txt2, #sukces");
  15. elems.show(); // pokazuje elementy txt2 i sukces (chyba o to ci chodzi)
  16.  
  17. // if (divstyle.toLowerCase() == "visible" || divstyle == "") {
  18. // document.getElementById("txt2").style.visibility = "hidden";
  19. // document.getElementById("sukces").style.visibility = "visible";
  20. // } NIE MAM POJĘCIA CO TO ROBI
  21. }
  22. }
[JAVASCRIPT] pobierz, plaintext
renault12
nooo i elegancko smigaaa, dzieki. A to te txt2 to div pod którym jest formularz. Jeśli tamten warunek się spełni to on się chowa i pokazuje div sukces który wypisuje wynik. A skad u Ciebie takie zamilowanie do tej kaszy haha.gif
everth
Jak zaczniesz pracować z kodem stworzonym przez innych to z czasem zrozumiesz moją niechęć do "kaszy" winksmiley.jpg
renault12
Nie chce zakladac nowego tematu wiec pisze tutaj bo znowu mam problem dziwny troche bo chodzi o to że w powyższym kodzie na poprzednim hostingu wszystko chodzilo bez zarzutu, a kiedy przelozylem sie na 000webhosting nie skrypt nie przechodzi przez ten warunek :

[JAVASCRIPT] pobierz, plaintext
  1. if (typeof (result) == undefined || result == '') {
[JAVASCRIPT] pobierz, plaintext


Co moze byc nie tak?
everth
Sprawdź zmienną result - czasem przeglądarki (zwłaszcza IE) zwracają różne wartości dla pustych zmiennych. Tutaj może być false,null,undefined (niekiedy pokazywana jako typ, innym razem jako string).
Przed warunkiem
[JAVASCRIPT] pobierz, plaintext
  1. alert(result);
[JAVASCRIPT] pobierz, plaintext

I zobacz co ci zwraca - dodaj to do warunku
renault12
I przed warunkiem i w warunku nic nie zwraca w alercie
everth
Rozbuduj warunek
[JAVASCRIPT] pobierz, plaintext
  1. (typeof(result)==undefined || result=null | result ==false || result=='') //albo to
  2. (!result || result=='') //albo to
[JAVASCRIPT] pobierz, plaintext
renault12
Też nic z tego :/
everth
To wrzuć to co podałem w nawiasach jako warunek w alert() i zobacz czy zwraca true czy false.
renault12
false
everth
No to masz odpowiedź: jeśli warunek nie jest spełniony (result jest puste) to nie wykonuj kodu w klamrach. Wrzuć kod który stosujesz + opis co znaczą poszczególne id (np '#txt')) bo wydaje mi się że się nie zrozumieliśmy smile.gif
renault12
A ja myśle że to nie w tym jest problem, problem jest mysle z hostingiem bo na poprzednim wszystko dzialalo ok a na 000webhost wlasnie nie dziala : /.

[JAVASCRIPT] pobierz, plaintext
  1. $.post("reg.php", {
  2. login : login,
  3. email : email,
  4. haslo : haslo,
  5. re_haslo : re_haslo
  6. }, function(result) {
  7. showMsgBox(result); // ta funkcja musi zostać wywołana w tym miejscu
  8. });
  9.  
  10. function showMsgBox(result) {
  11. $('#errorResults').html(result);
  12. if (typeof(result) == undefined || result == '') {
  13. var divstyle = new String();
  14. divstyle = document.getElementById("txt2").style.visibility; // sprawdza czy div txt2 jest widoczny
  15. divstyle = document.getElementById("sukces").style.visibility; // sprawdza czy div sukces jest widoczny (w css tego diva jest ustawione: visibility:hidden)
  16. if (divstyle.toLowerCase() == "visible" || divstyle == "") {
  17. document.getElementById("txt2").style.visibility = "hidden"; // zakrywa div txt2
  18. document.getElementById("sukces").style.visibility = "visible"; // odkrywa div sukces
  19. }
  20. } else { document.write("Źle") }
  21. }
[JAVASCRIPT] pobierz, plaintext


Znalazłem coś dziwnego przy komunikacie alert.

Kiedy wystawie taki kod:
[JAVASCRIPT] pobierz, plaintext
  1.  
  2. if (result != '') {
  3. alert('');
  4. }
[JAVASCRIPT] pobierz, plaintext

Wyskakuje mi puste okienko dosłownie bez zadnego znaku niewidocznego - tak jak ma byc

A tutaj kiedy wystawie taki kod:
[JAVASCRIPT] pobierz, plaintext
  1. if (result != '') {
  2. alert(result);
  3. }
[JAVASCRIPT] pobierz, plaintext

Wyskakuje mi okienko z jakimś niewidocznym znakiem zaznaczonym na tym obrazku: http://img687.imageshack.us/img687/8209/blad2u.jpg

To warunek w reg.php ktory wlasnie decyduje o tym czy zwroci jakis komunikat do result
  1. <?
  2. if ($blad == "T") {
  3. echo "Błąd w formularzu";
  4. } else {
  5. // REJESTRACJA \\
  6. $haslo_hash = md5($haslo);
  7. $zap2 = mysql_query("INSERT INTO users (`login`, `haslo`, `email`) VALUES ('$login', '$haslo_hash', '$email')");
  8. }
  9. exit();
  10. ?>
everth
Taki pomysł. Niestety nie potrafię zrozumieć co w tym skrypcie sygnalizuje result. Założyłem że jeśli jest wysłana i nie posiada wartości error to oznacza sukces. W innym wypadku błąd
[JAVASCRIPT] pobierz, plaintext
  1. function showMsgBox(result) {
  2. $('#errorResults').html(result); //co tak naprawdę sygnalizuje zmienna result? Wnioskuje że kod błędu
  3. if (result || !result=='error' || !typeof(result)==undefined) { //result nie jest pusteczyli sukces
  4. $("#txt2").hide(); //pokazuje #txt2 czyli chyba formularz
  5. $("#sukces").show();
  6. } else {
  7. $("#txt2").show(); //ukrywam #txt2 czyli chyba formularz
  8. $("#sukces").hide();
  9. }
  10. }
  11. }
[JAVASCRIPT] pobierz, plaintext
renault12
zmieniłem tylko warunek na taki
[JAVASCRIPT] pobierz, plaintext
  1. if (result!=' ' || !typeof(result)==undefined)
[JAVASCRIPT] pobierz, plaintext


i smiga jak trza
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.