Сделал тесты, без БД и файлов и ответов нету в браузере.
Попытался сделать структуру массива, приближённую к структуре БД.
Оцените пожалуйста.
Задача:
Дан массив с вопросами и правильными ответами. Пользователь должен выбрать один и вариантов. Когда вопросы заканчиваются - он жмет на кнопку, страница обновляется и вместо вариантов под вопросами появляется сообщение вида: 'ваш ответ: ... верно!' или 'ваш ответ: ... неверно! Правильный ответ: ...'. Правильно отвеченные вопросы должны гореть зеленым цветом, а неправильно - красным.
В массив можно сколько угодно засунуть тестов и в сам код обработки, лезть не придётся.
$questions = [
1 => [
'question' => 'Сколько будет 2+2?',
'variants' => ['2', '4', '6'],
'answer' => '1'
],
2 => [
'question' => 'Сколько будет 5+5?',
'variants' => ['10', '55', '25'],
'answer' => '0'
],
3 => [
'question' => 'Зимой и летом, одним цветом?',
'variants' => ['Крокодил', 'трава'],
'answer' => '0'
]
];
if(empty($_GET['proverka'])) {
echo '<form action="" method="get">';
$i = 1;
foreach($questions as $num) {
foreach($num as $dano => $v) {
if(gettype($v) == 'array') {
$j = 0;
foreach($v as $val) {
echo '<label>'.$val.'<input type="radio" name="'.$i.'" value="'.$j.'"></label> ';
$j++;
}
}
echo '<br>';
if($dano == 'question') {
echo $v . '<br>';
}
}
$i++;
}
echo '<br>';
echo '<input type="submit" name="proverka" value="Проверить">';
echo '</form>';
}
if(!empty($_GET['proverka'])) {
if(count($_GET)-1 < count($questions)) {
echo 'Ответьте на все вопросы.';
}
else {
$k = 1;
foreach($questions as $num) {
foreach($num as $dano => $v) {
if($dano == 'answer') {
if($_GET[$k] == $v) {
echo $questions[$k]['question'] .'<br> <span style="color: green; font-weight: bold;">Ваш ответ '.$questions[$k]['variants'][$_GET[$k]].' - правильно</span><br><br>';
}
else {
echo $questions[$k]['question'] .'<br><span style="color: red; font-weight: bold;">Ваш ответ '.$questions[$k]['variants'][$_GET[$k]].' - неправильно, правильный ответ: '.$questions[$k]['variants'][$questions[$k]['answer']].'</span><br><br>';
}
}
}
$k++;
}
}
}