Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Walidacja formularza
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
imie_nazwisko
Witam,
Zrobilem walidacje formularza, która ma sprawdzac czy uzytkownik wprowadzil wartosci we wszystkie pola formularza.
Walidacja dziala jesli wszytskie elementy tablicy row mają "Yes".

W przypadku gdy w row[1]="No" chcialbym aby zostały sprawdzone pozostale dwa pola plec oraz kraj. Niestety tak się nie dzieje, formularz przechodzi gdy wszytskie pola sa puste


  1. <script LANGUAGE= "JavaScript" type= "text/javascript">
  2. function validateForm(rejestracja){
  3.  
  4. var tekst='';
  5. if (rejestracja.plec.value==""){tekst=tekst+"- plec\n";}
  6. if (rejestracja.zawod.value==""){tekst=tekst+"- zawód\n";}
  7. if (rejestracja.kraj.value =="" ){tekst=tekst+"- kraj\n";}
  8. if (tekst!="") {alert ("Błąd #882: \nNie uzupełniłeś następujących pól: \n\n"+tekst);
  9. return false;
  10. } else {
  11. return true;
  12. }
  13. }
  14.  


  1. <form class="form-horizontal" method="post" onsubmit="return validateForm(this);">
  2. <fieldset>
  3. <legend>Close concession #<?php echo $nr; ?></legend><br>
  4.  
  5. <?php
  6. if ($row[0]=='Yes') {
  7. echo '<div class="form-group">';
  8. echo ' <label for="inputPeriod" class="col-lg-5 control-label">Podaj pleć: </label>';
  9. echo ' <div class="col-lg-2">';
  10. echo ' <div class="input-group date">';
  11. echo ' <input maxlength="10" type="text" class="form-control" name="plec" placeholder="" ><span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>';
  12. echo ' </div>';
  13. echo ' </div>';
  14. echo '</div>';
  15. }
  16.  
  17. if ($row[1]=='Yes') {
  18. echo '<div class="form-group">';
  19. echo ' <label for="inputPeriod" class="col-lg-5 control-label">Podaj zawód: </label>';
  20. echo ' <div class="col-lg-2">';
  21. echo ' <div class="input-group date">';
  22. echo ' <input maxlength="10" type="text" class="form-control" name="zawod" placeholder="" ><span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>';
  23. echo ' </div>';
  24. echo ' </div>';
  25. echo '</div>';
  26. }
  27.  
  28. if ($row[2]=='Yes') {
  29. echo '<div class="form-group">';
  30. echo ' <label for="inputPeriod" class="col-lg-5 control-label">Podaj kraj: </label>';
  31. echo ' <div class="col-lg-2">';
  32. echo ' <div class="input-group date">';
  33. echo ' <input maxlength="10" type="text" class="form-control" name="kraj" placeholder="" ><span class="input-group-addon"><i class="glyphicon glyphicon-calendar"></i></span>';
  34. echo ' </div>';
  35. echo ' </div>';
  36. echo '</div>';
  37. }

trueblue
Z Twojego kodu nigdzie nie wynika co tak naprawdę (i gdzie ustalasz) zawierają elementy tablicy $row.
imie_nazwisko
Do tablicy tab trafia wynik zapytania MySQL.
Nie wstawilem tego fragmentu kodu poniewaz uwazam ze jest nieistotny
trueblue
Wrzuć jednak przed linią 6:
  1. var_dump($row);

i pokaż jaki będzie tego wynik.
imie_nazwisko
  1. array(13) { [0]=> string(2) "No" [1]=> string(2) "No" [2]=> string(2) "No" [3]=> string(3) "Yes" [4]=> string(3) "Yes" [5]=> string(3) "Yes" [6]=> string(3) "Yes" [7]=> string(4) "2250" [8]=> string(5) "asdad" [9]=> string(0) "" [10]=> string(0) "" [11]=> string(0) "" [12]=> string(0) "" }
trueblue
Czy w takim razie jeśli jeden element ma "No", to pozostałe niezależnie jaką mają wartość i tak mają przechodzić walidację?
imie_nazwisko
Powinno być sprawdzane pole tekstowe w formularzu dla które przypisane jest YES w row np.

Gdy row[0]=Yes & row[1]=Yes & row[2]=Yes sprawdzane powinno być każde pole tj. plec, zawod, kraj
Gdy row[0]=No & row[1]=Yes & row[2]=Yes sprawdzane powinno być pole zawod oraz kraj
Gdy row[0]=No & row[1]=No & row[2]=Yes sprawdzane powinno być wyłącznie pole kraj
Gdy row[0]=No & row[1]=Yes & row[2]=No sprawdzane powinno być wyłącznie pole zawód
itd

Napisany przeze mnie kod JS sprawdza wszytskie pola niezaleznie od wartości w row.

Aby rozwiazać problem postanowiłem zmodyfikować kod JS:

  1. <script LANGUAGE= "JavaScript" type= "text/javascript">
  2. function validateForm(rejestracja){
  3.  
  4. var tekst='';
  5. alert ("abc1");
  6. if (rejestracja.plec.value==""){tekst=tekst+"- plec\n";}
  7. alert ("abc2");
  8. if (rejestracja.zawod.value==""){tekst=tekst+"- zawód\n";}
  9. alert ("abc3");
  10. if (rejestracja.kraj.value =="" ){tekst=tekst+"- kraj\n";}
  11. alert ("abc4");
  12. if (tekst!="") {alert ("Błąd #882: \nNie uzupełniłeś następujących pól: \n\n"+tekst);
  13. return false;
  14. } else {
  15. return true;
  16. }
  17. }
  18.  


Nastepnie sprawdzilem zachowanie skryptu w przypadku gdy wartosc row[0]="Yes", row[1]="No" i row[2]="Yes".
Zgodnie z tym co napisalem wyzej skrypt powinien sprawdzić czy pole "plec" lub "kraj" jest wypelnione, i wyswietlic alert abc1, abc2, abc3, abc4 i jeśli pole plec lub kraj nie jest wypelnione to zwrocić błąd.

Dzieje się inaczej: Wyświetla się wylacznie alert abc1 i abc2. Skrypt prawdopodobnie "krzaczy" przy rejestracja.zawod.value=="" poniewaz pole zawod nie istnieje.

Moje pytanie - czyistnieje jakis warunek sprawdzajacy istnienie "rejestracja.zawod.value" ?
trueblue
Czekaj, ale ta walidacja ma pośredni związek z warunkami w skrypcie PHP.
W zależności od Yes lub No, drukujesz na ekranie odpowiednie pola w tym skrypcie, a nie robisz ich walidację na poziomie PHP.
W JS sprawdzasz wszystkie pola, nawet jeśli w PHP wydrukujesz tylko jedno.
Albo w JS powinieneś sprawdzać pola, które istnieją, albo w PHP drukować wszystkie.

P.S. Oprócz tego powinieneś zrobić walidację na poziomie PHP, czyli użyć Yes lub No, nie do uwarunkowania drukowania pola, ale właśnie walidacji (w PHP).
imie_nazwisko
Cytat(trueblue @ 14.11.2014, 08:35:07 ) *
w JS powinieneś sprawdzać pola


Jak to zrobić?
trueblue
  1. if(rejestracja.zawod!==undefined){
  2. //
  3. }
imie_nazwisko
Problem rozwiązany. Dziękuje za pomoc.
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.