Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Walidacja formularza
imie_nazwisko
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 6.08.2010

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


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. }

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

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


Z Twojego kodu nigdzie nie wynika co tak naprawdę (i gdzie ustalasz) zawierają elementy tablicy $row.
Go to the top of the page
+Quote Post
imie_nazwisko
post
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 6.08.2010

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


Do tablicy tab trafia wynik zapytania MySQL.
Nie wstawilem tego fragmentu kodu poniewaz uwazam ze jest nieistotny
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

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


Wrzuć jednak przed linią 6:
  1. var_dump($row);

i pokaż jaki będzie tego wynik.
Go to the top of the page
+Quote Post
imie_nazwisko
post
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 6.08.2010

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


  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) "" }
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

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


Czy w takim razie jeśli jeden element ma "No", to pozostałe niezależnie jaką mają wartość i tak mają przechodzić walidację?
Go to the top of the page
+Quote Post
imie_nazwisko
post
Post #7





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 6.08.2010

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


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" ?

Ten post edytował imie_nazwisko 14.11.2014, 06:41:15
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

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


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).
Go to the top of the page
+Quote Post
imie_nazwisko
post
Post #9





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 6.08.2010

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


Cytat(trueblue @ 14.11.2014, 08:35:07 ) *
w JS powinieneś sprawdzać pola


Jak to zrobić?
Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 807
Pomógł: 1828
Dołączył: 11.03.2014

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


  1. if(rejestracja.zawod!==undefined){
  2. //
  3. }
Go to the top of the page
+Quote Post
imie_nazwisko
post
Post #11





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 6.08.2010

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


Problem rozwiązany. Dziękuje za pomoc.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 04:03