Html передать параметр серверу
Способы передачи параметров сценарию
Наиболее распространенными методами передачи данных между браузером и сценарием являются GET и POST. Однако вручную задавать строки параметров для сценариев и к тому же URL-кодировать их, согласитесь, довольно утомительно. Давайте посмотрим, что предлагает нам для облегчения жизни HTML.
Мы будем рассматривать метод GET для передачи запросов серверу.
Даже программисту утомительно набирать параметры в URL вручную. Различные ?, &, %. Представьте себе пользователя, которому необходимо это делать. К счастью, существуют удобные возможности языка HTML, которые, конечно, поддерживаются браузерами.
Итак, пусть у нас на сервере в корневом каталоге размещен файл сценария script.php. Этот сценарий распознает 2 параметра: name и age . Где эти параметры задаются, мы пока не решили. При переходе по адресу http://site/script.php он должен отработать и вывести следующую HTML-страницу:
Разумеется, при генерации страницы нужно name и age заменить на соответствующие значения, переданные в параметрах.
Передача параметров через адресную строку браузера
Давайте попробуем включать параметры прямо в URL, в строку параметров. Таким образом, если запустить в браузере http://site/script.cgi?name=Vasya&age=20 мы получим страницу с нужным результатом:
Привет, Vasya! Я знаю, Вам 20 лет!
Обратите внимание, что мы разделяем параметры символом &, а также используем знак равенства =. Чуть нуже мы поясним, что это значит.
Использование HTML-форм
Как теперь нам сделать, чтобы пользователь мог в удобной форме ввести свое имя и возраст? Очевидно, нам необходимо интерактивное окно, в которое осуществляется ввод наших параметров, причем через браузер.
Итак, нам понадобится обычный HTML-документ (например, с именем form.html и расположенный в корневом каталоге) с элементами диалога — полями ввода текста и кнопкой, при нажатии на которую запустится скрипт script.php. Текст документа form.html:
Введите имя:
Введите возраст:
Загрузим наш документ в браузер. Теперь, если ввести в поле с именем свое имя, а в поле для возраста — свой возраст и нажать кнопку, браузер автоматически обратится к сценарию hello.php и передаст через ? все атрибуты, расположенные внутри тэгов в форме и разделенные символом & в строке параметров. Заметьте, что в атрибуте action тэга мы задали относительный путь, т. е. сценарий hello.php будет искаться браузером в том же самом каталоге, что и файл form.html.
Как мы знаем, все перекодирования и преобразования, которые нужны для URL-кодирования данных, осуществляются браузером автоматически.
Использование форм позволяет в принципе не нагружать пользователя такой информацией, как имя сценария, его параметры и т. д. Он всегда будет иметь дело только с полями, переключателями и кнопками формы.
Осталось теперь только определиться, как мы можем извлечь $name и $age из строки параметров и обработать их.
Далее мы рассмотрим, каким же образом PHP скрипт принимает параметры запроса и обрабатывает их.
Передача параметров с помощью HTML-форм
Сначала напишем HTML-документ, который будет содержать практически все элементы HTML-формю Параметры формы мы будем передавать скрипту для последующией обработки. Итак, листинг HTML-документа send.html:
Тестовая форма
В окне браузера данная форма будет выглядеть так
Когда пользователь нажимает кнопку “Отослать форму”, браузер передаст скрипту следующие параметры:
- textfield – значение текстового поля;
- pswfield – значение поля ввода пароля;
- hidden – значение скрытого поля;
- параметры checkbox: checkbox1, checkbox2 и checkbox3 будут переданы только в том случае, если соответствующие им независимые переключатели активны;
- radiobutton – значение группы radio (будет передано одно из значений: Yes или No);
- textarea – содержимое многострочной текстовой области;
- day_s – значение списка с единственным выбором;
- day_m – значения списка с множественным выбором.
Теперь перед нами стоит задача обработки всех параметров переданной формы с помощью PHP скрипта.
Параметры textfield, pswfield и textarea обрабатываются достаточно просто. Например, для отображения значения параметра textfield достаточно написать в обрабатывающем скрипте:
С параметрами checkbox1, checkbox2, checkbox3, и radiobutton дело обстоит несколько сложнее. Если переключатель не активен, то перечисленные параметры вообще не будут переданы на сервер, как будто их вообще не было. Следовательно, при попытке обратиться в скрипте к этим параметрам, мы получим сообщение, что переменная не существует. Поэтому просто написать echo $_POST[‘checkbox1’]; мы не можем, нам необходимо сначала проверить существование этих параметров в запросе. Проверка существования параметра осуществляется с помощью функции isset(), которая служит для проверки существования переменных.
if (isset($_POST[‘checkbox1’])) echo $_POST[‘checkbox1’];
if (isset($_POST[‘radiobutton’])) echo $_POST[‘radiobutton’];
Только после проверки существования перечисленных параметров формы можно начинать работу с переменными.
Сложнее обрабатывать параметры списка с множественным выбором, так как в этом случае параметры передаются так:
Действительно, мы оказались в ситуации, когда один параметр имеет несколько значений. Это напоминает нам массив данных. Действительно, множественный список можно представить в виде массива, а обработать его элементы с помощью цикла foreach. Нам даже не обязательно знать колличество элементов множественного списка. Нам нужно лишь предварительно дать понять PHP, что мы будем передавать массив:
Квадратные скобки []- это признак массива. Циклическая обработка массива осуществляется так:
foreach ($_POST[‘day_m’] as $key=>$value) echo «$key = $value
«;
А теперь приведем окончательный листинг PHP скрипта, обрабатывающего нашу тестовую форму:
Отправка данных формы
Сама форма обычно предназначена для получения от пользователя информации для дальнейшей пересылки её на сервер, где данные формы принимает программа-обработчик. Такая программа может быть написана на любом серверном языке программирования вроде PHP, Perl и др. Адрес программы указывается в атрибуте action тега , как показано в примере 1.
Пример 1. Отправка данных формы
В этом примере данные формы, обозначенные атрибутом name ( login и password ), будут переданы в файл по адресу /example/handler.php. Если атрибут action не указывать, то передача происходит на адрес текущей страницы.
Передача на сервер происходит двумя разными методами: GET и POST, для задания метода в теге используется атрибут method , а его значениями выступают ключевые слова get и post . Если атрибут method не задан, то по умолчанию данные отправляются на сервер методом GET. В табл. 1 показаны различия между этими методами.
GET | POST | |
---|---|---|
Ограничение на объём | 4 Кб | Ограничения задаются сервером. |
Передаваемые данные | Видны сразу всем. | Видны только при просмотре через расширения браузера или другими методами. |
Кэширование | Страницы с разными запросами считаются различными, их можно кэшировать как отдельные документы. | Страница всегда одна. |
Закладки | Страницу с запросом можно добавить в закладки браузера и обратиться к ней позже. | Страницы с разными запросами имеют один адрес, запрос повторить нельзя. |
Какой метод используется легко определить по адресной строке браузера. Если в ней появился вопросительный знак и адрес стал похож на этот, то это точно GET.
Уникальное сочетание параметров в адресной строке однозначно идентифицирует страницу, так что страницы с адресами ?q=node/add и ?q=node считаются разными. Эту особенность используют системы управления контентом (CMS, Content management system) для создания множества страниц сайта. В реальности же используется один файл, который получает запрос GET и согласно ему формирует содержимое документа.
Ниже перечислены типовые области применения этих методов на сайтах.
GET
Передача небольших текстовых данных на сервер; поиск по сайту.
Поисковые системы, формы поиска по сайту всегда отправляются методом GET, это позволяет делиться результатами поиска с друзьями, слать ссылку по почте или выкладывать её на форуме.
POST
Пересылка файлов (фотографий, архивов, программ и др.); отправка комментариев; добавление и редактирование сообщений на форуме, блоге.
Работа с формой по умолчанию происходит в текущей вкладке браузера, при этом допустимо при отправке формы изменить этот параметр и открывать обработчик формы в новой вкладке или во фрейме. Такое поведение задаётся через «имя контекста», которое выступает значением атрибута target тега . Популярные значения это _blank для открытия формы в новом окне или вкладке, и имя фрейма, которое задаётся атрибутом name тега (пример 2).
Пример 2. Открытие формы во фрейме
В данном примере при нажатии на кнопку «Отправить» результат отправки формы открывается во фрейме с именем area .
Элементы формы традиционно располагаются внутри тега , тем самым определяя те данные, которые будут передаваться на сервер. В то же время в HTML5 есть возможность отделить форму от её элементов. Это сделано для удобства и универсальности, так, сложный макет может содержать несколько форм, которые не должны пересекаться меж собой или к примеру, некоторые элементы выводятся с помощью скриптов в одном месте страницы, а сама форма находится в другом. Связь между формой и её элементами происходит в таком случае через идентификатор формы, а к элементам следует добавить атрибут form со значением, равным этому идентификатору (пример 3).
Пример 3. Связывание формы с полями
В этом примере тег однозначно отождествляется через идентификатор auth , а к полям, которые следует отправить с помощью формы, добавляется form=»auth» . При этом поведение элементов не меняется, при нажатии на кнопку логин и пароль пересылаются на обработчик handler.php.
Хотя параметры передачи формы традиционно указываются в теге , их можно перенести и в кнопки отправки формы ( и ). Для этого применяется набор атрибутов formaction , formmethod , formenctype и formtarget , которые являются аналогами соответствующих атрибутов без приставки form. В примере 4 показано использование этих атрибутов.
Все новые атрибуты форм не поддерживаются некоторыми браузерами, в частности, Internet Explorer и Safari.