| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > система тестирования на php |
| Автор: welt 8.6.2006, 22:23 | ||
| Приветствую всех. я пишу систему тестирования на php и ...как-то неочень получается. Я использую бд. Таблица такая: ----------------------------------------------------------------- id | question | ans1 | ans2 | ans3 | ans4 | number | ----------------------------------------------------------------- где question-вопрос; ans1, ans2, ans3, ans4-варианты ответа. Праильным ответом может быть только один из четырех. number-это номер правильного ответа.(1, 2, 3 или 4). Вопросы заносятся в бд через форму для добавления вопросов, куда вписывается сам вопрос, варианты ответов и номер правильного ответа. Вывод теста такой: на страницу выводятся один за другим по одному вопросы(т.е. на странице один вопрос ), напротив каждого вариаента ответа стоит checkbox, причем моно поставить только одну галку. Проблема такая: как реализовать обработку галок, т.е. как связать номер галки с номером, который находится в поле number? (можно ли как-нибудь получить номер столбца из бд? т.е. для ans1-номер столбца 3, для ans2- номер стольбца 4 и т.д. ?). т.е вот 4-е галки, например такие.
Как "научить" скрипт понимать правильно ли выбран ответ или нет. И если правильно, то в переменную $s накапливать количество правильных ответов? Подскажите именно как это программно реализовать. |
| Автор: HuKoLaU 8.6.2006, 23:17 | ||||||
Можно имя задать в checkbox одинаковое, без массива, так как надо всего один вариант.
Получаешь значение checkboxа,
Получаешь из БД вариант правильного ответа
|
| Автор: BobiKK 9.6.2006, 09:12 |
| Если у тебя возможны несколько вариантов ответа, то пройтись в цикле foreach по массиву $_POST['selected'] |
| Автор: welt 9.6.2006, 12:06 |
| HuKoLaU, у меня же id - это номер вопроса. т.е. id одинаков для четырех вариатнтов ответа: для вариантов к 1-ому вопросу id=1 для вариантов ко 2-ому вопросу id=2 и т.д. можно ли как-нибудь получить номер столбца из бд? т.е. для ans1-номер столбца 3, для ans2- номер стольбца 4 и т.д. ? внимательно читай мое первое сообщение. |
| Автор: skyboy 9.6.2006, 12:38 |
| welt, измени структуру базы. idquestion titleQuestion - это хранятся вопросы(questions). idanswer idqeustion TitleAnswer - это храняться варианты ответов(answers) idquestion idanswer - это хранятся правильные ответы для вопросов. |
| Автор: Endeveit 9.6.2006, 12:41 |
| welt, у тебя неверно спроектирована база данных, отсюда и куча проблем. |
| Автор: HuKoLaU 9.6.2006, 22:44 | ||||
Так, а я что написал? Этим запросом определяем правильный вариант ответа для вопроса id которого равно номеру вопросу, на который был только что дан ответ, а number столбец где храниться правильный ответ.
|
| Автор: Drache 13.6.2006, 08:24 | ||
| С базой здесь как раз все нормально. Просто используешь ее как-то непонятно наверно... Думаю, такое решение подойдет: форма
Ключ массива variant - это id каждого вопроса. Value - соответственно к этому вопросу номер ответа(1 - ans1, 2 - ans2, 3 - ans3, 4 - ans4). В скрипте определяешь какой ключ массива variant существует (например с помощью array_key() или с помощью foreach - пройдешься в цикле только один раз, но получишь сразу и ключ и значение), потом ищешь в БД к нему правильный ответ (как описывали выше) и сравниваешь со значением этого массива. Ну а дальше уже понятно |
| Автор: Штык 15.6.2006, 07:53 |
| хммм.. а если допустим надо будет исаользовать 5 вариантов ответа то что отгда? еще продумай вариант чот в одном вопросе может быть два ответа или три ведь такое то дже бывает.. |
| Автор: slang 20.6.2006, 05:42 | ||
| В таком варианте БД не подойдет точно, нужно или разбивать на несколько таблиц (тесты/вопросы/ответы) или делать в одной таблице, но с разделением. Например у меня сделано так:
Т.е. все собрано в одной таблице, раньше использовал несколько таблиц, но в этом случае они (данные/тесты) были не столь мобильны. Мне иногда приходится выкладывать только один конкретный тест, а затем возвращать обычные (повседневные) тесты. Таким образом мне достаточно уничтожить и создать таблицу из архива. |
| Автор: Drache 26.6.2006, 10:14 | ||||||
я отвечала именно по конкретному вопросу И причем здесь сколько вариантов ответа? Если их может быть разное количество, то тогда и БД действительно нужно переделывать. А если только 4 как и было в задаче, то и так нормально, по-моему. Если все будет действительно посложнее, то тогда возможно стоит разделить эту таблицу на две: questions id question (текст) answer_id (номер правильного ответа) answers id question_id answer (текст) тогда формочка выглядела бы примерно так:
Здесь правда все не очень надежно, главное не перепутать ответы от разных вопросов |