Недавно нашу рассылку перевели в категорию «Серебряные», что привлекло огромное количество подписчиков в рассылку. Для вновь подписавшихся хочу сказать, что рассылка «PHP за чашкой кофе» подходит в первую очередь тем, кто впервые сталкивается с понятием PHP или плохо умеет в нём работать. Если Вы уже умеете работать в PHP, и решили повысить квалификацию, то вряд ли рассылка повысит Ваш уровень, так как я рассказываю о PHP последовательно, начиная
с простейших тем, которые для Вас уже известны. Если же Вы относитесь к людям, которые желают изучить PHP, то внимательно ознакомьтесь с первыми двумя выпусками рассылки.
В этот раз рассылка вышла несколько позже обычного. Прошу меня простить за нерасторопность. Обещаю исправиться в самое ближайшее время.
Если помните, в прошлой чашечке мы разобрались с переменными и действиями с ними. А сегодня Вы узнаете, как можно
получить эти переменные от пользователя.
HTML-формы
В языке HTML существуют такие элементы, как <form> и <input>. Первый из них предназначен для создания так называемой «формы», то есть специального элемента, который может содержать в себе различные элементы — текстовые поля, флажки, кнопки. Пользователь как-либо меняет значения элементов этих форм и отправляет результат своей работы на сервер.
Именно формы и представляют собой то, что поможет нам получать данные от пользователей.
Содержимым любой формы являются элементы <input>, <select> и некоторые другие. Краткая аннотация к типам элементов представлена в таблице 1.
Элемент
Описание
Пример
Внешний вид
input type=text
Создаёт текстовое поле. Возможные параметры: name – имя поля value – значение по-умолчанию maxlength – максимальная длина текста
<input type="text" name="UserName" value="Введите своё имя" maxlength="25">
input type=password
Создаёт поле пароля. Возможные параметры: те же, что и у input type=text
Конечно, видов элементов гораздо больше, но сейчас мы будем работать только с этими элементами, так что о других пока умолчим.
Форма
Для обозначения формы служит HTML-тег <form>. Вкратце напомню о его параметрах:
Пример 1. Внешний вид тега <form>:
<form action="скрипт" method="метод">
Здесь идёт содержимое формы
</form>
Скрипт — в нашем случае PHP-скрипт, который будет обрабатывать содержимое формы.
Метод — вид передачи данных скрипту-обработчику
Методы передачи данных
Всего существует два метода передачи данных от формы к обработчику. Эти методы называются GET и POST. В чём между ними различия? Различие очень простое. Посмотрите на такой код:
Это код формы поиска с сайта ya.ru. Во-первых о форме: Вы видите, что установлен метод GET, а файл, который будет обрабатывать данные из формы — http://www.yandex.ru/yandsearch.
Теперь об элементах формы: первый input имеет тип "hidden" и никак не отображается. Его имя — rpt, а значение — rad. Второе поле input является, пожалуй, самым важным элементом формы. Это поле ввода строки поиска.
Его имя — text, значение по-умолчанию — пустое. Максимальная длина текста составляет 160 символов. И третий элемент формы — это кнопка-submit, которая просто отправляет содержимое формы скрипту-обработчику (посмотрите ещё раз — какой у него URL).
Когда Вы нажмёте на кнопку «Найти!» браузер перешлёт Вас на такой URL: http://www.yandex.ru/yandsearch?rpt=rad&text=PHP. Заметьте, что он состоит
из адреса скрипта-обработчика (http://www.yandex.ru/yandsearch) и из специальных данных, находящихся после вопросительного знака (?rpt=rad&text=PHP). Эти данные и являются GET запросом. То есть всё, что мы указали в форме при отправке вписывается прямо после адреса обработчика. Причём, чтобы отделить адрес обработчика от параметров используется знак вопроса (?), а чтобы отделить один параметр от другого взят амперсанд (&). Полный разбор URL:
http://www.yandex.ru/yandsearch
?
rpt=rad
&
text=PHP
И
есть другой метод отправки данных. Он называется POST. Разница между GET и POST состоит в том, что если в методе GET параметры указываются прямо в адресе вызываемого скрипта, то в методе POST все эти данные будут отосланы отдельно по каналам электронной почты. И получается, что если в методе GET у нас получился адрес http://www.yandex.ru/yandsearch?rpt=rad&text=PHP, то в методе POST получится http://www.yandex.ru/yandsearch,
а данные из формы будут отосланы отдельно.
А что же получится?
Ну вот, с тем как передаются данные мы разобрались. Осталось разобраться с тем, в каком виде мы эти данные получим. И в этом плане разработчики PHP пошли нам навстречу.
Дело в том, что при получении данных из формы PHP создаёт одноимённые переменные, которые Вы можете сразу же использовать. Посмотрите на пример с поисковой формой (пример 2). Если в поле action тега <form>, вместо http://www.yandex.ru/yandsearch
указать какой-нибудь PHP-скрипт, то, когда пользователь заполнит форму и нажмёт кнопку «Найти!», запустится этот PHP-скрипт, в котором уже будут существовать две переменные: $rpt="rad" и $text="текст, который пользователь ввёл". Вот так всё просто и легко.
Чтобы проверить это создайте в сайте «php» (который мы сделали в прошлом выпуске рассылки) файл cup3.html, в который впишите такой код:
Как Вы видите, в документе есть две формы. Одна из них отправляет данные методом GET скрипту cup3.php, а вторая — методом POST скрипту cup3_post.php.
Теперь создайте файл с именем cup3.php и впишите такой код:
Пример 4. Код файла cup3.php
<html><body>
<h1>Проверка метода GET:</h1>
<?php // сейчас PHP-скрипту «известны» значения переменных из формы // эти значения он и выводит // echo ("Здравствуйте, " . $userName); echo ("<hr>"); echo ("Значение скрытого поля hideField
равно " . $hideField); ?>
</body></html>
Теперь создайте файл с именем cup3_post.php (им мы проверим правильность передачи переменных методом POST) и впишите такой код:
Пример 5. Код файла cup3_post.php
<html><body>
<h1>Проверка метода POST:</h1>
<?php // сейчас PHP-скрипту «известны» значения переменных из формы // они были получены методом POST, но используются также, как при методе GET // echo ("Здравствуйте, " . $userName_post); echo ("<hr>"); echo ("Значение скрытого поля hideField_post равно " . $hideField_post); ?>
</body></html>
Проверьте, правильно ли работают скрипты, и всё ли выводится так, как и должно.
Пару слов об использовании каждого из методов
Должен сказать, что каждый метод стоит использовать в своей ситуации. Метод GET чаще используется при передаче от пользователя небольшой порции данных.
Другое дело — если пользователь должен ввести, например, большой текст (допустим, написать в текстовом поле <textarea> своё резюме). Тогда лучше использовать
метод POST, потому что размеры GET-запроса ограничены.
У каждого из методов есть свои достоинства и свои недостатки. По мере наших выпусков я буду уделять им внимание, когда это необходимо. Пока же помните: большой объём данных — POST.
И в заключение
Как видите, получать данные от пользователей легко и просто. Программисты, работающие над улучшением PHP серьёзно подошли к этому делу и сейчас нам на помощь приходят простота и удобство всего механизма получения
данных. Нам остаётся лишь пользоваться их работой и благодарить их за дальновидность.
Советую Вам, в качестве «домашнего задания» подготовить какую-либо форму и обработчик к ней. Постарайтесь сделать как можно больше полей и сделайте так, чтобы все они работали.
Следующий выпуск будет посвящён основным конструкциям языка PHP.
Если у Вас что-то не получается — пишите мне, а я постараюсь помочь каждому из Вас в освоении PHP.