Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Создание теста (https://javascript.ru/forum/server/26775-sozdanie-testa.html)

KamalovRadik 21.03.2012 22:28

Создание теста
 
Хочу создать тест. В БД имею 200 вопросов, по 3-4 вариантов ответа в каждом. Выводить буду случайных 20 вопросов.

Вопрос: Как отвечать пользователю и как его ответы потом сравнить с правильными ответами? Перед каждым вариантом ответа поставить радио-кнопку, то как это связать с вариантами ответов. Как и где лучше хранить правильный ответ? + расположение вариантов ответа всегда меняется.

melky 21.03.2012 23:05

создать таблицу с "пользователями".

когда посетитель сайта заходит на сайт - ему присваивается кука (сессия, пущай), и он становится "пользователем"

он отвечает на вопросы, а в базе в отдельной таблице сохраняется : ID (кука) пользователя, и его варианты ответов.

когда он через время заходит на сайт, читаете куку и "авторизируете" его.

PS облагородьте куку, чтобы даже если её и спёрли, то вор не смог бы авторизироваться под чужой кукой.

PSS если не хотите морочиться с таким видом авторизации\регистрации, введите её настоящую - с именем и паролем.

T-sh 22.03.2012 01:33

1. Как отвечать пользователю и как его ответы потом сравнить с правильными ответами? Перед каждым вариантом ответа поставить радио-кнопку, то как это связать с вариантами ответов.

Да, можно радио-батон и из формы отправлять значения в обработчик, можно просто списком, а по клику с помощью js обрабатывать и формировать массив, который потом также отправлять в обработчик.

Связать с вариантами ответов просто:
<span>Вопрос 1: Кто шел по шоссе?</span>
   <input type="radio" name="vopros_1" value="Masha"> Маша<Br>
   <input type="radio" name="vopros_1" value="Petya"> Петя <Br>
   <input type="radio" name="vopros_1" value="Gadya"> Гадя Петрович<Br>
....
   <span>Вопрос 5: Кто убил Кенни?</span>
   <input type="radio" name="vopros_5" value="Vasya"> Вася<Br>
   <input type="radio" name="vopros_5" value="Kolya"> Коля <Br>
   <input type="radio" name="vopros_5" value="Grisha"> Гриша<Br>
...


2. Как и где лучше хранить правильный ответ?
В базе данных, естественно :) Создаешь таблицу:
id;
номер вопроса;
текст вопроса;
вариант ответа 1;
вариант 2;
вариант 3;
вариант 4;
правильный ответ;


и вторую таблицу для пользователей:
id (id сессии / имя / email — не важно, любой идентификатор );
answers; в формате № вопроса : ответ; № вопроса : ответ; .... № вопроса : ответ;



Ну, а потом остается сначала записать полученные ответы в базу, а потом достать их оттуда и сравнить :) А если не нужно хранение ответов пользователя, то лучше сразу собрать все его ответы, и сравнить с теми, что есть в таблице вопросов. Не сохраняя ничего.

Но если сохранять, есть большой плюс, при следующем посещении можно вывести пользователю вопросы, на которые он ещё не отвечал, т.е. уже будут известны номера отвеченных вопросов :)

T-sh 22.03.2012 09:39

Цитата:

Сообщение от nasqad (Сообщение 164372)
questions
 - id
 - body
answers
 - id
 - question_id
 - body
 - istrue
user_answers
 - user_id
 - question_id
 - answer_id

голосую за такой вариант, не силен в конструировании бд, просто жду критики

этот вариант хорош, когда не знаешь, сколько вариантов ответа будет на каждый вопрос, а у автора вроде как точное значение.

имхо, не вижу смысла создавать в данном случае ещё одну таблицу ) если только для того, чтоб самому удобнее было ориентироваться в базе.

KamalovRadik 23.03.2012 02:18

id;
номер вопроса;
текст вопроса;
вариант ответа 1;
вариант 2;
вариант 3;
вариант 4;
правильный ответ;


Не совсем понятно для чего использование номер вопроса если есть id.

<input type="radio" name="vopros_5" value="Vasya"> Вася<Br>

Из данной таблицы что помещать в value? Весь вариант ответа? Не слишком ли много информации придется передавать обработчику?

А если посмотреть какой вариант ответа правильный и дать ему номер в БД, то как решить вопрос, что порядок вариантов ответа будет меняться.


Часовой пояс GMT +3, время: 19:20.