Анонсы:
|
PHP. Урок 11 Обработка HTML-формУрок 11. Обработка HTML-формПричина популярности PHP в том, что он позволяет легко обрабатывать данные, полученные из HTML-форм. В этом уроке вы узнаете, как получить доступ ко всем данным из HTML-форм. Отправка данных из формы в PHPОбычно формы используют для того, чтобы пользователь мог отправить данные на Web-сервер. Рассмотрим подробнее, как это происходит. Дескриптор <FORM>Дескриптор <FORM> задает область, в которой размещаются элементы для ввода текста и другие управляющие элементы, которые отправляют введенные значения на определенный URL. Атрибут ACTION дескриптора <FORM> позволяет задать адрес сценария, куда передаются значения формы. URL можно задать относительно текущей страницы или в полной форме, начав с http://. Атрибут METHOD определяет метод пересылки данных из формы. Есть всего два метода — GET и POST. На первый взгляд они практически ничем не отличаются. Данные, отправленные методом GET, добавляются в конец URL, а данные, отправленные методом POST, не показываются пользователю. Метод GET. URL, в котором передаются данные методом GET, встречается очень часто. Обычно пользователь даже и не догадывается о том, что происходит. Часто этот механизм используется в поисковых системах на Web-страницах. Если после ввода запроса происходит переход по ссылке и в конце адреса добавляется префикс: ?search=yourword, это указывает на то, что используется метод GET. В большинстве случаев лучше использовать метод POST. Кроме того что в адресе не появляется длинного префикса, метод POST не ограничивает объем передаваемых данных. А для метода GET это значение определяется максимальной длинной URL, с которым может работать пользовательский браузер (в Internet Explorer это 2048 символов) и версией HTTP-протокола Web-сервера (HTTP/1.0 позволяет не меньше 256 символов, а HTTP/1.1 – не меньше 2048). Дескриптор <INPUT>Дескриптор <INPUT> позволяет задать несколько типов ввода для HTML-формы. Атрибут TYPE задает тип ввода, а значение TEXT соответствует простому элементу текстового ввода. Тестовое поле для ввода почтовых адресов задается следующим образом: В этом HTML-коде, атрибут VALUE – пустой, потому что не нужно задавать стандартное значение для этого поля. В данном случае его можно совсем не писать. Длина поля. Размер поля не влияет на то, как PHP обрабатывает принятые значения. Для текстового поля ввода установлен в 30 символов, но не указывается атрибут MAXLENGTH, так что пользователи с очень длинными именами смогут их ввести. Тип ввода CHECKBOX задает флажок, который может находится только в двух состояниях — установлен/сброшен. Флажок используется для значений истина/ложь. Создадим элемент, который спрашивает пользователя о разрешении связаться с ним: В этом случае после загрузки страницы атрибут CHECKED автоматически установит флажок. Тип RADIO (переключатель) напоминает обычный флажок, но вместо значений истина/ложь, переключатель имеет несколько значений, и выбрать можно только одно. В примере ниже задается элемент "переключатель", который проверяет пол: Название переключателя. Атрибут NAME объединяет переключатели. Можно выбрать только один вариант для группы переключателей. Кроме того, можно разместить несколько групп переключателей на странице. В этом примере оба варианта имеют одинаковое имя gender. Чтобы выбрать один из вариантов по умолчанию, достаточно указать в нем атрибут CHECKED. Например, если сайт ориентирован на женскую аудиторию, можно отметить по умолчанию соответствующую опцию: Рассмотрим последний на сегодня тип элемента ввода — SUBMIT (кнопка подачи формы). Кнопка подачи формы отправляет содержимое формы по адресу, указанному в атрибуте ACTION. Надпись на кнопке задается в атрибуте VALUE. В примере ниже создается кнопка подачи формы с надписью «Отправить комментарий»: Для кнопки подачи формы можно указать атрибут NAME, но это редко используется. Ниже в этом уроке рассказывается, как это повлияет на значения, которые получает PHP. Дескриптор <TEXTAREA>Дескриптор <TEXTAREA> создает элемент ввода текста с несколькими строками. Во многих отношениях он напоминает тип TEXT дескриптора <INPUT>, но отличается способом задания в HTML-коде. Стандартное значение дескриптора <TEXTAREA> может занимать несколько строк, поэтому вместо атрибута VALUE оно размещается между парой дескрипторов: PHP не интересует, из какого элемента получено значение, различие будет только в HTML-коде. Дескриптор <SELECT>Напоследок рассмотрим элемент формы <SELECT>, который называется раскрывающимся списком. Чаще всего раскрывающийся список используется для того, чтобы выбрать один элемент из заданного списка значений. В примере ниже создается раскрывающийся список. В нем перечислены источники, из которых посетители могли узнать о сайте: В данном случае атрибут SELECTED устанавливает стандартный элемент "Другое", даже если он установлен в верху списка. Если нет элемента с атрибутом SELECTED, первый элемент выбирается по умолчанию. Соберем все вместеЕсли собрать все элементы формы вместе, добавить несколько текстовых надписей и немного форматирования, можно создать простую форму для отправки комментариев, как показано в листинге 11.1.
<FORM ACTION="send_comments.php" METHOD="POST"> Обработка форм с помощью PHPТеперь рассмотрим, как обработать элементы формы с помощью PHP после отправки пользователем данных. Доступ к значениям формыДоступ к значениям формы в PHP можно получить с помощью специальных массивов. Массивы $_GET и $_POST содержат значения, отправленные, соответственно, методами GET и POST. Гибридный массив $_REQUEST содержит значения из обоих массивов, а также значения массива $_COOKIE. Суперглобальность. Системные массивы, имя которых начинается с подчеркивания, называются суперглобальными. К ним можно обратиться из любой точки сценария PHP, независимо от области видимости. Например, не нужно объявлять массив $_POST как глобальный для того, чтобы использовать его в функции. Доступ к значениям элементов формы интуитивно понятен. Элементу формы с определенным именем соответствует элемент массива $_GET или $_POST с соответствующим ключом. А значение этого элемента соответствует введенному пользователем значению для этого элемента. Например, почтовый адрес из странички comments.html содержится в элементе $_POST["email"], а текст комментария — в $_POST["comments"]. Для типов CHECKBOX и RADIO атрибут VALUE определяет значение, которое получит PHP. Если установить флажок may_contact, элемент $_POST["may_contact"] будет содержать значение Y. Если же этот элемент оставить не установленным, он вообще не появится в соответствующем массиве. Поэтому нужно использовать функцию isset, чтобы узнать установлен ли флажок. Стандартное значение флажка. Если флажок установлен, но в HTML-коде для него не задан атрибут VALUE, в PHP передается on. Группа переключателей gender создает элемент $_POST["gender"], который содержит значение m или f, в зависимости от выбранного значения. Если не один из переключателей не отмечен, как и в случае с флажком, соответствующий элемент не создается вообще. С помощью функции print_r легко увидеть все значения, полученные из формы. Для этого на ее вход подается массив $_POST: Это очень полезный прием отладки, который позволяет увидеть все данные, которые сценарий получает из формы. Если создать файл send_comments.php и поместить в него код, приведенный выше, на экране появятся значения каждого элемента формы. Вот пример вывода: Даже значение кнопки подачи формы можно увидеть в PHP. Для этого нужно задать имя и отправить форму, щелкнув на нужной кнопке. Следующая форма содержит две кнопки с разными именами, а PHP позволяет определить, какая из них отправила форму: В button.php можно использовать следующую проверку для того, чтобы определить, на какой кнопке сделан щелчок: Атрибут VALUE кнопки подачи формы задает текст на кнопке, а также передается в PHP, когда щелкают на этой кнопке. Кнопка submit. Новые браузеры отправляют данные формы, если нажать на клавишу <Enter>, когда фокус находится на элементе ввода. Даже если в форме всего один элемент подачи формы, его значение передается в PHP, только если щелкнуть на этой кнопке. Элемент скрытого вводаЕсть еще один тип дескриптора <INPUT>, который используется для передачи данных между сценариями и при этом не отображается на Web-странице. Тип HIDDEN имеет атрибуты NAME и VALUE, которые заменяют это значение. Он используется, чтобы подменить эти значения. Следующий элемент скрытого ввода передается в PHP-сценарий при отправке формы, и элемент $_POST["secret"] содержит это значение: Но будьте осторожны. Тип HIDDEN не подходит для передачи секретных паролей или другой важной информации. Несмотря на то что он не отображается на Web-странице, просмотр HTML-кода позволяет узнать эти значения. Сценарий для отправки электронной почтыЧтобы реализовать максимум удобств, реализуем отправку пользовательских комментариев на почтовый ящик владельца Web-сайта. Посмотрим, как объединить все части, чтобы сделать сценарий-обработчик, который будет выполнять эту функцию. Функция mailФункция mail отправляет сообщения с помощью системного почтового сервиса. На системах Linux/Unix для отправки почты используется утилита sendmail. На серверах под управлением Windows для этого используется протокол SMTP. Для корректной работы нужно задать имя почтового сервера в файле php.ini. Для функции mail нужно задать три аргумента: почтовый адрес получателя, тему и текст сообщения. Четвертый необязательный аргумент задает дополнительные заголовки письма. Это позволяет указать специальные параметры From: или Cc:. Сценарий send_comments.php в листинге Листинг 11.2 принимает данные из формы комментариев и отправляет их владельцу Web-сайта на почтовый ящик. Сценарий проходит по всем значениям массива $_POST и создает строку $body для текста письма. Отметим, что символы \n используются для разделения строчек, потому что письмо передается обычным текстом, без HTML-форматирования.
<?php Письмо, которое получит владелец сайта, будет выглядеть примерно так: Это письмо отформатировано довольно небрежно, потому что генерируется автоматически. Конечно, при желании его можно оформить намного лучше. Например, можно заменить кодовые значения gender и referrer на полное описание. РезюмеВ этом уроке вы научились обрабатывать данные, полученные из HTML-форм. В следующем уроке вы узнаете, как динамически генерировать такие элементы HTML, как раскрывающиеся списки и переключатели. |
Погода в Рудне на 10 Дек 2024 г. 704 - Вьетнамских донгов - 1 |