Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Sprawdzanie poprawności wpisanych danych do formularza
Forum PHP.pl > Forum > Przedszkole
przemo191
Witam mam taki problem, nie wiem jak zrobić opcje sprawdzania poprawności danych w formularzu. Chodzi mi o to że kiedy np w polu do wpisania daty ktoś wpiszę literę to pod danym polem pojawi mu się informacja o błędzie.

Kod formularza to:
  1. <form action="insert_car.php" method="post">
  2. <tr>
  3. <td>Nr rejestracji:</td>
  4. <td><input type="text" name="nr_rej"></td>
  5. <td>(Nr rejestracji wpisuj z "_" bez użycia spacji, np. FZ_00000)</td>
  6. </tr>
  7. <tr>
  8. <td>Typ:</td>
  9. <td>
  10. <select name="typ">
  11. <option>ciągnik siodłowy</option>
  12. <option>naczepa</option>
  13. <option>samochód osobowy</option>
  14. </select>
  15. </td>
  16. <td></td>
  17. </tr>
  18. <tr>
  19. <td>Nr VIN:</td>
  20. <td><input type="text" name="nr_vin"></td>
  21. <td></td>
  22. </tr>
  23. <tr>
  24. <td>Rok prokucji:</td>
  25. <td><input type="text" name="rok_produkcji"></td>
  26. <td>(Rok wpisuj w formie RRRR np. 2011)</td>
  27. </tr>
  28. <tr>
  29. <td>Nr umowy leasingowej:</td>
  30. <td><input type="text" name="nr_umowy_leasing"></td>
  31. <td></td>
  32. </tr>
  33. <tr>
  34. <td>Umowa leasingowa ważna do dnia:</td>
  35. <td><input type="text" name="umowa_leasingowa_do_dnia"></td>
  36. <td>(Date wpisuj w formie RRRR-MM-DD np. 2011-02-21)</td>
  37. </tr>
  38. <tr>
  39. <td>Badanie techniczne ważne do dnia:</td>
  40. <td><input type="text" name="badanie_tech_do_dnia"></td>
  41. <td>(Date wpisuj w formie RRRR-MM-DD np. 2011-02-21)</td>
  42. </tr>
  43. <tr>
  44. <td>Ubezpieczenie ważne do dnia:</td>
  45. <td><input type="text" name="ubezpieczenie_do_dnia"></td>
  46. <td>(Date wpisuj w formie RRRR-MM-DD np. 2011-02-21)</td>
  47. </tr>
  48.  
  49. </table>
  50. <input type="submit" value="Zapisz do bazy">
  51. </form>


A tu kod pliku action (insert_car.php):

  1. $typ=$_POST['typ'];
  2. $nr_vin=$_POST['nr_vin'];
  3. $rok_produ=$_POST['rok_produ'];
  4. $nr_umowy_leasing=$_POST['nr_umowy_leasing'];
  5. $umowa_leasingowa_do_dnia=$_POST['umowa_leasingowa_do_dnia'];
  6. $badanie_tech_do_dnia=$_POST['badanie_tech_do_dnia'];
  7. $ubezpieczenie_do_dnia=$_POST['ubezpieczenie_do_dnia'];
  8.  
  9. mysql_connect("localhost",$username,$password);
  10. @mysql_select_db($database) or die("Nie znaleziono bazy danych");
  11.  
  12.  
  13. $query = "INSERT INTO samochody VALUES (
  14. '',
  15. '$nr_rej',
  16. '$typ',
  17. '$nr_vin',
  18. '$rok_produ',
  19. '$nr_umowy_leasing',
  20. '$umowa_leasingowa_do_dnia',
  21. '$badanie_tech_do_dnia',
  22. '$ubezpieczenie_do_dnia')";
  23.  
  24. mysql_query($query);


Wydaje mi się że trzeba będzie użyć JavaScript, lecz nie znam się na tym zupełnie. I wolał bym uniknąć używania JavaScript.
Więc proszę was o pomoc, w postaci kodu który mogę dodać do skryptu, jakiejś podpowiedzi, bądź lektury.
potreb
To poszukaj sobie w necie rozwiązań typy ajax validator, tylko oprócz tego i tak w php musisz robić sprawdzanie tych samych pól.
przemo191
Ok powiedzmy że znalazłem sobie odpowiedni ajax validator, ale zupełnie nie wiem jak go umieścić w kodzie, cały czas mi coś nie działa:
Tu link do tego skryptu:
Tu
amii
Najlepiej to jakbyś pokazał co robisz. W/g mnie to powinno działać tak:
1. Robisz plik PHP o treści takiej jak w przykładzie a na jego początku wstawiasz (wywaliłem tłumienie błędów):
  1. if ($_REQUEST['action'] == 'check_username' && isset($_SERVER['HTTP_X_REQUESTED_WITH'])) { //jeśli odpowiednie zmienne zostały przekazane..
  2. echo json_encode(check_username($_REQUEST['username'])); //wywołaj funkcję przekazując jej wartość z pola username a następnie zakoduj zwrócone dane do formatu json, czyli cały skrypt powinien zwrócić sformatowane na JSON dane w postaci dwuelementowej tablicy
  3. exit; // only print out the json version of the response
  4. }


