Внешние переменные (переменные вне PHP)
Web-программирование в большей части представляет собой как раз обработку различных данных, введенных пользователем — т. е., обработку HTML-форм.
Пожалуй, нет другого такого языка, как PHP, который бы настолько облегчил вам задачу обработки и разбора внешних переменных, т.е. переменных, которые поступили из HTML-форм (из браузера пользователя). Дело в том, что в язык PHP встроены все необходимые возможности, так что вам не придется даже и задумываться над особенностями протокола HTTP и размышлять, как же происходит отправка и прием POST-форм или даже загрузка файлов.Разработчики PHP все предусмотрели.
Здесь мы не будем подробно останавливаться на механизе работы протокола HTTP, который отвечает за доставку данных из браузера на сервер и обратно, этому посвящен специальный раздел PHP и HTTP. Там же глубоко рассмотрены принципы работы с HTML-формами.
Сейчас мы рассмотрим эти механизмы лишь с прикладных позиций, не углубляясь в теорию.
Для того, чтобы принимать данные от пользователей, нам необходимо интерактивное взаимодействие с ними.
А теперь попробуем написать сценарий, который принимает в параметрах имя пользователя и выводит:
"Привет, <имя>!".
Сначала рассмотрим наиболее простой способ передачи имени сценарию — непосредственный набор его в URL после знака ? — например, в формате name=имя. Вот пример:
http://localhost/script.php?name=имя
Наш сценарий должен распознать параметр name. То есть, говоря проще, сценарий (скрипт) должен принять параметр name в виде переменной name, а затем вывести в браузер пользоватея строку "Привет, <имя>!". Сделать это можно таким образом:
Пишем скрипт, принимающий параметр name и выводящий результат в браузер пользователя, а затем сохраняем его под именем script.php:
<?php
echo "Привет, $_GET['name'] !";
?>
В нашем примере мы использовали предопределенную переменную $_GET['name'], чтобы "принять" параметр name. Теперь, передав через GET-запрос параметр name=Саша, мы получим следующий результат:
Привет, Саша !
А теперь попробуем передать параметр name не из строки запроса браузера, а через HTML-форму. Создаем HTML-документ следующего содержания:
<form action="http://localhost/script.php" method="GET">
Name: <input type=text name=name><br><input type=submit value="GO!">
</form>
Теперь сохраним данный HTML-документ на нашем тестовом сервере (localhost) под именем send.html в той же директории, где у нас уже сохранен сценарий script.php.
Теперь запускаем HTML-документ в браузере:
http://localhost/send.html
Вводим имя в поле и нажимаем кнопку "GO!". Форма передаст через GET-запрос параметр name нашему скрипту script.php. Если вы все сделали правильно и ваш web-сервер работает нормально, вы увидете введенное вами в поле формы имя! В адресной строке браузера вы увидете путь и переданный вами параметр name.
Теперь мы должны понять, как мы можем передать множество параметров, для начала хотя-бы два.
Итак, нам нужно, чтобы скрипт выводил следующее:
"Привет, <имя>! Вам <возраст> лет!".
То есть нам нужно передать в скрипт 2 параметра: name и age.
Теперь мы напишем скрипт script.php, принимающий два параметра: name и age, а также HTML-документ с формой, которая эти два параметра будет передавать в наш новый скрипт:
<?php
echo "Привет, $_GET['name'] ! Вам $_GET['age'] лет !";
?>
А вот и HTML-документ send.html, с помощью которого мы параметры name и age передадим нашему скрипту:
<html><body>
<form action="script.php">
Введите имя: <input type=text name="name"><br>
Введите возраст: <input type=text name="age"><br>
<input type=submit value="GO!">
</form>
</body></html>
Теперь наш скрипт принимает два параметра name и age и выводит в браузер результат формата: "Привет, <имя>! Вам <возраст> лет!".
Обратите внимание на адресную строку браузера после передачи параметров сценарию, она будет выглядить примерно следующим образом (без URL-кодирования кириллицы):
http://localhost/script.php?name=Саша&age=23
В зависимости от установок вашего интерпретатора, существует несколько способов доступа к данным из ваших HTML-форм. Вот несколько примеров:
<?php
// Доступно, начиная с PHP 4.1.0
echo $_GET['username'];
echo $_POST['username'];
echo $_REQUEST['username'];
import_request_variables('p', 'p_');
echo $p_username;
// Доступно, начиная с PHP 3. Начиная с PHP 5.0.0, эти длинные предопределенные
// переменные могут быть отключены директивой register_long_arrays.
echo $HTTP_GET_VARS['username'];
// Доступно, если директива PHP register_globals = on. Начиная
// с PHP 4.2.0, значение по умолчанию register_globals = off.
// Использование/доверие этому методу непредпочтительно.
echo $username;
?>
Подробно о формах, методах передачи параметров в PHP сценарии можно найти здесь
Подробную информацию по протоколу HTTP, по методам передачи запросов GET и POST вы можете найти здесь