Работа с формами
В этом посте показано, как в PHP легко перерабатывать данные, полученные от HTML-форм. Чтобы понять о чём идёт речь Вам нужно хорошо разбираться в HTML и принципах работы HTML-форм и а также понимания разницы двух методов передачи данных в них (GET И POST).
Чаще всего серверные скрипты используются для обработки результатов заполнения форм. Например, в гостевой книге посетитель вводит данные в форму, которая затем обрабатывается на сервере. Отвечая на какой-либо опрос пользователь, аналогично, устанавливает значение определенных полей формы.
Напомню, какие тэги и атрибуты должна содержать форма:
<FORM NAME="имя_формы"
ACTION="путь_к_обработчику"
METHOD="метод_передачи_переменных">
поля ввода...
</FORM>
Цветом выделены те элементы, которые пригодятся нам в этом опыте. Прежде всего разберемся, что такое "обработчик". Это скрипт на сервере, в который будут переданы значения полей ввода.
Каждое поле ввода имеет атрибут NAME, которое будет передано в обработчик вместе со своим значением.
Существует два метода передачи данных: GET и POST. Их отличие состоит в том, что при использовании метода GET значения полей присоединяются к URL, указанному в атрибуте ACTION. Происходит это таким образом:
http://site.domain/action.php3?имя=значение&...имя=значение
Пары "имя=значение" создаются для каждого элемента ввода, для которого указано имя атрибутом NAME.
В случае использования метода POST значения полей передаются в заголовке запроса к серверу. Формат передачи при этом методе нам, в общем-то, не интересен. Просто примем к сведению, что значения передаются "незаметно" для обычного пользователя.
При исполнении скрипта на языке PHP создаются переменные с именами, соответствующими именам полей и содержащие соответствующие значения.
Предположим, что мы создали форму следующего вида:
<FORM ACTION="mult.php3" METHOD="GET">
<INPUT TYPE="text" NAME="first" SIZE="4" MAXLENGTH="4">
<INPUT TYPE="text" NAME="second" SIZE="4" MAXLENGTH="4">
<INPUT TYPE="Submit" VALUE="Умножить">
</FORM>
Скрипт, содержащийся в файле mult.php3 может выглядеть следующим образом:
<?php
Header("Content-type: text/html");
echo "$first умножить на $second получится ", $first*$second;
?>
Как видим, все довольно просто.
Необходимо напомнить, что существует специальный тип поля HIDDEN. Это поле, которое не выводится на экран, но, если ему присвоено имя атрибутом NAME, значение егопередается в форму. Это бывает полезно, например, когда один обработчик может производить не одно, а несколько действий. С помощью такого поля мы можем задать тип действия, которое мы хотим произвести с данными формы.
В следующей таблице перечислены все возможные элементы ввода, которые используются в формах.
Тип Описание Вид
TEXT Поле ввода текста
SELECT Выбор из списка.
RADIO Радио-кнопка. Используется для выбора одного из предложенных вариантов.
CHECKBOX Кнопка-флажок. Используется для выбора варианта.
SUBMIT Кнопка, которая инициирует вызов обработчика формы.
IMAGE Изображение. Используется как кнопка типа SUBMIT
<TEXTAREA> Область ввода текста.
Теперь рассмотрим, как значения и состояния этих элементов передаются в обработчик.
TEXT - здесь все просто. Введенное значение передается в виде: имя=значение (для удобства будем
предполагать, что метод передачи значений установлен в GET). В обработчике значение можно получить из
переменной $имя.
SELECT - значение берется из атрибута VALUE выбранного элемента <OPTION>. Например для <SELECT>
такого вида:
<SELECT NAME="mySelect">
<OPTION VALUE="test1">test1</OPTION>
<OPTION VALUE="test2">test2</OPTION>
<OPTION VALUE="test3">test3</OPTION>
</SELECT>
Cтрока будет содержать mySelect=test1, в случае выбора первого элемента списка. Переменная в скрипте будет выглядеть так: $mySelect.
Элемент <SELECT> может иметь атрибут MULTIPLE, что позволяет выбирать несколько значений из списка. В этом случае к имени элемента <SELECT> необходимо добавить пару квадратных скобок: имя[]. Строка будет выглядеть так: имя[]=значение&имя[]=значение..., а в скрипте доступ к выбранным значениям можно осуществить, как к элементам массива $имя.
В случае, если не заданы атрибуты VALUE, то передаваться будет то, что содержится между тэгами <OPTION> и </OPTION>.
RADIO - Здесь значение будет браться из атрибута VALUE, строка выглядит аналогично элементу типа TEXT.
Доступ из скрипта, тоже аналогичен. Если вы забыли установить это значение, то будет передано значение on CHECKBOX - если флажок установлен, то передается значение on, если флажок не установлен, то переменная не передается вообще. Таким образом, установку флажка в скрипте можно проверить, сравнив значение переменной $имя с "on". Переменная и строка выглядят аналогично элементу типа TEXT.
SUBMIT - кнопка SUBMIT, как ни странно, тоже может передавать значениев обработчик. Я не могу себе представить зачем это нужно, но тем не менее. Значение устанавливается из атрибута VALUE. Все остальное аналогично полю типа TEXT.
IMAGE - Самый интересный элемент. В обработчик передаются два значения: имя.x и имя.y, которые представляют собой координату указателя мыши относительно верхнего левого угла изображения. Строка выглядит следующим образом: имя.x=значение&имя.y=значение. В скрипте устанавливаются переменные $имя_x и $имя_y.
<TEXTAREA> - абсолютно аналогично элементу типа TEXT.
При пересылки строковых значений они перекодируются специальным образом. Все символы, кроме алфавитно-цифровых и знака подчеркивания "_" заменяются знаком процента "%" и двумя
шестнадцатеричными цифрами кода. Пробелы заменяются на знак "+". При установке переменных в скрипте производится обратное декодирование.
PHP предоставляет еще одну интересную особенность. Мы можем каждому элементу присвоить имя переменной массива. Например:
<FORM NAME="testForm" ACTION="test.php3">
name: <INPUT TYPE="text" NAME="personal[name]"><BR>
e-mail: <INPUT TYPE="text" NAME="personal[email]"><BR>
<INPUT TYPE="SUBMIT">
</FORM>
В этом случае мы сможем получить доступ к значениям, обращаясь к элементам ассоциативного массива: $personal["name"] и $personal["email"].
Кроме того, если включена директива PHP <?php_track_vars?>, то, при передаче значений, будут заполнены массивы $HTTP_GET_VARS и $HTTP_POST_VARS, для соответствующих методов передачи переменных в обработчик
Вызов формы самой на себя.
Александр Качанов (kachanov@ogs.gomel.by)
Вадим Ткаченко (vvtk@stealthcomp.com) (http://web.stealthcomp.com)
1 комментарий:
Подскажите пожалуйста какой учебник по PHP наиболее подходит новичку? Просто я пытаюсь создать свой сайт бесплатно и решил изучить PHP.
Отправить комментарий