Test wielokrotnego wyboru

0

Mam problem ze zliczaniem wyników z testu wielokrotnego wyboru (checkbox). Mianowicie przykładowo do pytania mam 3 odpowiedzi i jeśli zaznaczę wszystkie lub 2 i jedna z nich jest prawidłowa to uzyskuję 1 punkt a chciałbym, żeby w przypadku zaznaczenia złej i dobrej odpowiedzi dawało 0 punktów.
formularz:

 <form action="wyniki.php" method="POST">
<?php
include "connection.php";
$sql = "SELECT * FROM pytania";	
$query = mysql_query($sql) or die(mysql_error());	
$i=0;
$k=0;       
echo "<table>";
echo "<tr>";
?>

<?php
while($row = mysql_fetch_array($query)) 
{ 
    $idt = $row['idt'];
    $pytanie = $row['pytanie'];    
    $wybor1 = $row['wybor1'];
    $wybor2 = $row['wybor2'];
    $wybor3 = $row['wybor3'];        
    $odpowiedz = $row['odpowiedz'];
    if ($k % 1 == 0 && $k != 0 )
    {
      echo '</tr><tr>';
    }

?>
<?php echo "<td>";
echo $pytanie . "<br/>";
echo '<input type="checkbox" name="checkbox'.$i.'" value=1 />' .$wybor1 . '<br />';
echo '<input type="checkbox" name="checkbox'.$i.'" value=2 />' .$wybor2 . '<br />';
echo '<input type="checkbox" name="checkbox'.$i.'" value=3 />' .$wybor3 . '<br />';
$i++;
$k++;
}        

echo "</td>";
echo "</tr>";
echo "</table>";
?>
<tr><td>
<br/>
<center><input type=submit name="submit" value="Wyniki"/></center><br/>
</td></tr>
</form>

wyniki.php:

<?php include 'connection.php';
$zapytanie = ('SET NAMES utf8');
$w = mysql_query($zapytanie) or die(mysql_error());
$i=0;
$k=0;
$wynik=0;
$sql = "SELECT * FROM pytania";	
$query = mysql_query($sql) or die(mysql_error());
 
	while($row = mysql_fetch_array($query)) 
{ 
    $idt = $row['idt'];
    $pytanie = $row['pytanie'];
    $wybor1 = $row['wybor1'];
    $wybor2 = $row['wybor2'];
    $wybor3 = $row['wybor3'];        
    $odpowiedz = $row['odpowiedz'];
    $wybor = $row['wybor'.$_POST['checkbox'.$i]];
	
	if ($wybor == $odpowiedz)
	{
		$wynik++;		
	}
	else
	{
		
	}
	if ($k % 1 == 0 && $k != 0 )
	{
    echo '<br/>';
	}
	echo '<b>Pytanie:&nbsp;</b>' .$pytanie .'<br/>';
	echo '<b>Twoja odpowiedź:&nbsp;</b>' . $wybor . '<br />';
	echo '<b>Prawidłowa odpowiedź:&nbsp;</b>' .$odpowiedz .'<br/>';
	

	$k++;
	$i++;
}
echo "<br/>";
echo "<h2><font color='red'>Twój wynik:&nbsp;" .$wynik . '/' . $i . ' ! '."</h2>";
?> 

Moja tabela ma postać: idt|pytanie|wybor1|wybor2|wybor3|odpowiedz

0

Po pierwsze po co sobie tak komplikujesz? Trzymaj w bazie jak najmniej tekstu. Bez sensu jest aby w bazie była poprawna odpowiedź jako string. Poza tym jakoś za dużo stringów tam generujesz. Nie łatwiej będzie jeśli jako name dla checkbox'ów dasz po prostu id pytania? A co jeśli ktoś nie odpowie na jakieś pytanie? A wracając do Twojego pytania wynik dla pytania trzymaj w osobnej zmiennej w której na początku będzie null. Następnie jeśli ktoś zaznaczy złą odpowiedź ustaw tą zmienną na 0. Następnie przy dobrej odpowiedzi sprawdź czy zmienna nie jest inna niż null. Jeśli jest to nic nie rób jeśli nie jest (żadna zła odpowiedź nie była wybrana) ustaw ją na 1. Potem sprawdź dzieleniem modulo przez 3 ($i % 3 == 0) czy wynik jest równy 0 (co będzie oznaczało ostatnią odpowiedź dla pytania) i wynik tej innej zmiennej (oczywiście najpierw sprawdź czy nie jest równe null, jeśli jest nic nie rób - będzie to znaczyło że user nie wybrał żadnej odpowiedzi) dopisz do ogólnej sumy pkt.
Ale z góry Ci mówię że jest to droga pod górkę. Pomyśl jak to można zrobić lepiej.

0

Eh już męcze się z tym kilka godzin i nie mogę zrobić...

1 użytkowników online, w tym zalogowanych: 0, gości: 1