Отправляет email-рассылки с помощью сервиса Sendsay

PHP. Учимся Сами.

  Все выпуски  

обработка методов GET и POST.


Информационный Канал Subscribe.Ru


PHP. Учимся сами.
Выпуск 3.
Здравствуйте, уважаемые подписчики. Начиная с этого номера мы с вами отходим от чисто теоретических вопросов и переходим на более твердую почву. ) Начнем мы нашу практику с изучения организации получения переменных передаваемых методами POST и GET. Так же начиная с этого номера я буду рассказывать что будет в послед. выпусках. Вы можете писать мне о том, что бы вам хотелось увидеть. В скором времени начнет функционировать сайт на котором будет хранится архив рассылки, и публиковаться статьи не вошедшие в рассылку.
Содержание:
- Небольшое отступление
- методы GET и POST
- Анонс
Небольшое отступление
Сначала небольшое отступление.
Откройте конфигурационный файл PHP (для тех кто использует любую из Win это С:\WINDOWS_DIR\php.ini) и найдите там параметр error_reporting установите его значение E_ALL (error_reporting = E_ALL). Затем параметр register_globals и установите ему значение Off (register_globals = Off).

Для чего это нужно:
- параметр error_reporting отвечает за вывод сообщений об ошибках. Мы установили ему значение E_ALL, т.е. сигнализировать нам о всех произошедших ошибках. Если вы хоть немного знакомы с PHP, то скажете что в этом случае будет так же много лишних сообщений, например о использовании неинициализированной переменной и подобных. Что могу ответить.. Зато я имею полную информацию о выполнении моего скрипта, а для фильтрации ненужных сообщений лучше использовать оператор отключения предупреждений @. (Чуть ниже будет пример который проиллюстрирует смысл этих предложений для тех кто не понял о чем идет речь).
- параметр register_globals - отвечает за автоматическую регистрацию в среде переменных переданных методами POST или GET. Начиная с какой то версии PHP, данный параметр по умолчанию выключен. Что в принципе разумно. Это обеспечивает чуть большую безопасность приложения и немного снижает затраты машинных ресурсов при выполнении. Так что мы с вами будем следовать этой практике и получать эти переменные ручками.

Пример поясняющий действие оператора @:

<?
extract($HTTP_GET_VARS); 
// без использования оператора @
 if ($error) echo "ПРИВЕТ!";
 echo "<a href=\"?error=1\">сказать привет</a>"
?>
При запуске вам скажут что то типа Notice: Undefined variable: error in d:\server\htdocs\rassilka\3\1.php on line 3. И только при нажатии на ссылку, переменная $error примет значение. Использование таких вот переменных, которые принимают значение только при некотором действии, обычное дело для PHP, особенно при передаче переменных методами GET и POST. И это не является ошибкой. Как раз для таких случаев и существует оператор @.
Перепишем:

<?
extract($HTTP_GET_VARS); 
// используем оператор @ 
 if (@$error) echo "ПРИВЕТ!"; 
 echo "<a href=\"?error=1\">сказать привет</a>"
?>
Как видите в этом случае сообщения об ошибке не появилось и скрипт работает так, как нам надо. Мы как бы указали интерпретатору игнорировать тот факт что переменной $error поначалу не существует.

методs GET и POST
Часто у нас будет возникать необходимость передать скрипту некоторые параметры. Один из способов это сделать передать их с помощью метода GET. В этом случае все параметры передаются одной строкой. Наверное вам часто приходилось видеть ссылки вида http://hostname.com/script.php?alpha=1&web=ok, это и есть передача параметров методом GET (в предыдущем примере я тоже пользовался этим методом :) ). В данном примере скрипту script.php передаются параметры alpha=1 и web=ok. Как видно список параметров начинается после символа ? и параметры в нем разделяются с помощью символа &. Руководствуясь этими правилами и следует формировать свои GET запросы.

Давайте теперь поподробнее рассмотрим как PHP получает эти параметры на основе предыдущего примера. Наша ссылка имеет вид <a href="?error=1">сказать привет</a> Если бы мы не отключили register_globals то параметр error сразу бы был нам доступен в качестве переменной $error. Но этот путь не для нас :).

Все переменные полученные с помощью GET, PHP хранит в массиве $HTTP_GET_VARS, индексами которого являются имена переменных. Например, для вывоза error я мог бы воспользоваться след. записью $HTTP_GET_VARS['error']. Это запись достаточно длинная и неудобная. Поэтому в примере я использовал функцию:

int extract ( array var_array [, int extract_type [, string prefix]])
Которая извлекает из массива var_array переменные имеющие имя ключа записи массива, а значением величины соотв. этим ключам. (рекомендую подробнее о extract() почитать в документации по PHP, ее возможности очень широки).

В отличии от метода GET, в методе POST параметры передаются сценарию через стандартный поток ввода. Пример передачи параметров методом POST передача данных формы. Например:

<?
extract($HTTP_POST_VARS); 
 if (@$sendName) echo "Ваше имя: $name"; 
?>

<form action="" method=POST>Как вас зовут <input type=text name="name">
<input type=submit name=sendName value="Ответить"></form>
Как видим все параметры хранятся в массиве $HTTP_POST_VARS и имеют имена соответствующие именам элементов формы.

Небольшое домашнее задание:
Рекомендую вам написать самим скрипт обрабатывающий данные формы содерж. поля Имя, Фамилия, Возраст. Обработка пусть заключается в следующем: вывод строки вида "Вы Иван Петров и вы родились в 1976 году.". Дата рождения вычисляется по возрасту.

Анонс следующих выпусков:
- Выпуск 4: Конструкции языка (циклы, условный оператор, оператор выбора, инструкции)
- Выпуск 5: Пишем гостевую книгу
- Выпуск 6,7: Добавляем в к гостевой книге модуль администрирования и расширяем ее функциональность
Все свои вопросы Вы можете задавать на по адресу phplearn@inbox.ru
Копирование материалов возможно только в случае явного указания на данную рассылку как на источник информации.
© 2003 Copyright by MScript Engine

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное