Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2018, 05:40   #1
Razzer
 
Регистрация: 12.12.2010
Сообщений: 8
По умолчанию Нужен совет - добавить в систему тестирования вопросы с несколькими правильными ответами

Здравствуйте. Не знаю, сюда ли пишу, но попробую спросить здесь. Есть самописная система тестирования пользователей, все работает уже второй год. Пользователю случайно из базы дается 10 вопросов по определенной тематике с 4 вариантами ответа, он с помощью radio выставляет ответы, затем после сабмита формы они проверяются и пользователю выставляется оценка. На один вопрос - один ответ. Проблема в том, что сейчас стоит задача сделать некоторые вопросы с несколькими вариантами ответа, то есть с чекбоксами. Данные о тестировании хранятся в базе в виде: id_пользователя, категория вопросов, дата тестирования, оценка. В другой таблице id_пользователя и id всех вопросов, которые выпали на тесте. Ну и непосредственно таблица с вопросами: id, категория, текст вопроса, вариант1, вариант2, вариант3, вариант4, номер верного варианта.

Вопрос: как минимальными усилиями добавить возможность выбора нескольких вариантов у некоторых из вопросов и сохранения результата в базу?

Пока идея такая: для каждого вопроса в таблице добавить поле, определяющее, имеет ли вопрос один ответ или несколько. Затем при выводе этого вопроса на основании этого поля выводить либо radio, либо checkbox'ы. А вот как обработать и сохранить результат без глобальных переделок? Буду благодарен за любую идею. При необходимости дам дополнительные данные по структуре базы.
Razzer вне форума Ответить с цитированием
Старый 06.06.2018, 08:09   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

как то странно, глобальные изменения хотите - но без глобальных изменений кода.
я бы сделал так:
таблица с вопросами: id, категория, текст вопроса, другие вспомогательные поля
таблица ответов: id, id_вопроса, текст ответа, признак - верный/неверный, либо если нужно в дальнейшем например баллы... типа на ответ два верных ответа, но один более важен чем другой... тогда за один 0.4 за другой 0.6 ..... за полностью верный ответ получается берем сумму = 1,
ADSoft вне форума Ответить с цитированием
Старый 06.06.2018, 08:23   #3
Razzer
 
Регистрация: 12.12.2010
Сообщений: 8
По умолчанию

Спасибо за ответ. Предложение хорошее, больше интересует, как правильно обработать форму? То есть, в вопросах где-то будут чекбоксы, где-то радио. Как их корректно передать php-скрипту? лепить кучу условий "если тип вопроса - с несколькими вариантами, то считать переданные чекбоксы, сравнить с ответами в базе, определить верность ответа", иначе просто считать радио и сравнить с верным вариантом. Получается так?

Можно, конечно, поступить кардинально - запилить ВСЕ вопросы с чекбоксами и возможностью нескольких ответов, но это не совсем верно, я считаю...
Razzer вне форума Ответить с цитированием
Старый 06.06.2018, 10:24   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

а чего куча то? одно условие - смотришь тип вопроса - в зависимости от этого показываешь чекбоксы или радио
в форме смотри тип вопроса по его ид, в зависимости от результата - считаешь так или эдак
ADSoft вне форума Ответить с цитированием
Старый 06.06.2018, 10:58   #5
Razzer
 
Регистрация: 12.12.2010
Сообщений: 8
По умолчанию

Хорошо. А как хранить результат ответов в базе? Сейчас поля организованы так:
user_id answer_1 answer_2 ... answer_10
По завершении теста в поля answer_X заносятся номера ответов пользователя на соответствующие вопросы. Как тогда хранить двойной ответ с чекбоксов?
Razzer вне форума Ответить с цитированием
Старый 06.06.2018, 11:07   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

user_id ид_вопроса ид_ответа
в случае если одиночный ответ - будет одна запись, если более одного - несколько
ADSoft вне форума Ответить с цитированием
Старый 06.06.2018, 11:11   #7
Razzer
 
Регистрация: 12.12.2010
Сообщений: 8
По умолчанию

Тоже была такая идея. Спасибо за подсказку, пошел делать...
Razzer вне форума Ответить с цитированием
Старый 11.06.2018, 16:01   #8
Razzer
 
Регистрация: 12.12.2010
Сообщений: 8
По умолчанию

Сделал немного иначе, может кому пригодится. Каждому варианту ответа в чекбоксе присвоил значения 1,2,4,6(баллы), комбинация ответов пользователя при проверке преобразуется в сумму баллов, и сравнивается с контрольным числом для этого вопроса. Из числа путем нехитрых вычислений всегда можно получить выбранные пользователем варианты. Изменений в структуре базы минимум - добавил поле, определяющее, сколько вариантов ответа может быть у вопроса.
P.S. Спасибо Линукс с ее правами доступа, натолкнуло на вариант решения.
Razzer вне форума Ответить с цитированием
Старый 11.06.2018, 21:12   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

немного костыли, но можно и так.

только исправьте, если тут не опечатались
Цитата:
Сообщение от Razzer Посмотреть сообщение
Каждому варианту ответа в чекбоксе присвоил значения 1,2,4,6(баллы),
так должны быть степени двойки.
1 2 4 8 16 32 и т.д.
только тогда контрольное число можно корректно разложить на составляющие ответа.
При этом даже не обязательно хранить количество правильных ответов.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хочу реализовать аудио систему с одинаковым звуком по всей квартире с несколькими входами 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