Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mintAjax] Walidacja danych z formularza
Forum PHP.pl > Forum > XML, AJAX
iMax
Witam. Zaczynam przygoda z AJAXEM a konkretnie mintAjaxem, i mam pewien problem.
Postanowilem sobie zrobic walidacje wybranych pol w formularzu. Uzylem onChange, czyli gdy uzytkownik wpisze cos, a bedzie to zle to wyswietli sie blad nad formuarzem w divie.

js
  1. <?php
  2. function check_profile(pole, div)
  3. { req = mint.Request();
  4.  req.method = "post";
  5.  req.AddParam(pole, $(pole).value);
  6.  req.OnSuccess = function ()
  7.  { 
  8.  document.getElementById(div).innerHTML = req.responseText;
  9.  }
  10.  req.Send("profile.php?action=save");
  11. }
  12. ?>


html (jeszcze ze smartami)
  1. <form action="profile.php?action=save" method="post" name="form" id="form">
  2. <div class="page_content">
  3. <div class="page_title">Edycja profilu</div>
  4. <div class="edit_profile">
  5. {foreach from=$profile item=pr}
  6. <div class="section">Strona</div>
  7. <table width="100%" cellpadding="1" cellspacing="2">
  8. <tr>
  9. <td width="38%">Email:</td>
  10. <td width="62%">
  11. <div id="c_email"></div>
  12. <input name="email" type="text" id="email" value="{$pr.email}" size="22" maxlength="60" onChange="check_profile('email', 'c_email')" />
  13. </label>
  14. <div id="c_email_e"></div></td>
  15. </tr>
  16. <tr>
  17. <td>Nowe hasło:</td>
  18. <td>
  19. <div id="c_pass"></div>
  20. <input name="pass1" type="password" id="pass1" size="22" maxlength="50" onChange="check_profile('pass1', 'c_pass')"/>
  21. </label></td>
  22. </tr>
  23. <tr>
  24. <td>Powtórz hasło:</td>
  25. <td><input name="pass2" type="password" id="pass2" size="22" maxlength="50" onChange="check_profile('pass2', 'c_pass')"/></td>
  26. </tr>
  27. </table>
  28. ........


Niestety nie mam teraz dostepu do pliku php, ale jest on na 100%, bo bez ajaxa dzialal jak nalezy. Sprawdza na zasadzie if(cos tam zle) echo blad.
A wogole caly problem tkwi w tym, ze czy wypelnie pole email czy nie, to zawsze gdy zejde nizej i wypelnie hasla i zgadzaja sie ze soba to w divie od bledow z hasel wyskakuje moj blad: "Nie podano emaila" (sprawdza na zasadzie if(!isset($_POST['email'])) echo Nie podano emaila), chodz ten blad nie ma nic wspolnego z haslami (tak samo jest jak podam inne pola). W js przesylam tylko pole, wiec na moj chlopski rozum w skrypcie php powinno sie wykonac to gdzie jest $_POST['...'], a wiec skad tam inne pole. Jak na moje oko to wina js. Jesli tak, to jak go zmodyfikowac, zeby sprawdzal tylko w php gdzie jest bezposrednie odwolanie do danego pola.
Skie
Pierwszy błąd jaki mi się narzuca przed oczami to:

Kod
req.Send("profile.php?action=save");


Powinno być

Kod
req.AddParam("action", "save");
req.Send("profile.php", div);
Dzik
Teraz to wogole nie dziala.
klocu
Myślę nad zasadnością takiego rozwiązania. Chcesz sprawdzać każde pole odpytując Ajaxem php? Jakoś nie widzę w tym sensu. Zrób wstępną analizę czysty js na obecność danych w polu. Jeśli się zgadza wysyłasz formularz, tu robisz krok drugi analizy (dla tych co myślą że są sprytni) i tyle tego.

Albo zrezygnuj ze sprawdzania i weryfikację nałóż tylko po tym jak wysyłasz formularz do php. Usiądź z manualem minta i na spokojnie pomyśl jak to ugryźć. Manual jest bardzo czytelny.

A dlaczego niby "req.Send("profile.php?action=save");" jest źle? Jak chcesz Sobie pchać to getem to Twój wybór.
I po co masz klepać nazwę pola za każdym razem - prześlij obiekt zamiast: "check_profile('email', 'c_email')" wklep "check_profile(this, 'c_email')" bo przecież pole samo zgłasza Siebie nie?
vokiel
No i zdecyduj się na formę wysyłania formularza: albo GET, albo POST:
<form action="profile.php?action=save" method="post" name="form" id="form">

Ja proponuję tak:
1. sprawdzasz czy pole jest puste (czysty js). jesli jest to nawet nie validujesz ajaxem w PHP bo i po co...
2. jesli jest wypelnione to sprawdzasz ajaxem w php, ale nie przy onChange, tylko po opuszczeniu pola, bo po co validować coś co jeszcze jest w trakcie edycji... Czyli zdarzenie raczej onBlur, kiedy usr przejdzie do edycji drugiego pola (czyli zakończy wpisywanie w tym)

pozdrawiam smile.gif
klocu
Cytat(vokiel @ 30.07.2008, 14:14:21 ) *
1. sprawdzasz czy pole jest puste (czysty js). jesli jest to nawet nie validujesz ajaxem w PHP bo i po co...

po to, że wyłączyłem Sobie js w przeglądarce. wiem jestem dziwny, ale tak. to jest najszybsza metoda żeby napakować komuś spamu do formularza jak nie będzie walidować pól wyżej niż przez js.
vokiel
Validację w PHP przeprowadzasz tak czy inaczej, to jest oczywiste.

Chodziło mi o to, że nie ma sensu odpytywać ajaxem skryptu php sprawdzającego poprawność pola, gdy jest puste. Bo co masz sprawdzac?? pusty ciąg? Oraz żeby nie robić tego przy zdarzeniu onChange tylko np onBlur.

Ja to widzę tak:
- sprawdzanie ajaxem czy dane w wpisanym polu sa ok, ale dopiero po jego opuszczeniu przy warunku ze pole nie jest puste
- sprawdzanie js czy pole jest puste (minimalna ilosc znakow) przed wyslaniem formularza i przed sprawdzaniem go ajaxem
- jesli wszystkie wymagane sa wypelnione, spelniaja podstawowe warunki walidacji w js wtedy mozna wyslac formularz
- ale i tak na koniec sprawdzenie pobranych danych w php!
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.