Отправляет email-рассылки с помощью сервиса Sendsay

[TC] тест php. Способы организации

Здравствуйте, уважаемые!

Написал тест, в котором зарегистрированный пользователь отвечает
последовательно на вопросы, каждый из которых размещенн на отдельной
php-страничке. каждая php-страница передает сценарий другой странице. Все
работает отлично. Чего же еще нужно?!

Мне очень сложно при необходимости редактировать вопросы теста- велика
вероятность ошибки даже при моей внимательности.
Можно ли построить тест по такому принципу: разбить php-страницу на части и
поместить текстовое содержимое в таблицу базы. Каждая запись соответствует
вопросу, а поля, например,
1. заголовку страницы, 2. тексту вопроса, 3. форме для выбора варианта
ответа.
Затем по сгенерированному номеру вопроса находить нужный вопрос в базе и
выводить содержимое всей записи в браузер.

Тут правда мне не понятен еще один момент с генерацией следующего вопроса и
как это все вместе должно работать! Если можно объясните пожалуйста
алгоритмично, как организовать более экономный и удобный для редактирования
тест.

Заранее всем благодарен,
Грызунов Александр. Самара.

Ответить   "eastreb" Thu, 30 Apr 2009 11:12:06 +0400 (#850968)

 

Ответы:

Здравствуйте, Александр!

Вы писали 30 апреля 2009 г., 11:12:06:

Не думаю, что смогу ответить на поставленные Вами вопросы, но рискну
предложить своё простое решение задачи, которое, как мне кажется,
избавит Вас от проблем редактирования вопросов теста.

Все вопросы Вы можете поместить в один файл, например
questions.txt, и забирать их в массив, используя функцию file().
Каждая строка файла - отдельный вопрос теста. Разрывов строк в тексте
вопроса быть не должно.

Для передачи текущего номера вопроса и уже полученных ответов используются скрытые
поля и метод POST html-формы. Предлагаемый способ не требует использования базы
данных и работы с сессиями, что упрощает программирование.

Все ответы записываются в одну строку с разделителем, которую легко
преобразовать в массив для обработки результатов.
Вот текст скрипта:

<?php

$questions = file("questions.txt");
$lim = count($questions) + 1;
$i = $_REQUEST['index'];

if (isset($_REQUEST['answer']))
{
if ($_REQUEST['str_answers'] == null)
{
$str_answers = $_REQUEST['answer'];
}

else {
$str_answers = $_REQUEST['str_answers'] . "*" . $_REQUEST['answer'];
}}

switch ($i){

case null:
$i = 0;
echo $questions[$i];

<form id="mform" action="test.php" method="POST">
Ответ:
<input type="text" id="answer" name="answer" value="" size="20">
<input type="hidden" id="index" name="index" value="<?php echo $i + 1; ?>">
<input type="hidden" id="str_answers" name="str_answers" value="<?php echo $str_answers;

<input type="submit" name="go" value="Отправить">
</form>
<?php
break;

case $i == $lim:
echo "Спасибо!<br>";
$answers = explode("*", $str_answers);
//Получаем массив ответов из строки.
//Здесь производим обработку результатов теста.
break;

default: $i = $_REQUEST['index']; echo $questions[$i];

<form id="mform" action="test.php" method="POST">
Ответ:
<input type="text" id="answer" name="answer" value="" size="20">
<input type="hidden" id="index" name="index" value="<?php echo $i + 1; ?>">
<input type="hidden" id="str_answers" name="str_answers" value="<?php echo $str_answers;

<input type="submit" name="go" value="Отправить">
</form>
<?php
}

Ответить   Maria Rasstanaeva Thu, 30 Apr 2009 18:32:17 +0400 (#851253)

 

Vande omentaina, eastreb!
Создаёте в БД таблицу, в ней поля, например, такие: Id (он же может
быть номером вопроса), вопрос, варианты ответа. Если вариантов каждый
раз разное число, это сложнее, но тоже можно придумать.
Потом на каждой странице делаете форму с радиокнопками и флажками, а в
поле типа Хидден передаёте номер вопроса, например, так:
<input type=hidden name=unumber value=$f[Id]>
где $f[Id] - вытащенное поле из БД.
Далее проверяете, была ли нажата кнопка. Если была, то увеличиваете
счётчик ($unumber) на единицу и работаете с ним. Можно это дело в цикл
загнать.

Ответить   Anarendil Thu, 30 Apr 2009 12:41:12 +0300 (#851256)

 

Здравствуйте, уважаемые!

Всем огромное спасибо за помощь! Благодаря вашим советам тест готов!

В двух словах о структуре последнего:
тест состоит из двух страничек: регистрационной и собственно тестовой с
формой с вариантами ответа. Форма меняет свое содержание по скрытому полю
связанному с номером вопроса. после нажатия кнопки "Ответить" форма
обновляется. Базу сделал из семи полей: 1. номер вопроса 2. текст вопроса с
третьего по шестой- варианты ответа 7. правильный ответ. Подсчет набранных
очков происходит в реальном времени при загрузке очередной формы.

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

Всегда благодарен за помощь и советы!
Грызунов Александр. Самара.

Ответить   "eastreb" Sun, 3 May 2009 15:52:15 +0400 (#852209)