|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.06.2018, 05:40 | #1 |
Регистрация: 12.12.2010
Сообщений: 8
|
Нужен совет - добавить в систему тестирования вопросы с несколькими правильными ответами
Здравствуйте. Не знаю, сюда ли пишу, но попробую спросить здесь. Есть самописная система тестирования пользователей, все работает уже второй год. Пользователю случайно из базы дается 10 вопросов по определенной тематике с 4 вариантами ответа, он с помощью radio выставляет ответы, затем после сабмита формы они проверяются и пользователю выставляется оценка. На один вопрос - один ответ. Проблема в том, что сейчас стоит задача сделать некоторые вопросы с несколькими вариантами ответа, то есть с чекбоксами. Данные о тестировании хранятся в базе в виде: id_пользователя, категория вопросов, дата тестирования, оценка. В другой таблице id_пользователя и id всех вопросов, которые выпали на тесте. Ну и непосредственно таблица с вопросами: id, категория, текст вопроса, вариант1, вариант2, вариант3, вариант4, номер верного варианта.
Вопрос: как минимальными усилиями добавить возможность выбора нескольких вариантов у некоторых из вопросов и сохранения результата в базу? Пока идея такая: для каждого вопроса в таблице добавить поле, определяющее, имеет ли вопрос один ответ или несколько. Затем при выводе этого вопроса на основании этого поля выводить либо radio, либо checkbox'ы. А вот как обработать и сохранить результат без глобальных переделок? Буду благодарен за любую идею. При необходимости дам дополнительные данные по структуре базы. |
06.06.2018, 08:09 | #2 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,179
|
как то странно, глобальные изменения хотите - но без глобальных изменений кода.
я бы сделал так: таблица с вопросами: id, категория, текст вопроса, другие вспомогательные поля таблица ответов: id, id_вопроса, текст ответа, признак - верный/неверный, либо если нужно в дальнейшем например баллы... типа на ответ два верных ответа, но один более важен чем другой... тогда за один 0.4 за другой 0.6 ..... за полностью верный ответ получается берем сумму = 1, |
06.06.2018, 08:23 | #3 |
Регистрация: 12.12.2010
Сообщений: 8
|
Спасибо за ответ. Предложение хорошее, больше интересует, как правильно обработать форму? То есть, в вопросах где-то будут чекбоксы, где-то радио. Как их корректно передать php-скрипту? лепить кучу условий "если тип вопроса - с несколькими вариантами, то считать переданные чекбоксы, сравнить с ответами в базе, определить верность ответа", иначе просто считать радио и сравнить с верным вариантом. Получается так?
Можно, конечно, поступить кардинально - запилить ВСЕ вопросы с чекбоксами и возможностью нескольких ответов, но это не совсем верно, я считаю... |
06.06.2018, 10:24 | #4 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,179
|
а чего куча то? одно условие - смотришь тип вопроса - в зависимости от этого показываешь чекбоксы или радио
в форме смотри тип вопроса по его ид, в зависимости от результата - считаешь так или эдак |
06.06.2018, 10:58 | #5 |
Регистрация: 12.12.2010
Сообщений: 8
|
Хорошо. А как хранить результат ответов в базе? Сейчас поля организованы так:
user_id answer_1 answer_2 ... answer_10 По завершении теста в поля answer_X заносятся номера ответов пользователя на соответствующие вопросы. Как тогда хранить двойной ответ с чекбоксов? |
06.06.2018, 11:07 | #6 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,179
|
user_id ид_вопроса ид_ответа
в случае если одиночный ответ - будет одна запись, если более одного - несколько |
06.06.2018, 11:11 | #7 |
Регистрация: 12.12.2010
Сообщений: 8
|
Тоже была такая идея. Спасибо за подсказку, пошел делать...
|
11.06.2018, 16:01 | #8 |
Регистрация: 12.12.2010
Сообщений: 8
|
Сделал немного иначе, может кому пригодится. Каждому варианту ответа в чекбоксе присвоил значения 1,2,4,6(баллы), комбинация ответов пользователя при проверке преобразуется в сумму баллов, и сравнивается с контрольным числом для этого вопроса. Из числа путем нехитрых вычислений всегда можно получить выбранные пользователем варианты. Изменений в структуре базы минимум - добавил поле, определяющее, сколько вариантов ответа может быть у вопроса.
P.S. Спасибо Линукс с ее правами доступа, натолкнуло на вариант решения. |
11.06.2018, 21:12 | #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 |