| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > тест на php |
| Автор: godvinn 15.9.2008, 07:45 | ||
hi. пишу тестирование на php. вопрос состоит в следующем у меня есть форма:
как мне сделать чтобы после нажатия кнопки каждому вопросу присваивался его массив то есть чтобы выглядело например так 95 = 1,2 Ans1 Ans2 96 = 1,3 или Ans1 Ans3 чтобы потом можно было сравнить с массивом который находится в БД. Тоесть надо както присваивать каждому вопросу id и потом собирать по этому id все ответы! |
| Автор: bars80080 15.9.2008, 09:23 |
| а-а-а, факмоймозг! как ты догадался выделять пхп-тэгами каждую строчку? уверен, никто даже близко такого не советовал и не писал зачем эти бессмысленные "иначе" <?php }else{} ?> ? они же ничего не делают это я так понимаю, ты пытаешься защититься от не существующих переменных if(strlen($row['three']) > 0) ? не поможет, лучше писать: if(isset($row['three'])) почему, если у тебя всё это прокручивается в цикле, поля имеют одинаковые имена: <input type="checkbox" name="Ans1" value="1" /> - на каждой итерации будет создаваться поле с именем Ans1, в итоге соберётся всего лишь одно значение ну и наконец, можно более осмысленно, что за задача стоит и как ты её выполняешь? |
| Автор: godvinn 15.9.2008, 14:13 |
| написать систему тестирования. То есть есть админка через которую добавляются вопросы, БД выглядит следующим образом ID QuestID - вопрос варианты ответов OneQ TwoQ ThreeQ FourQ TrueAns (это поле содержит правильные ответы, только их может быть больше чем один, и я перед тем как их вносить преобразую их в строку, то есть если правильные ответы 2,3 то в бд они так и будут внесены только разделены какимто символом (делаю через функцию implode())). но это все я реализовал теперь проблемка с выводом* может лучше в полях имена <input type="checkbox" name="test[]" value="1" /> заменить на массив? и потом собирать все в массив, хотя наверное мы не сможем точно знать для какого id передан массыв? вот с этим и вся задача. |
| Автор: SDEVIL 15.9.2008, 15:04 |
| godvinn, попробуй сначала создать страницу используя только HTML как она должна выглядеть(проще говоря сверстай сначала страничку), а пото уже пихай туда код PHP, вот увидишь что многое вообще не нужно, и сразу станет понятней. А по поводу формирования массива ответов, то попробуй задавать элементам value в виде n_a_a_....a где n- номер вопроса, а - номер ответа, а потом просто на сервере парси эти значения. |
| Автор: godvinn 15.9.2008, 16:22 |
что ты имеешь в виду? ну допустим я пишу <input type="checkbox" name="test[]" value="<?php echo $row['id'];?>"_1 /> ....... * ты имеешь в виду использовать parse_str()? |
| Автор: bars80080 15.9.2008, 16:39 | ||
| ну, смысл тестирования в принципе понятен итак, а вот как это делается - больше в тумане. скажем так, ты хочешь страницу с несколькими вопросами и группой ответов на них. причём можно выбирать несколько. нужны комбобоксы, которые можно выбирать и должна быть кнопка для отправления на сервер. затем выводится страница с результатами. так? что нам надо? таблица БД в которой будут вопросы: questions id | text таблица БД в которой будут ответы: answers id | id_q | text | status где в статусе прописываем результат 1 - значит правильный ответ, 0 (или NULL) - неправильный вывод:
на приёме, раз знаком с функцией implode(), не составит труда разобрать пришедший ответ из переменной $_POST['q2a3'] , просто прочитав массив $_POST в цикле: foreach($_POST as $k => $v) {} и разделив ответ explode('a', $k); |
| Автор: godvinn 15.9.2008, 20:37 |
| 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 (это нюансы с выводом смысл я думаю понятен) |
| Автор: bars80080 15.9.2008, 22:46 | ||||
| да нет, тебе придут несколько переменных, где информация будет содержаться только в имени кстати, я сейчас подумал и наверное, лучше было бы задать имена ответов так:
тогда тебе придёт массив answ, который можно будет разобрать следующим образом:
|
| Автор: godvinn 15.9.2008, 23:38 | ||
я вот так и сделал |