Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][PHP]sprawdzenie, czy wypełniono pola formularza - problem
hyhyhy
post
Post #1





Grupa: Zarejestrowani
Postów: 135
Pomógł: 5
Dołączył: 6.02.2011

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


Mam taki problem: mam stronę z dość obszernym formularzem (generator quizu) no i chciałbym uniemożliwić pozostawienie pustych pół. Mam dwa kody: jeden działający i jeden nie. Ten drugi dotyczy większej liczby elemtntów, ale wydaje mi się taki sam, czy ktoś mógłby mi podpowiedzieć, co jest nie tak? Dodam, że problem jest taki, że IF się nie wykonuje (tzn zachowuje się tak, jakby $wypelniono zawsze mialo true, nawet kiedy pola są kompletnie puste)

kod, który działa:
  1. $wszystko_wpisane = true; //-------
  2. for ($x=0;$x<10;$x++)
  3. {
  4. trim($tekst[$x]);
  5. $tekst[$x] = mysql_real_escape_string(htmlspecialchars($tekst[$x]));
  6. if (empty($tekst[$x]) == true) {$wszystko_wpisane = false;}
  7. }
  8.  
  9. if ($wszystko_wpisane == false) {echo 'Blad! uzupelnij wszystkie pola!';}
  10. else { //jesli uzupelniono, dalsze instrukcje


No i teraz na tej podstawie zrobiłem kod, z którym mam problem:

  1. function sprawdzanie($liczba_obiektow, $obiekt)
  2. {
  3. for ($q=0;$q<$liczba_obiektow;$q++)
  4. {
  5. if (empty($obiekt[$q]) == true) {$wypelniono = false;}
  6. }
  7. return $wypelniono;
  8. }
  9.  
  10. $wypelniono = true;
  11. sprawdzanie($liczba_pyt, $pytanie[$q]);
  12. sprawdzanie($liczba_odp, $odpowiedz[$q]);
  13. sprawdzanie($liczba_wynik, $wynik[$q]);
  14.  
  15. if ($wypelniono == true)
  16. { dalsze instrukcje - wykonują się zawsze, nigdy nie wchodzi else}
  17. else { echo 'Blad, uzupelnij wszystkie pola!';}


Czy ktoś mógłby mnie naprowadzić? Bo nie widzę różnicy między nimi dwoma, a tylko drugi nie działa...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Valdi_B
post
Post #2





Grupa: Zarejestrowani
Postów: 107
Pomógł: 30
Dołączył: 19.02.2011
Skąd: Warszawa

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


Wczorajszy post pisałem z myślą o kontroli odpowiedzi tekstowych (do pola trzeba coś wpisać).

Dopiero teraz skojarzyłem, że w formularzu masz chyba także pytania jednokrotnego wyboru (wybrać jeden z przycisków "radio").
W takich przypadkach kontrolować trzeba z grubsza tak jak miałeś na początku - czy jest dany element w tablicy.

Co do pól opcji - chyba nie ma jak kontrolować "czy wypełniono", bo oba warianty (zaznaczono / nie zaznaczono) to jest jakaś odpowiedź.

Załączam chodzący przykład z dwoma wariantami kontroli - pól tekstowych i grup pól opcji. Porównaj konwencję nadawania "name" polom, czy masz tak samo u siebie.
  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  4. <title>Pytania</title>
  5. </head>
  6.  
  7. <body>
  8. <?php
  9. // Sprawdź grupy przycisków "radio"
  10. function spr_rad($n, $tbl) {
  11. // Nie wybrano nic w grupie "i" -> elem. "i" nie ma w tabl.
  12. for ($i = 1; $i <= $n; $i++) {
  13. if (!isset($tbl[$i]))
  14. return false; // brak odp. na pyt. "i"
  15. }
  16. return true; // OK
  17. } // spr_rad
  18.  
  19. // sprawdź pola tekstowe (mogą mieć pustą treść)
  20. function spr_txt($tbl) {
  21. foreach ($tbl as $tt) {
  22. if (strlen($tt) == 0)
  23. return false; // brak odp.
  24. }
  25. return true; // OK
  26. } // spr_txt
  27.  
  28. // Jak wywołano stronę
  29. $rqm = $_SERVER['REQUEST_METHOD'];
  30.  
  31. if ($rqm == 'POST') {
  32. // czytaj dane z formularza
  33. $wyb = $_POST['wyb'];
  34. $pt = $_POST['pt'];
  35.  
  36. // echo '<pre>'; print_r($_POST); echo '</pre>';
  37.  
  38. $wyn = true; // wynik sprawdzenie
  39. // sprawdź grupy pól "radio" (w form. są 2)
  40. if (!spr_rad(2, $wyb)) {
  41. $wyn = false;
  42. $tt[] = 'Wypełnij wszystkie pola jednokrotnego wyboru';
  43. }
  44. // sprawdź pola tekstowe
  45. if (!spr_txt($pt)) {
  46. $wyn = false;
  47. $tt[] = 'Wypełnij wszystkie pola tekstowe<br />';
  48. }
  49. if ($wyn) {
  50. echo 'Kontrola - OK<br />';
  51. } else {
  52. echo 'Błędy:<br />' . implode('<br />', $tt);
  53. }
  54. }
  55. ?>
  56. <h2>Kwestionariusz</h2>
  57. <form action="<?php echo $_SERVER['PHP_SELF']; ?>"
  58. method="post" name="frm1">
  59. <p>Wybierz jedną odpowiedź</p>
  60. <table border="1" cellspacing="2" cellpadding="2">
  61. <tr>
  62. <td>Pytanie 1<br />
  63. <input type="radio" name="wyb[1]" value="1" /> Odp. pierwsza<br />
  64. <input type="radio" name="wyb[1]" value="2" /> Odp. druga<br />
  65. <input type="radio" name="wyb[1]" value="3" /> Odp. trzecia
  66. </td>
  67. <td>Pytanie 2<br />
  68. <input type="radio" name="wyb[2]" value="1" /> Odp. pierwsza<br />
  69. <input type="radio" name="wyb[2]" value="2" /> Odp. druga<br />
  70. <input type="radio" name="wyb[2]" value="3" /> Odp. trzecia
  71. </td>
  72. </tr>
  73. </table>
  74. <p>Pytania tekstowe</p>
  75. <table border="1" cellspacing="2" cellpadding="2">
  76. <tr><td>Pyt. pierwsze</td><td><input type="text" name="pt[]" /></td></tr>
  77. <tr><td>Pyt. drugie</td><td><input type="text" name="pt[]" /></td></tr>
  78. <tr><td>Pyt. trzecie</td><td><input type="text" name="pt[]" /></td></tr>
  79. <tr><td>Pyt. czwarte</td><td><input type="text" name="pt[]" /></td></tr>
  80. </table>
  81. <p><input type="submit" value="Zapisz" /></p>
  82. </form>
  83. </body>
  84. </html>
Warianty kontroli są 2 (a nie 3), bo nie rozumiem o co chodzi z kontrolą samych pytań. Pytania wstawia do formularza Twój skrypt, a użytkownik nic w nich nie zmieni, ma na nie tylko odpowiedzieć.
Dlatego uważam, że kontrolować można tylko odpowiedzi.

Jeszcze jedno: W swoim skrypcie dodaj print_r($_POST).
Jak widzisz jakie dane dostajesz, to łatwiej napisać program ich kontroli.
Go to the top of the page
+Quote Post

Posty w temacie


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: 27.08.2026 - 20:44