Это не очень хорошая идея, поскольку любой, кто смотрит на источник HTML, может понять, какой ответ правильный. С другой стороны, у вас есть вся информация в вашей схеме, чтобы сделать это на стороне сервера (и защитить ответы).
Время вопроса
Я предполагаю (вы не говорите), что вы хотите показать все вопросы викторины на одной странице. Вы хотите, чтобы ваша форма отправлялась обратно на страницу по умолчанию quiz.php
. (<form method="post" action="quiz.php" />
)
Поскольку quiz.php
может обрабатывать любые опросы, вам необходимо встроить идентификатор опроса в форму, чтобы при обработке результатов вы могли видеть, на какой тест ответили. Попробуйте <input type="hidden" name="quizid" value="1" />
(при условии, что это был тест № 1).
Вам также необходимо четко указать порядок, в котором вы вытаскиваете свои вопросы из базы данных, поскольку они переключаются с идентификатора на порядок (поэтому, если у вас есть тест из 10 вопросов, первый с идентификатором 11, последний с ID 21, они станут вопросом 1-10). Это легко обрабатывается order by id
в вашем операторе SQL.
Вывод вопроса в порядке, значения радиосвязи должны быть идентификатором выбора из question_choices
.. все значения будут уникальными, и это не ясно из кода, который является правильным ответ. Я бы предложил переименовать элементы в a_<#>
, поскольку, когда вы обрабатываете, они на самом деле получают ответы (а не вопросы), и вы, возможно, захотите рассмотреть вопрос о выборе вариантов + в fieldset
(для удобства чтения). ):
<fieldset>
<b>What was the make/model of my first car?</b><br />
<input type="radio" value="214" name="a_1">Toyota Camry <br />
<input type="radio" value="215" name="a_1">Honda Accord <br />
<input type="radio" value="216" name="a_1">Ford Explorer <br />
<input type="radio" value="217" name="a_1">Plymouth Voyager <br />
</fieldset>
Во время отправки я бы подтвердил, что для всех вопросов выбран хотя бы один вариант (если ответ также не является ответом) ... так что пользователь не может случайно отправить наполовину заполненную форму (нажав клавишу ввода или потому что они пропустили вопрос).
Время ответа
Итак, первым делом в quiz.php
нужно перехватить $_POST["quizid"]
и загрузить связанные вопросы и вопросники из базы данных.
Затем выполните итерацию по каждому ответу (1 -> n, где n - количество вопросов) и сопоставьте их с question.ID
значениями.
Сравните значение каждого ответа: $_POST["a_#"]
(# = 1-n), чтобы узнать, какой question_choice
ID выбрал пользователь - который может быть непосредственно вставлен в user_question_answer
.
Если вы также хотите сохранить is_right
в этой таблице, вам придется сравнить эти идентификаторы с question_choice
, чтобы увидеть, установлено ли is_right_choice
{вы на самом деле дважды сохраняете эти данные, вы можете нормализовать дальше, удаление is_right
из user_question_answer
, поскольку вы уже можете сопоставить ответ (choice_id
) с question_choices
и проверить, был ли он правильным}
И все готово!