Консультация № 184477
16.11.2011, 17:40
170.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты! Прошу помощи в следующем вопросе:
Представлен фрагмент теста по информатике (используются различные элементы управления: радиокнопки, флажки, текстовое поле ввода). Необходимо реализовать проверку теста на стороне сервера (работа программы проверяется на Denwer).
У меня будет 2 файла: test_inf.htm (непосредственно тест, это могу сделать сам), test_inf.php - код обработчика. Т.к. php изучаю впервые, испытываю некоторые затруднения.
Вобщем, мне необходимо, чтобы:
- проверялось, правильно или нет ответил пользователь на вопрос;
- подсчитывалось количество правильных ответов;
- выводилась оценка (условно за 3 верных ответа - "5", за 2 - "4", за 1 - "3", ни одного верного - "2")

Хотелось, чтобы результат выглядел примерно так:
На первый вопрос вы ответили правильно
На второй вопрос вы ответили неправильно
На третий вопрос вы ответили правильно
Количество правильных ответов: 2
Ваша оценка: 4 (хорошо)

В примере с радиокнопками и флажками необходимо добавить проверку, избавляющую от ошибки в случаях, когда ни один элемент не выбран (использовать функцию isset).
Если можно, напишите, пожалуйста, код обработчика в php как можно проще, то есть без "наворотов" (насколько это возможно). Мне самое главное - потом разобраться с этими примерами.
Фрагмент теста и правильные ответы здесь: https://rfpro.ru/upload/6683

Обсуждение

давно
Профессионал
848
1596
18.11.2011, 15:11
общий
это ответ
Здравствуйте, Aleksandrkib!
Решение в приложении, используется 1 файл для интерфейса и обработки.

Приложение:
<?php
//если первый запуск - открываем сессию
if(session_id() == '')
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Тест</title>
</head>
<body>
<?php
//переменная vopros пустая только при первом запуске или перезапуске
if (empty($_SESSION['vopros'])){
//первый запуск
$vopros=0; //счетчик вопросов
$goodansw=array(0,0,0); //массив для правильных ответов
}
else{
//читаем сохраненные переменные
$vopros = $_SESSION['vopros'];
$goodansw = $_SESSION['goodansw'];
//в зависимости от переменной вопроса различные обработки
switch ($vopros) {
case 1:
$answ1=isset($_POST['answ1']);
$answ2=isset($_POST['answ2']);
$answ3=isset($_POST['answ3']);
$answ4=isset($_POST['answ4']);
if(!$answ1 and !$answ2 and !$answ3 and !$answ4){
//невыбран ни один чекбокс
$vopros--;
}
else {
//если выбраны 3 и 4-ый чекбоксы, отметим как ответ правильный
if($answ3 and $answ4 and !$answ1 and !$answ2)
$goodansw[0]=1;
}
break;
case 2:
$answ1=isset($_POST['vopros2']);
if(!$answ1)
$vopros--;
else {
//если выбран правильный радио
if($_POST['vopros2']=='3')
$goodansw[1]=1;
}
break;
case 3:
//проверка слова
$answ1=trim($_POST['vopros3']);
if (strlen($answ1)==0){
//пустая строка
$vopros--;
}
else{
if($answ1=='ветвление')
$goodansw[2]=1;
}
break;
default:
break;
}
}
//в зависимости от номера вопроса выводим разный текст и элемента
switch ($vopros) {
case 0:
?>1. Которые из документов являются алгоритмами<br/>
<form action="<?=$_SERVER['PHP_SELF']?>" method="POST" name="my_form"><input type="checkbox" name="answ1"> каталог книг в библиотеке;<br/><input type="checkbox" name="answ2"> настенный календарь на текущий год;<br/><input type="checkbox" name="answ3"> порядок набора международного телефонного номера;<br/><input type="checkbox" name="answ4"> рецепт приготовления клея. <br/><input type="submit" value="Ответить"></form>
<?
break;
case 1:
?>2. Алгоритм, в котором используются только управляющие структуры "следование" и "ветвление", называется... <br/>
<form action="<?=$_SERVER['PHP_SELF']?>" method="POST" name="my_form"><input type="radio" name="vopros2" value="1"> циклическим;<br/><input type="radio" name="vopros2" value="2"> линейным;<br/><input type="radio" name="vopros2" value="3"> разветвляющимся;<br/><input type="radio" name="vopros2" value="4"> подпрограммой.<br/><input type="submit" value="Ответить"></form>
<?
echo '';
break;
case 2:
?>3. Форма организации действий, в результате которой выполняется или не выполняется та или иная последовательность действий, называется (в им.пад.):<br/>
<form action="<?=$_SERVER['PHP_SELF']?>" method="POST" name="my_form"><input type="text" name="vopros3"><br/><input type="submit" value="Ответить"></form>
<?
echo '';
break;
case 3:
//вывод результатов
?>Результаты теста:<br/>На первый вопрос Вы ответили <? echo otvet($goodansw[0]) ?><br/><?
?>На второй вопрос Вы ответили <? echo otvet($goodansw[1]) ?><br/><?
?>На третий вопрос Вы ответили <? echo otvet($goodansw[2]) ?><br/><?
?>Колличество правильных ответов: <? echo array_sum($goodansw) ?><br/>Ваша оценка: <?
switch (array_sum($goodansw)){
case 3:
echo '5 (отлично)';
break;
case 2:
echo '4 (хорошо)';
break;
case 1:
echo '3 (уд.)';
break;
case 0:
echo '2 (неуд.)';
break;
}
default:
break;
}
//увеличиваем счетчик вопрсоа
$vopros++;
//сохраняем переменные
$_SESSION['vopros'] = $vopros;
$_SESSION['goodansw'] = $goodansw;

//функция возвращающая строку в зависимости от параметра
function otvet($otvet) {
if($otvet==1)
return 'правильно';
else
return 'неправильно';
}
?>
</body>
</html>
5
Форма ответа