[TC] тест php. Способы организации
Здравствуйте, уважаемые!
Написал тест, в котором зарегистрированный пользователь отвечает
последовательно на вопросы, каждый из которых размещенн на отдельной
php-страничке. каждая php-страница передает сценарий другой странице. Все
работает отлично. Чего же еще нужно?!
Мне очень сложно при необходимости редактировать вопросы теста- велика
вероятность ошибки даже при моей внимательности.
Можно ли построить тест по такому принципу: разбить php-страницу на части и
поместить текстовое содержимое в таблицу базы. Каждая запись соответствует
вопросу, а поля, например,
1. заголовку страницы, 2. тексту вопроса, 3. форме для выбора варианта
ответа.
Затем по сгенерированному номеру вопроса находить нужный вопрос в базе и
выводить содержимое всей записи в браузер.
Тут правда мне не понятен еще один момент с генерацией следующего вопроса и
как это все вместе должно работать! Если можно объясните пожалуйста
алгоритмично, как организовать более экономный и удобный для редактирования
тест.
Заранее всем благодарен,
Грызунов Александр. Самара.
Здравствуйте, Александр!
Вы писали 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
}