Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

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

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

icq: 303-206-418
skype: ad-soft.info
По умолчанию

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

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

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

icq: 303-206-418
skype: ad-soft.info
По умолчанию

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

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

icq: 303-206-418
skype: ad-soft.info
По умолчанию

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хочу реализовать аудио систему с одинаковым звуком по всей квартире с несколькими входами Alar Железо 0 20.06.2016 19:25
Нужен задачник с ответами. kyle16 Паскаль 1 30.01.2016 22:18
Программа. Delphi 7: Есть 10 панелей с вопросами и 10 панелей с ответами ,ответы и вопросы загружаются из файла,перемешиваются... Kolya23 Помощь студентам 5 05.10.2015 22:57
Вытащить вопросы и ответы из программы тестирования. Виталий) Помощь студентам 1 08.02.2013 19:40
Работа с несколькими формами. Вопросы. Вадим Мошев Общие вопросы Delphi 2 12.11.2010 14:39


23:24.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru