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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> защита от множественного выбора, множественный выбор в chexbox 
V
    Опции темы
godvinn
Дата 30.10.2008, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

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



Здравствуйте. Помогите с следующей задачей:

есть следующая форма 
Код

         <form action="....."  method="post">>

     // здесь идет цикл  для вывода с БД вопроса и ответов к ниму 
    
        <input type="hidden" name="questionID" value="<?php echo $row['questionID'];?>" />
        <?php  echo $row['question'];?> // вопрос
         //ответы
        <input type="checkbox" name="test[]" value="<?php echo $row['id']; "."?>.1" />
        <input type="checkbox" name="test[]" value="<?php echo $row['id']; "."?>.2" />
        <input type="checkbox" name="test[]" value="<?php echo $row['id']; "."?>.3" />
        <input type="checkbox" name="test[]" value="<?php echo $row['id']; "."?>.4" />
        <input type='submit' value='Ответить' />
            
         </form>


правильные ответы хранятся в БД, все вопросы выводятся на одной странице не по одному.

*допустим к вопросу правильные ответы 2,3 , а пользователь выставил все 4 галочки  ,
как этот вопрос не воспринимать как правильный а воспринимать только на правильные ответы. 

то есть суть задачи в том: как избежать "наклацывания" *?







--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
bars80080
Дата 30.10.2008, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



как? обработку соответствующую задать. если есть ещё кроме правильных - писать неправильно
PM MAIL WWW   Вверх
godvinn
Дата 30.10.2008, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

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



ну я делаю следующим образом:

у меня есть 

Код

    function resultTotalCount($test)
    {        
        (int)$totalTRUE = 0;
        (int)$totalFalse = 0;
        (int)$total = 0;
        for($i = 0; isset($test[$i]); $i++)
        {
            $array = explode('.', $test[$i]);
            $id_question = $array[0];
            $id_answer = $array[1];
            $arrayDB = $this->resultTrueDB($id_question); //правильные ответы с бд
            $stringSearh = strpbrk($arrayDB, $id_answer);
            if ($stringSearh == true)
                {
                 $totalTRUE = $totalTRUE + 1; // если ответ совпадает добавляю +1 к счетчику
                }
            else
                {
                    $totalFalse = $totalFalse + 1; // если ответ не совпадает добавляю +1 к счетчику неправильных ответов
                }
         }
                
    }


сделал два счётчика на правильные ответы и неправильные ответы. 
а вот как дальше не знаю?


--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
baldina
Дата 30.10.2008, 18:30 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



каждому ответу присваивается значение - степень двойки. значения чекбоксов, отмеченных пользователем складываются.
в базе хранятся суммы. полученное значение сравнивается с хранимым в базе.
пример:

ответ 1 - значение 1
ответ 2 - значение 2
ответ 3 - значение 4
ответ 4 - значение 8

из них правильные, например, 2 и 3. сумма - 6
способ позволяет не только быстро проверить правильность ответа, но и проанализировать, что именно правильно/неправильно

Добавлено @ 18:38
что-то типа 

Код

$sum = 0;
for($i = 0; $i<$n; ++$i)
 $sum += $test[$i];

if ($sum != $correct_result_from_base) 
  echo 'Answer is not correct';

$count = 0;
for (for($i = 0; $i<$n; ++$i)
  if (($sum & 1 << $i) & $correct_result_from_base)
    ++$count;

echo "Number of correct answers is $count";




Это сообщение отредактировал(а) baldina - 30.10.2008, 18:39
PM MAIL   Вверх
godvinn
Дата 30.10.2008, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

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



baldina - да способ действительно хорош но.... если пользователь выбирает с 2 правильных ответов 1 - вопрос считается неправильным? или ты имеешь ввиду только половину брать от суммы? и если пользователь выберет все 4 варианта то сумма прийдет с формы в полном обьеме*? 

Это сообщение отредактировал(а) godvinn - 30.10.2008, 18:46


--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
baldina
Дата 30.10.2008, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



что в этом случае - знаешь ты, а не я smile smile
это же зависит от конкретных вопросов и ответов.
есть вопросы, где перечислены разные способы одного и того же, для таких частичный ответ - правильный, но в зависимости от близости к идеальному сумма может меняться.
а есть вопросы, где надо однозначно знать перечень, тут либо точно, либо никак.
PM MAIL   Вверх
godvinn
Дата 30.10.2008, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

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



Цитата(godvinn @  30.10.2008,  18:41 Найти цитируемый пост)
и если пользователь выберет все 4 варианта то сумма прийдет с формы в полном обьеме*? 

???  объясни по подробней на этот вопрос ..***


--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
bars80080
Дата 30.10.2008, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



godvinn, ну ведь это самое оптимальное решение. в БД можно даже сразу хранить контрольную сумму. для 2 и 3 правильных ответов - она 6, нужно просто высчитать сумму принятых чекбоксов и сравнить с контрольной
PM MAIL WWW   Вверх
godvinn
Дата 30.10.2008, 19:14 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 4.4.2008
Где: possibility of mo ving to Kyiv

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



bars80080  не ну а если выбирается все 4 галочки в чекбоксах то сума прийдет 6? и естественно она будет совпадать с сумой с БД. правильно же ?* 


--------------------
Everything happens in life.
user posted image
PM MAIL   Вверх
baldina
Дата 30.10.2008, 19:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



1+2+4+8=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.0797 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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