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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> тест на php 
V
    Опции темы
godvinn
Дата 15.9.2008, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



hi. пишу тестирование на php.  вопрос состоит в следующем у меня есть форма:
Код

<?php if ($questions !== false){?>
    <?php foreach ($questions as $row){ ?>
    <input type="hidden" name="id[]" value="<?php echo $row['id'];?>" />
    <?php echo $row['question'];?>
     <?php if(strlen($row['one']) > 0){ ?>
    <?php echo $row['one'];?>
    <input type="checkbox" name="Ans1" value="1" />
    <br />
    <?php }else{} ?>
    <?php if(strlen($row['two']) > 0){ ?>
    <?php echo $row['two'];?>
    <input type="checkbox" name="Ans2" value="2" />
    <br />
    <?php }else{} ?>
    <?php if(strlen($row['three']) > 0){ ?>
    <?php echo $row['three'];?>
    <input type="checkbox" name="Ans3" value="3" />
    <br />
    <?php }else{} ?>
    <?php if(strlen($row['four']) > 0){ ?>
    <?php echo $row['four'];?>
    <input type="checkbox" name="Ans4" value="4" />
    <br />
    <?php }else{} ?>
    <?php if(strlen($row['fife']) > 0){ ?>
    <?php echo $row['fife'];?>
       <?php 
    echo "<input type='submit' value='Ответить'>";
    ?>
}

как мне сделать чтобы после нажатия кнопки каждому вопросу присваивался его массив то есть чтобы выглядело например так 
95 = 1,2 Ans1 Ans2
96 = 1,3 или Ans1 Ans3
чтобы потом можно было сравнить с массивом который находится в БД. Тоесть надо както присваивать каждому вопросу id и потом собирать по этому id все ответы!

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


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


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



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

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



а-а-а, факмоймозг!

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

зачем эти бессмысленные "иначе" <?php }else{} ?> ? они же ничего не делают

это я так понимаю, ты пытаешься защититься от не существующих переменных  if(strlen($row['three']) > 0) ?
не поможет, лучше писать:  if(isset($row['three']))

почему, если у тебя всё это прокручивается в цикле, поля имеют одинаковые имена: <input type="checkbox" name="Ans1" value="1" /> - на каждой итерации будет создаваться поле с именем Ans1, в итоге соберётся всего лишь одно значение



ну и наконец, можно более осмысленно, что за задача стоит и как ты её выполняешь?
PM MAIL WWW   Вверх
godvinn
Дата 15.9.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



написать систему тестирования. То есть есть админка через которую добавляются вопросы, БД выглядит следующим образом 
ID 
QuestID - вопрос
варианты ответов
OneQ
TwoQ
ThreeQ
FourQ

TrueAns (это поле содержит правильные ответы, только их может быть больше чем один, и я перед тем как их вносить преобразую их в строку, то есть если правильные ответы 2,3 то в бд они так и будут внесены только разделены какимто символом (делаю через функцию implode())).

но это все я реализовал теперь проблемка с выводом* может лучше в полях имена <input type="checkbox" name="test[]" value="1" /> заменить  на массив? и потом собирать все в массив, хотя наверное мы не сможем точно знать для какого id передан массыв? вот с этим и вся задача. 


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


Бывалый
*


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

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



godvinn, попробуй сначала создать страницу используя только HTML как она должна выглядеть(проще говоря сверстай сначала страничку), а пото уже пихай туда код PHP, вот увидишь что многое вообще не нужно, и сразу станет понятней.
А по поводу формирования массива ответов, то попробуй задавать элементам value в виде n_a_a_....a где n- номер вопроса, а - номер ответа, а потом просто на сервере парси эти значения.
--------------------
Подпись сбежала к другому юзверю....
PM MAIL   Вверх
godvinn
Дата 15.9.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(SDEVIL @  15.9.2008,  15:04 Найти цитируемый пост)
просто на сервере парси эти значения. 

что ты имеешь в виду?
ну допустим я пишу <input type="checkbox" name="test[]" value="<?php echo $row['id'];?>"_1 /> 
.......
 * ты имеешь в виду использовать  parse_str()?



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


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



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

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



ну, смысл тестирования в принципе понятен итак, а вот как это делается - больше в тумане.

скажем так, ты хочешь страницу с несколькими вопросами и группой ответов на них. причём можно выбирать несколько.
нужны комбобоксы, которые можно выбирать и должна быть кнопка для отправления на сервер. затем выводится страница с результатами.
так?

что нам надо? 

таблица БД в которой будут вопросы:
questions
id | text

таблица БД в которой будут ответы:
answers
id | id_q | text | status
где в статусе прописываем результат 1 - значит правильный ответ, 0 (или NULL) - неправильный

вывод:
Код

$sql = 'select * from questions where id=2 or id=7 or id=8 or id=12';
// номера id - вопросов определяются случайно (обычно так), но это отдельная история для рассмотрения
// производим выборку и получаем допустим массив записей $q[$i]['text']
// делаем выборку из ответов:
$sql = 'select * from answers where id_q=2 or id_q=7 or id_q=8 or id_q=12';
// получаем массив записей $a[$j]['text']
// далее прокручиваем два цикла (можно конечно и проще, но там нужно пару функций написать)
for($i = 0; isset($q[$i]['id']); $i++) {
    echo '<p>вопрос: '.$q[$i]['text'].'</p>';
    for($j = 0; isset($a[$j]['id']); $j++) {
        if($a[$j]['id_q'] != $q[$i]['id']) continue; // пропускаем ответы не совпадающие с вопросами
        echo '<p>вариант ответа: '.$a[$j]['text'].' <input type="checkbox" name="q'.$q[$i]['id'].'a'.$a[$j]['id'].'" value="1" /></p>';
    }
}
остаётся разместить теги формы и кнопки
на приёме, раз знаком с функцией implode(), не составит труда разобрать пришедший ответ из переменной $_POST['q2a3'] , просто прочитав массив $_POST в цикле: foreach($_POST as $k => $v) {}
и разделив ответ explode('a', $k);



Это сообщение отредактировал(а) bars80080 - 15.9.2008, 16:40
PM MAIL WWW   Вверх
godvinn
Дата 15.9.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



foreach($_POST as $k => $v) {}
и разделив ответ explode('a', $k);


как  отделить id в один массив а ответы в другой или как сделать вывод был наподобие вот такого 
id      true
1 => 2,3
2 => 3
3 => 4

если делать так как ты говоришь то просто можно только вывести например вот так:
1  2  1  3  2  3  3  3 (это нюансы с выводом смысл я думаю понятен)




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


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



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

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



да нет, тебе придут несколько переменных, где информация будет содержаться только в имени

кстати, я сейчас подумал и наверное, лучше было бы задать имена ответов так:
Код

echo '<input type="checkbox" name="answ[]" value="'.$q[$i]['id'].'a'.$a[$j]['id'].'" />';

тогда тебе придёт массив answ, который можно будет разобрать следующим образом:
Код

$answ = $_POST['answ'];
for($i = 0; isset($answ[$i]); $i++) {
     $s = explode('a', $answ[$i]);
     $id_q = $s[0];
     $id_a = $s[1];

     // ну и дальше какое-нибудь подведение итогов. к примеру:
     $sql = 'select * from answers where id='.$id_a;
     // выборка
     if($r[0]['status'] == 1) { echo 'ответ на вопрос #'.$id_q.' правильный'; }
     else { echo 'ответ на вопрос #'.$id_q.' не правильный'; }
}
что-то похожее на это

Это сообщение отредактировал(а) bars80080 - 15.9.2008, 22:46
PM MAIL WWW   Вверх
godvinn
Дата 15.9.2008, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(bars80080 @  15.9.2008,  22:46 Найти цитируемый пост)
кстати, я сейчас подумал и наверное, лучше было бы задать имена ответов так:

я вот так и сделалsmile


--------------------
Everything happens in life.
user posted image
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.

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


 




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


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

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