Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> система тестирования на php, testing on php 
:(
    Опции темы
welt
  Дата 8.6.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 21.5.2005
Где: UnderGround

Репутация: нет
Всего: нет



Приветствую всех.
я пишу систему тестирования на 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-е галки, например такие.
Код

<INPUT type='checkbox' name='selected[]' value='1'>
<INPUT type='checkbox' name='selected[]' value='2'>
<INPUT type='checkbox' name='selected[]' value='3'>
<INPUT type='checkbox' name='selected[]' value='4'>

Как "научить" скрипт понимать правильно ли выбран ответ или нет. И если правильно, то в переменную $s накапливать количество правильных ответов? 
Подскажите именно как это программно реализовать.    

Это сообщение отредактировал(а) welt - 9.6.2006, 12:06
PM MAIL   Вверх
HuKoLaU
Дата 8.6.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 30.4.2006
Где: Беларусь, г.Бобр уйск

Репутация: нет
Всего: нет



Можно имя задать в checkbox одинаковое, без массива, так как надо всего один вариант.
Код

<INPUT type='checkbox' name='variant' value='1'>
    
<INPUT type='checkbox' name='variant' value='2'>
    
<INPUT type='checkbox' name='variant' value='3'>
    
<INPUT type='checkbox' name='variant' value='4'>

Получаешь значение checkboxа, 
Код


$variant=$_POST['variant'];

Получаешь из БД вариант правильного ответа
Код

$sql="SELECT number FROM question where(id='$id')";
 и сравниваешь его с полученным из checkboxа

  

Это сообщение отредактировал(а) HuKoLaU - 8.6.2006, 23:21
PM MAIL ICQ   Вверх
BobiKK
Дата 9.6.2006, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 655
Регистрация: 1.12.2005
Где: Essen, Deutschlan d

Репутация: 4
Всего: 16



Если у тебя возможны несколько вариантов ответа, то пройтись в цикле foreach по массиву $_POST['selected'] 
PM MAIL   Вверх
welt
Дата 9.6.2006, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 21.5.2005
Где: UnderGround

Репутация: нет
Всего: нет



HuKoLaU, у меня же id - это номер вопроса. т.е. id одинаков для четырех вариатнтов ответа:
для вариантов к 1-ому вопросу id=1
для вариантов ко 2-ому вопросу id=2 и т.д.
можно ли как-нибудь получить номер столбца из бд? т.е. для ans1-номер столбца 3, для  ans2- номер стольбца 4 и т.д. ?
внимательно читай мое первое сообщение. 
PM MAIL   Вверх
skyboy
Дата 9.6.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



welt, измени структуру базы.
idquestion titleQuestion 
 - это хранятся вопросы(questions).
idanswer idqeustion TitleAnswer
 - это храняться варианты ответов(answers)
idquestion idanswer
 - это хранятся правильные ответы для вопросов.

 
PM MAIL   Вверх
Endeveit
Дата 9.6.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 2.6.2006

Репутация: 4
Всего: 7



welt, у тебя неверно спроектирована база данных, отсюда и куча проблем. 
PM WWW   Вверх
HuKoLaU
Дата 9.6.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 30.4.2006
Где: Беларусь, г.Бобр уйск

Репутация: нет
Всего: нет



Цитата(welt @ 9.6.2006,  12:06)
HuKoLaU, у меня же id - это номер вопроса. т.е. id одинаков для четырех вариатнтов ответа:

Так, а я что написал?
Этим запросом определяем правильный вариант ответа для вопроса id которого равно номеру вопросу, на который был только что  дан ответ, а number столбец где храниться правильный ответ.
Код

$sql="SELECT number FROM question where(id='$id')";

 
PM MAIL ICQ   Вверх
Drache
Дата 13.6.2006, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 31.3.2006

Репутация: 1
Всего: 3



С базой здесь как раз все нормально. Просто используешь ее как-то непонятно наверно...
Думаю, такое решение подойдет:
форма
Код

<INPUT type='checkbox' name='variant[1]' value='1'>    
<INPUT type='checkbox' name='variant[1]' value='2'>    
<INPUT type='checkbox' name='variant[1]' value='3'>    
<INPUT type='checkbox' name='variant[1]' value='4'>


Ключ массива variant - это id каждого вопроса. Value - соответственно к этому вопросу номер ответа(1 - ans1, 2 - ans2, 3 - ans3, 4 - ans4).
В скрипте определяешь какой ключ массива variant существует (например с помощью array_key() или с помощью foreach - пройдешься в цикле только один раз, но получишь сразу и ключ и значение), потом ищешь в БД к нему правильный ответ (как описывали выше) и сравниваешь со значением этого массива. Ну а дальше уже понятно smile
 
PM MAIL   Вверх
Штык
Дата 15.6.2006, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 9.5.2005
Где: Москоу

Репутация: нет
Всего: 1



хммм.. а если допустим надо будет исаользовать 5 вариантов ответа то что отгда?
еще продумай вариант чот в одном вопросе может быть два ответа или три ведь такое то дже бывает.. 
--------------------
Lachetes familieresQui nous rendent guerrieres
PM MAIL WWW ICQ   Вверх
slang
Дата 20.6.2006, 05:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 455
Регистрация: 7.3.2004

Репутация: -1
Всего: 0



В таком варианте БД не подойдет точно, нужно или разбивать на несколько таблиц (тесты/вопросы/ответы) или делать в одной таблице, но с разделением.
Например у меня сделано так:
Код

CREATE TABLE `test` (
  `id` int(11) NOT NULL auto_increment,
  `test_this` int(11) NOT NULL default '0',
  `vopros_this` int(11) NOT NULL default '0',
  `otvet_this` int(11) NOT NULL default '0',
  `name` varchar(255) NOT NULL default '',
  `url` varchar(255) NOT NULL default '',
  `otvet_ball` int(11) default '0',
  `variant` int(2) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=964 ;

Т.е. все собрано в одной таблице, раньше использовал несколько таблиц, но в этом случае они (данные/тесты) были не столь мобильны. Мне иногда приходится выкладывать только один конкретный тест, а затем возвращать обычные (повседневные) тесты. Таким образом мне достаточно уничтожить и создать таблицу из архива. 


--------------------
Запчасти на иномарки www.avtograd55.ru.
Если есть время - зайдите и посоветуйте что исправить и что доработать.
PM MAIL WWW ICQ   Вверх
Drache
Дата 26.6.2006, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 31.3.2006

Репутация: 1
Всего: 3



Цитата

еще продумай вариант чот в одном вопросе может быть два ответа или три ведь такое то дже бывает..

Цитата

Праильным ответом может быть только один из четырех.

я отвечала именно по конкретному вопросу smile
И причем здесь сколько вариантов ответа? Если их может быть разное количество, то тогда и БД действительно нужно переделывать. А если только 4 как и было в задаче, то и так нормально, по-моему.

Если все будет действительно посложнее, то тогда возможно стоит разделить эту таблицу на две:

questions
id
question (текст)
answer_id (номер правильного ответа)

answers
id
question_id
answer (текст)

тогда формочка выглядела бы примерно так:
Код

<INPUT type='checkbox' name='variant[q_id]' value='a_id1'>     
<INPUT type='checkbox' name='variant[q_id]' value='a_id2'>     
<INPUT type='checkbox' name='variant[q_id]' value='a_id3'>     
<INPUT type='checkbox' name='variant[q_id]' value='a_id4'>
...
<INPUT type='checkbox' name='variant[q_id]' value='a_idN'>


Здесь правда все не очень надежно, главное не перепутать ответы от разных вопросов smile  

Это сообщение отредактировал(а) Drache - 26.6.2006, 10:15
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.