Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

9.6. Формы HTML (Get/Post)

Как и для скриптов на языке Perl, в Интернете есть множество сайтов, содержащих десятки готовых PHP-программ. Такие ресурсы делятся на два вида:

• наборы функций,

• классы.

Программа на языке РНР, как правило, не «живет сама по себе», а применяется для обработки запросов через интерфейс CGI. Даже если интерпретатор РНР встроен в сервер как модуль, с точки зрения самой пользовательской программы, она работает через CGI. Адля чего творцам чудесных Web-сайтов нужен CGI? Конечно же, для обработки форм. Именно на скрипт указывает параметр action-тега <form action = "doit.phtml">.

В РНР программисту не требуется каким-то особым образом извлекать данные формы. В момент начала выполнения скрипта уже существуют и определены переменные, соответствующие одноименным полям. Например, если форма имеет вид:

<form action = "doit.phtml">

<input name=f1>

<input name=f2>

<input type=submit name=do value="Пoexaли">

</form>

то при старте скрипта doit.phtml в нем уже определены переменные $f1, $f2, $do. Можно указать имя поля в форме как

<select name="sel [ ] " multiple>

...

</select>

В таком случае на момент скрипта, обрабатывающего эту форму, будет определен массив $sel, содержащий выбранные пункты списка select.

По умолчанию и чаще всего форма передается HTTP-методом Post, а статические страницы пользователь обычно получает методом Get. В последнем случае вы тоже можете передавать параметры выполняющемуся скрипту через так называемую строку запроса, т. е. через URL. Выглядит такой URL, например, следующим образом:

www.domain.name.ru/script.phtml?a=5&b=no&c=%2f


ВНИМАНИЕ

Собственно параметры начинаются после знака «?» и состоят из параметров «имя—значение», разделенных знаком «&».


Как и в случае с полями формы, программа script.phtml получит переменные $а, $b, $с в соответствии с собственным содержанием «5», «по» и «/».


СОВЕТ

Обратите внимание на значение переменной $с. Вообще-то лучше не полениться и зайти на сайт www.w3c.org, вдумчиво прочитать документацию о протоколе HTTP 1.1. Это очень поможет вам в профессиональном росте.


Можно комбинировать оба эти метода, т. е. создавать формы и указывать обработчику параметры через URL:

<form method = POST action = "doit.phtml?color=black&hold=l">

...

</form>

Когда форма представлена сценарию РНР, любые переменные от этой формы станут автоматически доступными сценарию РНР. Если конфигурационная опция track_vars включена, то эти переменные будут зафиксированы в ассоциативных массивах $HTTP_POST_VARS (ДЛЯ Post), $HTTP_GET_VARS (для Get) или $HTTP_POST_FILES согласно источнику рассматриваемой переменной. Например:

<form action="test.php" method="post">

Name: <input type="text" name="name1"><br>

<input type="submit">

</form>


ВНИМАНИЕ

Когда вышеупомянутая форма используется, значение от текстового ввода будет доступно в $HTTP_POST_VARS ['namel']. Если конфигурационная директива register_globals включена, то переменная будет также доступна как $name1 глобальная.


После того как пользователь нажмет в форме кнопку «Submit», в РНР-скрипт test.php методом Post передадутся данные из формы, а обратиться, например, к текстовому полю из этого скрипта можно будет через переменную $name1.

PHP также работает с массивами в контексте переменных формы. Вы можете, например, группировать связанные переменные или использовать эту особенность, чтобы получить значения, выбранные в поле List Box.

Рассмотрим пример. Предлагается создать два файла: первый — index.html. В нем будет размещаться сама форма, переменные через которую будут передаваться скрипту в test.php — во второй созданный файл.

Пример 9.4. Файл index.html

<html>

<head>

<title>Программa</title>

</head>

<body>

<form action="test.php" method="post">

Name: <input type="text" name="personal[name]">

Email: <input type="text" name="personal[email]">

Beer:

<select multiple name="beer[]">

<option value="warthog">Warthog

<option value="guinness">Guinness

</select>

<input type="submit">

</form>

</body>

</html>

Результат выполнения программы представлен на рис. 9.3.

Рис. 9.3. Полученная форма

Пример 9.5. Файл test.php

<?php

echo "Имя: ".$personal["name"];

echo "Email: ".$personal [ "email" ];

for ($i=0; $i<sizeof($beer);$i++)

echo $beer[$i]."<br>";

?>

Опишем принцип работы программы. В строке Name: <input type="text" name="personal[name]"> задаетсяпеременная как элементмассива. Далее идет подобная строка Email :<input type="text" name="personal [email] ">, выполняющая ту же функцию. Элемент select используется для создания выбора списка. При отправке формы серверу пересылается выбранная строка <select multiple name="beer[]">. Внешне элемент select может быть представлен либо как обычный, либо как раскрывающийся список, в зависимости от того, указан или нет атрибут size, В самом теге используются собственные атрибуты name и multiple. Атрибут name определяет имя элемента. Если указан атрибут multiple, то браузер позволяет выбрать более одного элемента списка.

Рассмотрим файл test. php. После того как пользователь ввел данные в форму, указанным переменным присваиваются эти значения. Как только пользователь нажмет на кнопку «Submit», начнется передача этих значений переменных в наш РНР-скрипт для последующей реализации. Например, в строках Name и Email пользователь ввел следующие данные: Name - Sasha, Email - sashatest@mydomain.ru. Из первых двух строчек программы, написанной на РНР:

echo "Имя: " . $personal [ "name" ];

echo "Email: ". $personal [ "email"];

видно, что при выполнении данного скрипта одним из результатов проделанной работы будет вывод таких фраз Sasha, Email:

Это очень простая программа, но она показывает, что кактолько вы передали переменные, полученные в форме, в сам скрипт, то сразу можете без каких-либо проблем

выполнять любые операции с этими переменными, конечно, при разумных условиях. Также обратите внимание на то, что в данном примере работа ведется не с отдельной переменной, а с одним массивом, что облегчает задачу, хотя на первый взгляд все выглядит рчень сложно. Поверьте, это временное чувство. Уверены, после того как вы напишете самостоятельно пару раз этот скрипт, не заглядывая в книгу, все ваши волнения перестанут быть вам помехой в дальнейшем. Что касается строк;

for ($i=0;$i<sizeof($beer);$i++)

echo $beer[$ij."<br>";

можно сказать одно: данная функция является функцией цикла, в котором происходит прибавление по единице к переменной $i, при этом функция echo() выводит полученные результаты. Как таковая программа несложная, и сама работа с переменными также не представляет никаких трудностей. Самое главное запомнить основные нормы и правила при написании таких программ.

<< Предыдущий параграф Следующий параграф >>
Оглавление