htmlbook.ru - Для тех, кто делает сайты
Шаг за шагом Графика для Web
Шаг за шагом > Формы по шагам > Получение данных формы

Шаг 20. Получение данных формы

Влад Мержевич

Рассказ о формах был бы не полным, если не затронуть вопрос, что же делать с данными дальше, после того, как они введены пользователем и отправлены на сервер. Там информация уже анализируется и сохраняется в случае необходимости. Централизованное хранение данных на сервере, например в базе данных, позволяет организовывать множество интересных вещей — от обычных опросов до сложных форумов.

В качестве обработчика формы может выступать любой серверный язык программирования — Perl, Си, Python, PHP и т.д. В дальнейшем рассмотрим манипуляции с данными формы при помощи PHP, как одном из наиболее популярных и доступных языков.

Использование глобальных переменных

Каждому элементу формы, у которого есть уникальное имя, заданное параметром name, сопоставлена переменная с тем же именем (со знаком доллара впереди). Так, в примере 20.1 показано создание формы с текстовым полем username. Поскольку для тега <FORM> не указано значение параметра action, данные формы будут отправлены на эту же самую страницу. Код PHP проверяет, установлено ли какое-либо значение у переменной $username и если да, то выводит его в окне браузера.

Пример 20.1. Использование глобальных переменных

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <title>Глобальные переменные</title>
 </head>
 <body>

<?php
// Функция isset проверяет, присвоено ли переменной $username какое-либо значение 
  if (isset($username)) { 
// Выводим текст
    echo "Привет, $username";
  }
  else {
?>
  <form action="">
    <p><b>Введите ваше имя:</b><br>
     <input type="text" name="username"></p>
     <p><input type="submit" value="Отправить">
  </form>
<?php
  }
?>
 </body>
</html>

В данном примере вначале идет проверка на существование значения переменной $username с помощью функции isset. Если какое-либо значение присвоено, оно будет выведено, в противном случае отображается форма, где требуется ввести имя пользователя.

Замечание

В настройках PHP (файл php.ini) можно запретить работу с глобальными переменными (register_globals = Off), в таком случае указанный пример не будет работать должным образом. Желательно вообще обходиться без глобальных переменных, что делается обычно в целях безопасности.

Массивы $HTTP_GET_VARS и $HTTP_POST_VARS

Для доступа к данным формы, переданной через метод GET или POST, используются специальные массивы, соответственно, $HTTP_GET_VARS и $HTTP_POST_VARS. Например, имя поля формы, заданное параметром name, называется lorana, тогда для получения значения этого поля используется запись $HTTP_GET_VARS["lorana"]. Это будет в том случае, если параметр method тега <FORM> равен значению get или вообще отсутствует, поскольку по умолчанию значение атрибута method равно get. Аналогично обстоит дело и с методом POST.

В примере 20.2 показано, как получать данные формы и выводить их в окне браузера.

Пример 20.2. Получение данных через метод GET

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <title>Метод GET</title>
 </head>
 <body>
<?php
 if (isset($HTTP_GET_VARS["drink"])) {
  echo "Вы предпочитаете пить " . $HTTP_GET_VARS["drink"];
 }
 else {
?>
  <form action="">
   <p><b>Что вы предпочитаете пить?</b></p>
   <p>
    <input type="radio" name="drink" value="пиво">Пиво<br>
    <input type="radio" name="drink" value="чай">Чай<br>
    <input type="radio" name="drink" value="кофе">Кофе<br>
    <input type="radio" name="drink" value="молоко">Молоко 
    </p>
   <p><input type="submit" value="Отправить"></p>
  </form>
<?php
 }
?>
 </body>
</html>

В данном примере создается группа переключателей, значение у которых определяется параметром value тега <INPUT>, а имя — парметром name. Выбранный пользователем вариант получаем через массив $HTTP_GET_VARS["drink"], где drink  — это имя переключателя.

Массивы $_GET и $_POST

Существуют аналогичные массивы для хранения данных переданных через метод GET или POST — соответственно, $_GET и $_POST. Они имеют более короткую форму записи и скорее по этой причине применяются довольно часто. Принцип работы с этими массивами достаточно прост. Если в форме используется метод GET, то для получения значения элемента формы достаточно указать $_GET["имя поля"], где имя определяется параметром name.

В примере 20.3 показано использование массива $_POST для получения данных формы.

Пример 20.3. Получение данных через метод POST

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
  <title>Получение данных формы</title>
 </head>
 <body>
<?php
  if (isset($_POST["test"])) {
   $answer = $_POST["test"];
   if ($answer == "a4") echo "Правильный ответ.";
   else echo "Вы ошиблись с ответом";
  }
  else {
?>
   <form method="POST">
    <p><b>Какой тег указан неверно?</b></p>
    <p>
     <input type="radio" name="test" value="a1">DT<br>
     <input type="radio" name="test" value="a2">DFN<br>
     <input type="radio" name="test" value="a3">DEL<br>
     <input type="radio" name="test" value="a4">DV<br> 
     <input type="radio" name="test" value="a5">DL<br> 
    </p>
    <p><input type="submit" value="Ответить"></p>
   </form>
<?php
  }
?>
 </body>
</html>
Статья опубликована: 12.08.2005 Последнее обновление: 12.11.2008
Формы по шагам

Copyright Влад Мержевич, по всем вопросам пишите по адресу: vlad@htmlbook.ru