2. Kod z markup to twój formularz
3. jQuery ładujesz do pliku z formularzem, oczywiście najpierw umieszczasz link do biblioteki
4. ajax-validation.php i plik z formularzem muszą być w tym samym katalogu.


Można to też rozwiązać tak:
1. W polu formularza umieszczasz:
  1. echo '<input class="input" name="password" id="password_input" type="password" value="'.$_POST['password'].'" maxlength="14" onblur="ajax_check(this.value, this.name)"/>';

To jest odwołanie do skryptu jQuery, któremu przekazujesz wartość i nazwę danego pola
2. Skrypt jQuery u mnie wygląda tak:
[JAVASCRIPT] pobierz, plaintext
  1. function ajax_check(input_value, input_name) {
  2.  
  3.  
  4.  
  5.  
  6. $.post("view/ajax_check.php",{checker:input_value, checker_name:input_name}, function(data) {
  7.  
  8.  
  9. if(data) { //jesli skrypt PHP zwrócił ()wyświetlił) dane
  10. $('form input#'+input_name+'_input').removeClass('input input_ok').addClass('input_error'); //remove old class from input field and add error class
  11. $('#'+input_name+'_tick').css({'display' : 'none'}); //ukrywanie zdjęcia z id poprawnej odpowiedzi dla danego pola
  12. $('#'+input_name+'_cross').css({'display' : 'block'}); //pokazywanie zdjęcia z id błędnej odpowiedzi dla danego pola
  13. $('div#error_'+input_name).css({'display' : 'block'}); //pokazanie ostylowanego diva z błędem odpowiedzi dla danego pola
  14. $('div#error_'+input_name).text(data); //umieszczenie pobranej z pliku PHP treści w tym divie
  15. }
  16. else { //jesli dane nie zostały zwrócone to znaczy, że wszystko było ok
  17. $('form input#'+input_name+'_input').removeClass('input input_error').addClass('input_ok'); //remove old class from input field and add error class
  18. $('div#error_'+input_name).css({'display' : 'none'}); //ukrywamy div z błędami
  19. $('#'+input_name+'_cross').css({'display' : 'none'}); //ukrywamy grafikę z błędami
  20. $('#'+input_name+'_tick').css({'display' : 'block'}); //pokazujemy style dla poprawnej odpowiedzi
  21. }
  22.  
  23.  
  24. });
  25.  
  26. }
[JAVASCRIPT] pobierz, plaintext


Plik PHP
  1. $checker = $_POST['checker']; //wartośc pola value dla uproszczenia pomijam czyszczenie danych od usera
  2. $checker_name = $_POST['checker_name']; //nazwa pola name dla uproszczenia pomijam czyszczenie danych od usera
  3.  
  4. switch($checker_name) {
  5. case 'konto':
  6. if (strlen($checker) < 1 || strlen($checker) > 80) {
  7. echo 'Nazwa użytkonwika musi mieć od 1 do 80 znaków.';
  8. break;
  9. }
  10. $ile =mysql_query("SELECT * FROM `users` WHERE login = '$checker'");
  11. $ile = mysql_num_rows($ile);
  12. if ($ile==0) {
  13. echo '';
  14. }
  15. else {
  16. echo 'Użytkownik ' .$checker. ' już istnieje wybierz inną nazwę.';
  17. }
  18. break;
  19.  
  20. case 'password':
  21. $_SESSION[$pass] = $checker;
  22. if (!checkUserPass($checker)) {
  23. echo 'Hasło użytkonwika musi mieć od 3 do 14 znaków. I może się składać tylko ze znaków alfanumerycznych.';
  24. }
  25. else echo '';
  26. break;
  27.  
  28. case 'password2':
  29. if ($checker !== $_SESSION[$pass]) {
  30. echo 'Hasła nie są takie same.';
  31. }
  32. else echo '';
  33. break;
  34.  
  35. case 'email':
  36. if (!filter_var(trim($checker), FILTER_VALIDATE_EMAIL)) {
  37. echo 'Adres e-mail ma niepoprawny format.';
  38. }
  39. else echo '';
  40. break;
  41.  
  42. default:
  43. echo 'Formularz zawiera niepoprawne lub niekompletne dane.';
  44. break;
  45. }
hyhyhy
Ja się bawię w coś takiego w php (wiem, ajax wygodniejszy, ładniejszy, ale php łatwiejsze smile.gif )

generalnie trzy funkcje:

  1. if wysłano formularz{
  2.  
  3. if wypełniono wszystkp{
  4. OK
  5. }else{
  6. sprawdzajPoKolei();
  7. }
  8. }else{
  9.  
  10. wyswietl formularz
  11. }


przy czym funkcja sprawdzajPoKolei() działa tak:

jeżeli pole 1 jest puste, wypisz je z komunikatem o błędzie, jeżeli nie, sprawdź czy jest dobrze wypełnione (np czy jest dłuższe niż 5 znaków). Jak się wszystko zgadza, napisz że OK, jak błędnie, to poinformuj o tym użytkownika.

Przy czym jest pewien minus - jeżeli formularz jest długi, pisanie trzeciej funkcji dostarcza frajdy porównywalnej ze skręcaniem długopisów i to na długie godziny smile.gif
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.