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.
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Pytania</title>
</head>
<body>
<?php
// Sprawdź grupy przycisków "radio"
function spr_rad($n, $tbl) {
// Nie wybrano nic w grupie "i" -> elem. "i" nie ma w tabl.
for ($i = 1; $i <= $n; $i++) {
return false; // brak odp. na pyt. "i"
}
return true; // OK
} // spr_rad
// sprawdź pola tekstowe (mogą mieć pustą treść)
function spr_txt($tbl) {
foreach ($tbl as $tt) {
return false; // brak odp.
}
return true; // OK
} // spr_txt
// Jak wywołano stronę
$rqm = $_SERVER['REQUEST_METHOD'];
if ($rqm == 'POST') {
// czytaj dane z formularza
$wyb = $_POST['wyb'];
$pt = $_POST['pt'];
// echo '<pre>'; print_r($_POST); echo '</pre>';
$wyn = true; // wynik sprawdzenie
// sprawdź grupy pól "radio" (w form. są 2)
if (!spr_rad(2, $wyb)) {
$wyn = false;
$tt[] = 'Wypełnij wszystkie pola jednokrotnego wyboru';
}
// sprawdź pola tekstowe
if (!spr_txt($pt)) {
$wyn = false;
$tt[] = 'Wypełnij wszystkie pola tekstowe<br />';
}
if ($wyn) {
echo 'Kontrola - OK<br />'; } else {
}
}
?>
<h2>Kwestionariusz</h2>
<form action="
<?php echo $_SERVER['PHP_SELF']; ?>"
method="post" name="frm1">
<p>Wybierz jedną odpowiedź</p>
<table border="1" cellspacing="2" cellpadding="2">
<tr>
<td>Pytanie 1<br />
<input type="radio" name="wyb[1]" value="1" /> Odp. pierwsza<br />
<input type="radio" name="wyb[1]" value="2" /> Odp. druga<br />
<input type="radio" name="wyb[1]" value="3" /> Odp. trzecia
</td>
<td>Pytanie 2<br />
<input type="radio" name="wyb[2]" value="1" /> Odp. pierwsza<br />
<input type="radio" name="wyb[2]" value="2" /> Odp. druga<br />
<input type="radio" name="wyb[2]" value="3" /> Odp. trzecia
</td>
</tr>
</table>
<p>Pytania tekstowe</p>
<table border="1" cellspacing="2" cellpadding="2">
<tr><td>Pyt. pierwsze</td><td><input type="text" name="pt[]" /></td></tr>
<tr><td>Pyt. drugie</td><td><input type="text" name="pt[]" /></td></tr>
<tr><td>Pyt. trzecie</td><td><input type="text" name="pt[]" /></td></tr>
<tr><td>Pyt. czwarte</td><td><input type="text" name="pt[]" /></td></tr>
</table>
<p><input type="submit" value="Zapisz" /></p>
</form>
</body>
</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.