![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 12.12.2010
Сообщений: 8
|
![]()
Здравствуйте. Не знаю, сюда ли пишу, но попробую спросить здесь. Есть самописная система тестирования пользователей, все работает уже второй год. Пользователю случайно из базы дается 10 вопросов по определенной тематике с 4 вариантами ответа, он с помощью radio выставляет ответы, затем после сабмита формы они проверяются и пользователю выставляется оценка. На один вопрос - один ответ. Проблема в том, что сейчас стоит задача сделать некоторые вопросы с несколькими вариантами ответа, то есть с чекбоксами. Данные о тестировании хранятся в базе в виде: id_пользователя, категория вопросов, дата тестирования, оценка. В другой таблице id_пользователя и id всех вопросов, которые выпали на тесте. Ну и непосредственно таблица с вопросами: id, категория, текст вопроса, вариант1, вариант2, вариант3, вариант4, номер верного варианта.
Вопрос: как минимальными усилиями добавить возможность выбора нескольких вариантов у некоторых из вопросов и сохранения результата в базу? Пока идея такая: для каждого вопроса в таблице добавить поле, определяющее, имеет ли вопрос один ответ или несколько. Затем при выводе этого вопроса на основании этого поля выводить либо radio, либо checkbox'ы. А вот как обработать и сохранить результат без глобальных переделок? Буду благодарен за любую идею. При необходимости дам дополнительные данные по структуре базы. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,184
|
![]()
как то странно, глобальные изменения хотите - но без глобальных изменений кода.
я бы сделал так: таблица с вопросами: id, категория, текст вопроса, другие вспомогательные поля таблица ответов: id, id_вопроса, текст ответа, признак - верный/неверный, либо если нужно в дальнейшем например баллы... типа на ответ два верных ответа, но один более важен чем другой... тогда за один 0.4 за другой 0.6 ..... за полностью верный ответ получается берем сумму = 1, |
![]() |
![]() |
![]() |
#3 |
Регистрация: 12.12.2010
Сообщений: 8
|
![]()
Спасибо за ответ. Предложение хорошее, больше интересует, как правильно обработать форму? То есть, в вопросах где-то будут чекбоксы, где-то радио. Как их корректно передать php-скрипту? лепить кучу условий "если тип вопроса - с несколькими вариантами, то считать переданные чекбоксы, сравнить с ответами в базе, определить верность ответа", иначе просто считать радио и сравнить с верным вариантом. Получается так?
Можно, конечно, поступить кардинально - запилить ВСЕ вопросы с чекбоксами и возможностью нескольких ответов, но это не совсем верно, я считаю... |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,184
|
![]()
а чего куча то? одно условие - смотришь тип вопроса - в зависимости от этого показываешь чекбоксы или радио
в форме смотри тип вопроса по его ид, в зависимости от результата - считаешь так или эдак |
![]() |
![]() |
![]() |
#5 |
Регистрация: 12.12.2010
Сообщений: 8
|
![]()
Хорошо. А как хранить результат ответов в базе? Сейчас поля организованы так:
user_id answer_1 answer_2 ... answer_10 По завершении теста в поля answer_X заносятся номера ответов пользователя на соответствующие вопросы. Как тогда хранить двойной ответ с чекбоксов? |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,184
|
![]()
user_id ид_вопроса ид_ответа
в случае если одиночный ответ - будет одна запись, если более одного - несколько |
![]() |
![]() |
![]() |
#7 |
Регистрация: 12.12.2010
Сообщений: 8
|
![]()
Тоже была такая идея. Спасибо за подсказку, пошел делать...
|
![]() |
![]() |
![]() |
#8 |
Регистрация: 12.12.2010
Сообщений: 8
|
![]()
Сделал немного иначе, может кому пригодится. Каждому варианту ответа в чекбоксе присвоил значения 1,2,4,6(баллы), комбинация ответов пользователя при проверке преобразуется в сумму баллов, и сравнивается с контрольным числом для этого вопроса. Из числа путем нехитрых вычислений всегда можно получить выбранные пользователем варианты. Изменений в структуре базы минимум - добавил поле, определяющее, сколько вариантов ответа может быть у вопроса.
P.S. Спасибо Линукс с ее правами доступа, натолкнуло на вариант решения. |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
немного костыли, но можно и так.
только исправьте, если тут не опечатались так должны быть степени двойки. 1 2 4 8 16 32 и т.д. только тогда контрольное число можно корректно разложить на составляющие ответа. При этом даже не обязательно хранить количество правильных ответов. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
хочу реализовать аудио систему с одинаковым звуком по всей квартире с несколькими входами | Alar | Компьютерное железо | 0 | 20.06.2016 18:25 |
Нужен задачник с ответами. | kyle16 | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 30.01.2016 21:18 |
Программа. Delphi 7: Есть 10 панелей с вопросами и 10 панелей с ответами ,ответы и вопросы загружаются из файла,перемешиваются... | Kolya23 | Помощь студентам | 5 | 05.10.2015 21:57 |
Вытащить вопросы и ответы из программы тестирования. | Виталий) | Помощь студентам | 1 | 08.02.2013 19:40 |
Работа с несколькими формами. Вопросы. | Вадим Мошев | Общие вопросы Delphi | 2 | 12.11.2010 13:39 |