Использование PHP и MySQL для заполнения формы веб-приложения Quiz - PullRequest
0 голосов
/ 25 августа 2011

Вот дизайн базы данных http://www.flickr.com/photos/michaelstitt/6077647604/in/photostream/, который я выбрал - используя справку из моего предыдущего поста о переполнении стека .

Я пытаюсь создать веб-приложение Quiz, используя PHP и MySQL. Кажется, намного проще создать HTML-форму и вручную написать «question» и «question_choices». Тем не менее, я хотел бы заполнить форму, используя данные в моей базе данных.

Итак, мой вопрос как вы предлагаете мне извлекать данные из таблиц 'question' или 'question_choices' из моей базы данных для заполнения форм HTML?

HTML-формы будут выглядеть примерно так:

<form method="post" action="quiz1.php">

    <b>What was the make/model of my first car?</b>
    <br>
    <input type="radio" value="0" name="q_1">
    Toyota Camry <br />
    <input type="radio" value="1" name="q_1">
    Honda Accord <br />
    <input type="radio" value="0" name="q_1">
    Ford Explorer <br />
    <input type="radio" value="0" name="q_1">
    Plymouth Voyager <br />

Honda Accord будет получена из столбца «выбор» в таблице question_choices. Значение = «1» будет определено столбцом «is_right_choice» и заполнит столбец «is_right» в таблице user_question_answer. Это кажется хорошей идеей?

Любой другой совет будет принят с благодарностью. Заранее спасибо.

1 Ответ

1 голос
/ 25 августа 2011

Это не очень хорошая идея, поскольку любой, кто смотрит на источник 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 и проверить, был ли он правильным}

И все готово!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...