|
кций работы со строками (которых в PHP великое множество), и
этот прием действительно будет работать. Однако, прежде чем браться за ненужное
дело, давайте посмотрим, что нам предлагает сам язык.
Трансляция полей формы
в переменные
Итак, мы не хотим заниматься прямым разбором переменной окружения
QUERY_STRING, в которой хранятся параметры сценария. И правильно не хотим —
интерпретатор перед запуском сценария делает все сам. Причем независимо от того,
каким методом — GET или POST — воспользовался "браузер". То есть, PHP сам оп-
ределяет, какой метод был задействован (благо, информация об этом доступна
через
переменную окружения REQUEST_METHOD), и получает данные либо из
QUERY_STRING, либо из стандартного входного потока. Это крайне удобно и достой-
но подражания, вообще говоря, в любых CGI-сценариях.
А именно, интерпретатор все данные из полей формы преобразует в глобальные од-
ноименные переменные. В нашем случае значение поля name после начала работы
программы будет храниться в переменной $name, а значение поля age — в перемен-
ной $age. То есть, не надо ничего ниоткуда "получать" — все уже установлено и
рас-
паковано из URL-кодировки. Максимум удобств, минимум затрат, не правда ли? К
тому же, еще и работает быстрее, чем аналогичный кустарный код, написанный на
PHP, потому что разработчики PHP предусмотрели функцию разбора командной
строки на Си.
Глава 8. Работа с данными формы 147
Вот наш окончательный сценарий hello.php (листинг 8.4). Как видите, он сжался
до неприличных размеров:
Листинг 8.4. hello.php: окончательная версия
echo "Привет, $name! Я знаю, Вам $age лет!" ?>
Давайте теперь его усовершенствуем — сделаем так, чтобы при запуске без
парамет-
ров сценарий выдавал документ с формой, а при нажатии кнопки — выводил нужный
текст. Самый простой способ определить, был ли сценарий запущен без парамет-
ров — проверить, существует ли переменная с именем, совпадающим с именем кноп-
ки отправки. Если такая переменная существует, то, очевидно, что пользователь
за-
пустил программу, нажав на кнопку. Здесь мы применим инструкцию if, которая
нами еще не рассматривалась, но, думаю, читатель простит мне этот огрех (лис-
тинг 8.5).
Листинг 8.5. hello.php: усовершенствованная версия
} else {?>
Привет, =$name?>!
Я знаю, Вам =$age?> лет!"
}?>
Из этого примера мы можем почерпнуть еще один удобный прием, который нами
пока не рассматривался. Это конструкция =выражение?>. Она является ничем
иным, как просто более коротким обозначением для , и пред-
назначена для того, чтобы вставлять величины прямо в HTML-страницу.
Помните наши рассуждения о том, что же первично в PHP: текст или програм-
ма? Конструкция = применяется обычно в тот момент, когда выгодно счи-
Часть III. Основы языка PHP 148
тать, что первичен текст. В нашем примере именно так и происходит — ведь
кода на PHP тут очень мало, в основном страница состоит из HTML-тэгов.
Обратите внимание на полезный прием: в параметре action тэга |
|