Публикации с тегом "forms"

Обработка данных из HTML-форм при помощи PHP часть 2

С набором радиобаттонов (HTML-элементы input типа radio) все предельно просто. Из группы можно выбрать только один, поэтому и параметр передается один. Хотя, есть случай, когда ни один из элементов не отмечен. Сделаем обработку небольшой HTML-формы:

<?php
 
  if ( count($_GET) > 0 )
  {
      if ( isset($_GET['color']) ) //--Проверяем, был ли передан параметр color
      {
          echo 'Вы выбрали: ';
          switch( $_GET['color'] )
          {
              case 'red': echo 'красный'; break;
              case 'green': echo 'зеленый'; break;
              case 'blue': echo 'синий'; break;
          }
      }
      else
      {
          echo 'Вы ничего не выбрали!';
      }
      exit;
  }
 
?>
 
<form method="GET" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  <input type="radio" id="red" name="color" value="red" /> <label for="red">Красный</label> <br />
  <input type="radio" id="green" name="color" value="green" /> <label for="green">Зеленый</label> <br />
  <input type="radio" id="blue" name="color" value="blue" /> <label for="blue">Синий</label> <br />
  <input type="submit" name="submit" value="Send" />
</form>

PHP-обработчик умеет определять выбранное пользователем значение, а также отсутствие выбора. Сделаем, чтобы выбор пользователя сохранялся после выполнения запроса (то есть, чтобы выбранный элемент оставался отмеченным). Элемент типа radio генерируется отмеченным, если он имеет атрибут checked со значением checked. Хранить варианты будем в массиве, а генерировать элементы формы динамически с помощью PHP.

Обработка данных из HTML-форм при помощи PHP

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

Итак, данные из HTML-форм отправляются при помощи GET или POST HTTP-запросов. В GET-запросе параметры находятся непосредственно в URL и видны в адресной строке браузера. В POST-запросе данные находятся в теле HTTP-пакета. Данные получает страница, указанная в атрибуте action тега HTML-формы form, например, PHP-скрипт.

Зачастую страница, генерирующая HTML-форму и страница, принимающая данные из нее физически представляет из себя один PHP-файл. Это удобно в том случае, когда, допустим, при некорректных введенных данных необходимо повторно показать форму пользователю и указать на его ошибки. Также это упрощает структуру движка сайта и его последующий анализ. Но все зависит от конкретных задач.

С точки зрения PHP принципиального отличия между GET и POST-параметрами нет. GET-параметры размещаются в глобальном массиве $_GET, POST — в $_POST.

Рассмотрим такой пример:

<form method="GET" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  <input type="text" name="name" /><br />
  <input type="submit" value="Send" />
</form>

Сразу обратите внимание, что значение атрибута action представляет собой PHP-вставку. Переменная $_SERVER['PHP_SELF'] содержит имя и путь текущего выполняемого PHP-скрипта относительно корневого каталога веб-сервера. Таким образом, action всегда будет указывать на самого себя, в независимости от расположения и имени файла.

HTML-формы

Как вы уже знаете, веб-клиент имеет возможность передавать веб-серверу различную информацию при помощи GET и POST-запросов. HTML-формы — это основной инструмент для создания таких запросов. По сути, HTML-форма представляет собой поле или поля для ввода информации на веб-странице. Наглядным примером HTML-формы служит форма ввода логина и пароля для авторизации на сайте.

HTML-форма описывается с помощью парного тега form. Этот тег имеет два важнейших атрибута: method и action. В атрибуте method задается тип HTTP-запроса (get или post), в action — запрашиваемый документ, то есть путь к файлу, запрос которого будет осуществлен. Путь может быть как абсолютным (с указанием домена сайта), так и относительным. Например:

<form method="get" action="/login.php">
...
</form>

Существует несколько различных видов элементов для ввода данных, которые помещаются внутри формы. Элемент, с которого я хотел бы начать, называется submit:

<input type="submit" value="Войти" />

Элемент представляет собой кнопку, нажатие на которой приводит к выполнению HTTP-запроса. Атрибут value задает надпись на кнопке. Форма может содержать несколько элементов submit. Чтобы в запрашиваемом документе определить, по какой именно из кнопок было произведено нажатие, необходимо элементам submit установить атрибуты name. Например:

<form method="get" action="/control.php">
  <input type="submit" name="submit" value="Add" />
  <input type="submit" name="submit" value="Edit" />
</form>