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

Программирование с нуля - это совсем просто! 108) Курс PHP: Делаем психологический тест - 2


Школа программирования

108) Курс PHP: Делаем психологический тест - 2

Последний выпуск по PHP - был в выпуске N 105.

Завершаем психологический тест.

Теперь дополним программу средствами получения от пользователя номера ответа (с помощью кнопок-флажков) и подсчета результата. Для этого воспользуемся уже изученным нами полем формы radio:

  <input type=radio name=vopros value=1>
  <input type =radio name= vopros value=2>
  <input type =radio name= vopros value=3>

Соответствующее значение (1, 2 или 3) варианта ответа, который пользователь выберет в форме, будет доступен в сценарии в виде переменной формы vopros:

print $_POST["vopros"];

Каждому полю ответа должен соответствовать свой текст вопроса. Сделать это можно в сценарии, например, так:

  <form action="action.php" method="POST">

  <?php

  for( $i = 1; $i <= 3; $i ++ ) {
    print $Asks[ $vopros_no ][ $i ];
    print "<input type=radio name=vopros value=$i><p>";
  }

  ?>

  <input type="submit" value="Answer">
  </form>

Недостаток такого кода в том, что выводиться тексты ответов будут вместе с их оценками в баллах (последний символ). Чтобы этого не происходило, введем промежуточную переменную $sv, в которую запишем текст вопроса без последнего символа.

$sv = $Asks[ $vopros_no ][ $i ];

Проще всего сделать это с помощью мощной функции PHP для выделения подстроки - substr(). В качестве ее первого параметра указывается строка для анализа, в качестве второго - начальная позиция символа (начиная с нуля), с которого будет выделяться подстрока, и затем - длина выделяемой подстроки. Если третий параметр опущен, значит, будет вырезан весь остаток до конца.

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

В нашем случае лучше всего подходит вариант с отрицательным третьим параметром:

$sv = substr( $sv, 0, -1 );

Итогом будет строка, у которой отброшен последний символ.

  for( $i = 1; $i <= 3; $i ++ ) {
    $sv = $Asks[ $vopros_no ][ $i ];
    $sv = substr( $sv, 0, -1 );
    print $sv. "<p>";
    print "<input type=radio name=vopros value=$i><p>";
  }

Остается только добавить в скрипт переменную, в которой будет храниться сумма ответов на вопросы (инициализация ее нулем может выполняться в момент регистрации сессии), и увеличивать ее в зависимости от номера текущего вопроса и сделанного пользователем ответа. Конкретное количество баллов, которое необходимо прибавить к сумме, хранится в массиве вопросов - в виде того последнего символа, который мы отбросили.

В PHP нет различий между представлением числа непосредственно в виде числа, или же в виде строки в кавычках. Так, оба следующих выражения будут корректны:

$n = 10;
$n += 15;

и

$n = 10;
$n += "15";

Поэтому мы можем просто использовать последний символ в каждом ответе как число. Выделить этот символ можно с помощью упомянутой функции substr():

  ...
  $sv = $Asks[ $vopros_no ][ $i ];
  $sv = substr( $sv, -1 ); // третий параметр опущен!
  $summa += $sv;
  ...

Задание. Завершите программу тестирования, выдавая в зависимости от суммы баллов одно из финальных сообщений. По завершении теста выполните закрытие сессии.


(c) 2004-2006 Сергей Бобровский bobrovsky@russianenterprisesolutions.com

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/

Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное