Использование методов GET и POST
Применение методов GET и POST в PHP трудно переоценить, поскольку эти методы встречаются практически на каждом сайте. Прежде чем изучать ниже описанный материал, советую ознакомится с html тегом . Рассмотрим каждый из этих методов в подробности.
Метод GET
Метод GET использует для передачи данных строку URL. Возможно, Вы обращали внимание на длинные и непонятные URLы. Например: function.php?login=Alex&email=dezyakin . В данном случае данные обрабатываются в function.php. После знака вопроса » ? » идет перечисление передаваемых параметров (параметр разделяются знаком «&») со значениями: параметру login присвоено значение Alex, а переменной email значение dezyakin. Данные будут хранится в суперглобальном массиве $_GET . Приведем пример использования метода GET представлен ниже:
html> body> form method value">GET"> указание метода GET--> Login: input type value">text" name value">login"> E-mail: input type value">text" name value">email"> input type value">submit" value value">Отправить"> form> php /*С помощью суперглобального массива $_GET выводим принятые значения:*/ echo "
login value">$_GET['login']; echo "
email value">$_GET['email']; ?> body> html>
Результат выполнения выше описанного кода представлен на рисунке ниже:
Обратите внимание на то, как мы считываем значения из суперглобального массива $_GET: $_GET[‘имя_переменной’] . В нашем примере имена переменных были объявлены в форме (name=login и name=email).
Совет:
Прежде чем обрабатывать полученные значения советую проверять их на существование через функции isset(имя_переменной) или empty(имя_переменной) — эти функции были рассмотрены в предыдущем уроке 2: переменные в PHP. Например:
проверка на существование с помощью isset: if isset($_GET['login']) < операторы для обработки login . > //или же проверить на существование с помощью empty: if empty($_GET['email']) < операторы для обработки email . > ?>
В форме можно указать имя файла, который будет обрабатывать передаваемые значения. Делается это с помощью атрибута формы action , которому можно присвоить адрес этого файла. По умолчанию этот файл присвоен текущему файлу (т.е. обрабатывается в файле, где и расположена форма). Приведем пример, в котором данные из формы передаются на обработку в файл srcipt.php :
form method value">GET" action value">srcipt.php"> Login: input type value">text" name value">login"> E-mail: input type value">text" name value">email"> input type value">submit" value value">Отправить"> form>
В файле script.php должен содержатся какой-то обработчик информации, иначе информация будет передана в пустую.
Метод GET обладает множеством недостатков:
- Пользователь видит значения передаваемых параметров;
- Пользователь может легко подделать передаваемые параметры;
- Неудобная передача бинарной информации (приходится кодировать в текстовый формат);
- Объем передаваемых данных ограничен — 8 Кбайт;
Из-за выше перечисленных недостатков метод GET применяется только в тех случаях, когда нужно передать небольшой объем данных, а также эти данные никак не засекречены.
Метод POST
Метод POST отличается от GET тем, что данные передаются в закрытой форме. Существует суперглобальный массив $_POST , из которого можно считывать данные следующим образом: $_POST[‘имя_переменной’] . Например:
html> body> form method value">POST"> Login: input type value">text" name value">login" value=""> E-mail: input type value">text" name value">email" value=""> input type value">submit" value value">Отправить"> form> php /*С помощью суперглобального массива $_POST выводим принятые значения:*/ echo "
login value">$_POST['login']; echo "
email value">$_POST['email']; ?> body> html>
Результат выполнения выше описанного кода представлен на рисунке ниже:
Как видите URL не имеет никакой приписки, но тем не менее данные были получены и выведены.
Примечание:
1) Объем передаваемых значений методом POST по умолчанию ограничен и равен 8 Мбайт. Чтобы увеличить это значение нужно изменить директиву post_max_size в php.ini.
2) В ранних версиях PHP вместо коротких названий суперглобальных массивов $_GET и $_POST использовались более длинные имена: $HTTP_GET_VARS и $HTTP_POST_VARS . По умолчанию они выключены в php 5, но Вы можете их включить в конфигурационном файле php.ini с помощью параметра register_long_arrays . В php 6 версии эти длинные названия будут недоступны.
3) Перед обработкой переменных из $_POST , советую проверять переменные на их наличие, также как это делалось с методом GET .
Следующий четвертый урок будет посвящен: типам данных в php.
GET-запросы в PHP
Итак, пришло время нам начать взаимодействовать с пользователем.
Как мы говорили ранее, PHP работает на сервере. Отсюда следует вопрос, а как же нам из браузера начать с ним взаимодействовать? Например, заполнить форму логина на сайте и отправить данные на сервер, чтобы наш код с ним что-нибудь сделал.
Именно об этом мы и поговорим в этом уроке.
Итак, давайте удалим все наши файлы в проекте и создадим новый пустой файл с именем index.php. Запишем в него следующий код:
Давайте выполним этот скрипт, открыв в браузере адрес:
http://myproject.loc/index.php
Как мы помним из этого урока, мы отправляем запрос веб-серверу, он понимает, что мы запрашиваем PHP-скрипт, выполняет его с помощью интерпретатора и возвращает нам ответ в виде результата выполнения этого скрипта.
Возникает вопрос: «А как можно передать от пользователя внутрь скрипта какие-либо данные?». Ответов на него у нас сразу несколько, и все мы их рассмотрим в этом уроке.
Метод GET
Когда мы вбиваем адрес скрипта и нажимаем Enter, выполняется GET-запрос по протоколу HTTP. В этом типе запроса к основному адресу мы можем прикрепить дополнительные параметры. Для того чтобы передать их, в конце основного адреса ставится знак вопроса, и мы можем перечислять эти параметры — вот так:
параметр1=значение1.
При этом если нам нужно указать несколько параметров, то мы разделяем их с помощью знака амперсанда:
арг1=знач1&арг2=знач2.
Если сейчас перейти по этой ссылке в браузере, то на сервер передадутся 2 параметра:
Мы можем очень просто получить к ним доступ из PHP с помощью магической переменной $_GET. Эта переменная является суперглобальной, то есть доступна нам в PHP всегда и в любом месте. Она представляет собой ассоциативный массив, в котором хранятся все переданные в запросе GET-параметры.
Давайте изменим код нашего index.php, чтобы узнать, что именно хранится в этой переменной.
array (size=2) 'arg1' => string '123' (length=3) 'arg2' => string 'scrrr' (length=5)
Как мы можем видеть, это действительно наши переданные аргументы, представленные в виде ассоциативного массива.
Учимся обрабатывать параметры
array (size=2) 'login' => string 'admin' (length=5) 'password' => string '12345' (length=5)
Разумеется, мы можем обращаться к этим элементам как к элементам обычного массива. Например, так:
Давайте создадим простую страничку, на которой мы будем выводить переданные с помощью GET-запроса логин и пароль.
Переданный логин:
Переданный пароль:
Обновим нашу страничку в браузере и увидим результат.
Отлично, мы успешно обработали данные, которые нам пришли от пользователя.
Учимся работать с формами
Давайте теперь вспомним уроки про формы из курса по HTML и сделаем простейшую форму для отправки GET-запроса на страничку.
Давайте запишем в наш index.php следующий код:
Логин
Пароль
И давайте теперь откроем его в браузере: http://myproject.loc/index.php
Как мы видим по исходному коду, форма отправит аргументы login и password с введенными значениями на адрес /login.php.
Давайте введем в поля значения admin и Pa$$w0rd соответственно и нажмем на кнопку «Войти».
Где сервер нам скажет о том, что такой странички не найдено.
Отлично! Так давайте же её создадим! Создаём рядом с нашим index.php файл с именем login.php. И пишем в него следующий код:
else < $isAuthorized = false; >?>
Вернёмся на нашу форму и повторно отправим пароль. Теперь мы увидим информацию о том, что мы успешно авторизовались. Это простейший прототип формы авторизации. Разумеется, он сильно упрощён, не всё сразу. А пока – делаем домашнее задание.