Тема 6. Передача параметров скрипту

Опубликовано пользователем Бессонов Л.В. 19.02.2010г.

Программа на PHP запускается в момент обращения к веб-серверу по адресу  страницы, содержащей эту программу. После отработки, PHP-скрипт возращает результат и прекращает свою деятельность.

Вы уже программировали на Pascal и C++ приложения, работавшие в консоли или в графическом интерфейсе пользователя. Консольное приложение может запросить ввод с клавиатуры и ожидать (не продолжать работу), пока пользователь вводит необходимые данные. Также и приложение графического интерфейса может «ничего не делать» пока не нажата кнопка или не введены нужные значения.

В случае с выполнением PHP-скрипта на веб-сервере, запросить клавиатурный ввод невозможно. Скрипт должен иметь все необходимые ему для работы параметры уже в момент старта. Для этого используют передачу параметров в запросе веб-серверу.

Спецификация протокола HTTP описывает несколько возможных методов передачи параметров. Мы рассмотри два, доступных при работе с HTML метода: GET и POST.

Запуску любого скрипта предшествует некоторый объём технических операций, выполняемых веб-сервером и интерпретатором PHP. В частности, до того как исполнится первая команда скрипта, создаются предопределённые переменные.

Набор предопределённых переменных может отличаться в зависимости от версии и типа веб-сервера, а также от версии PHP.

Начиная с версии PHP 4.1.0 введены предопределённые переменные $_GET и $_POST. Они содержат в себе все данные, переданные в запросе по соответствующему методу.

Передача параметров методом GET

Запишим один из наиболее полных видов строки запроса HTTP.

 Строка HTTP запроса (полная запись URL)

При указании в вызове (URL) строки параметров в виде '?параметр1=значение1&параметр2=значение2&...&параметрN=значениеN' PHP можно заставить создать переменные с именами параметр1, ..., параметрN и значениями значение1, ... значениеN соответственно.

Пример «Вежливый скрипт»

  1. <?php
  2. $name = $_GET['name'];
  3. if (!isset($name)){
  4. print "Я не знаю как Вас зовут";
  5. }else{
  6. print "Здравствуйте, $name!";
  7. }
  8. ?>

Если не помните, найдите в Теме 2 функцию isset() и узнайте её назначение.

Создайте файл 'hi.php', поместите в него текст примера. Затем положите этот файл в папку на веб-сервере (папка веб-сервера доступна в каталоге /mnt/www, но чтобы Ваши файлы не путались с файлами других студентов, разумно создать в этом каталоге папку с именем 'ваш_номер_группы-ваше_фамилия', и помещать файлы туда). Затем обратитесь к Вашему вежливому скрипту, набрав в строке адреса веб-браузера 'http://honda.immpu.sgu.ru/hi.php' (если Вы создали свою папку, то ссылка будет немного другой: 'http://honda.immpu.sgu.ru/ваша_папка/hi.php').

При обращении к скрипту без параметров, он выведет 'Я не знаю как Вас зовут'. При обращении 'http://honda.immpu.sgu.ru/ваша_папка/hi.php?name=Вася', скрипт выведет: 'Здравствуйте, Вася!'

Передача параметров методом POST

Для отправки данных методом POST удобно использовать HTML-формы. Модифицируем вежливый скрипт.

Пример «Вежливый скрипт возвращается»

  1. <?php
  2. $name = $_POST['name'];
  3. $surname = $_POST['surname'];
  4. $age = $_POST['age'];
  5. if (!isset($name)){
  6. print "<h2>Заполните, пожалуйста анкету</h2>";
  7. print "<form method='POST' action=''>";
  8. print "<p>Ваше имя: <input type='text' name='name'></p>";
  9. print "<p>Ваша фамилия: <input type='text' name='surname'></p>";
  10. print "<p>Ваш возраст: <input type='text' name='age'></p>";
  11. print "<input type='submit' value='Отправить данные'></p>";
  12. print "</form>";
  13. }else{
  14. print "Здравствуйте, $name $surname! Вам $age лет.";
  15. }
  16. ?>

В этом скрипте указано что форма будет передавать данные по методу POST. Обратите внимание, что при этом строка вызова скрипта не получает дополнительно строку параметров при отправке данных.

Сравнительная характеристика методов GET и POST

Попробуйте заменить в последнем скрипте POST на GET. Скрипт не потеряет функциональности. Но при отправке данных URL будет получать строку параметров и выглядеть примерно так: hi2.php?name=Vasya&surname=Pupkin&age=100

Таким образом, отправку данных через веб-форму можно производить как методом GET, так и методом POST. Возникает вопрос: в чём разница.

Запросы POST имеют такую же функциональность что и GET, но есть разница в формате.

GET отправляет всю информацию в заголовке запроса, длинна которого ограничена. Если нужно отправить какое-то слово или число на сервер &mdash он вполне пригоден. Но метод GET оказывается неприменим если нужно отправить текст объёмом больше 255 символов (а вообще говоря даже чуть меньше).

POST отправляет информацию в теле запроса, который не имеет максимального размера. Можно отправлять огромные тексты, файлы и т.п. Именно поэтому этот метод используется при загрузке изображений.

По умолчанию всегда используется GET, и не только в формах, это более простой метод.

Достоинства метода GET

  • Страницу всегда можно сохранить в закладках (SEO-дружелюбен)
  • Скорость обработки выше, так как вся информация находится в заголовке
  • Информация, посылаемая на сервер, всегда видима (в адресной строке)

Недостатки метода GET

  • Иноформация, посылаемая на сервер, всегда видима (в адресной строке)
  • Объем информации, которую можно отправить, ограничен

Достоинства метода POST

  • Можно отправить много информации на сервер, объем почти неограничен
  • Отправляемая информация не показывается в адресной строке.

Недостатки метода POST

  • Медленнее, чем GET, так как анализируются заголовки и тело запроса.
  • Страницы, сгенерированные как результат запроса POST, нельзя добавить в закладки (СЕО-недружелюбен)

Баннер SGU.RU