[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Онлайн тест
gidrosoldat
Доброе время суток, господа программисты )
Недавно появилась потребность сделать систему тестирования - попросту выбор одного правильного варианта из нескольких предложенных, 20 вопросов, под конец подробный отчет.
Сделал, можете вот тут глянуть что бы понять о чем я говорю.
Данные передаю через $_GET параметры:
tid - номер теста
num - счетчик вопросов
limit - количество вопросов в тесте (когда num и limit уравниваются показываю результат).
rand - сгенерированный список случайных вопросов (каждый раз пользователю выдаются определенное количество случайных вопросов).
res - через этот параметр передаются ответы пользователя, что бы под конец тестирования их обработать и выдать результат.
Почему $_GET, а не $_POST спросите вы? Потому что, я хотел сделать передачу данных одним кликом, без всяких радио кнопок и галочек. Поэтому каждый ответ у меня по сути ссылка с кучей $_GET данных. Как вариант было бы использование $_POST, <form> и submit кнопок, но в них (кнопках) нельзя вписать многострочный текст. Надеюсь вы улавливаете мою мысль ))
Как вы оцениваете такую конструкцию? Удачна ли она или ее как то надо переделать?

Ну пока все работает, и посетители вроде бы довольны. Но... Дело в том, что люди проходят этот тест по несколько раз, а значит какие то вопросы могут повторятся, ибо действует обычная случайная выборка.
Появилась идея для зарегистрированным пользователям добавить фишку - установить контроль правильных ответов и в дальнейшем выдавать вопросы только те, на которые пользователь еще не отвечал либо ответил неправильно. Эдакий вариант пройти тест "от корки до корки".
Для этого можно завести отдельную таблицу (tid, uid, correct_question_list) с номером теста, номером пользователя и списком вопросов на которые пользователь ответил верно.
Теперь как в связи с этим формировать запрос в БД?
Что если вот так?
SELECT * FROM `test_questions`
WHERE id NOT IN (".$correct_question_list.")
ORDER BY FIELD(id, ".$correct_question_list.")

Потом уже перемешивать этот массив, выбирать определенное количество и скармливать пользователю.
Удачная ли это конструкция или можно сделать изящнее и проще?





Спустя 25 минут, 37 секунд (9.04.2011 - 10:26) Trianon написал(а):
списки в SQL-таблицах хранятся построчно. По одному элементу на строку.
так что в две таблицы.
answered_tests (
id ,
test_id ,
user_id
)

answered_questions (
answ_test_id,
question_id
)


В принципе можно слить и в одну, но я бы не стал без вящей надобности.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.