Запросы GET и POST не уникальны для PHP, но вам все равно нужно их понимать. HTTP-запросы обеспечивают связь между клиентом и сервером. В предыдущей статье мы видели это сообщение, когда отправляли форму. Данные формы вводились на стороне клиента (компьютер пользователя) и при нажатии кнопки «Отправить» данные отправлялись на сервер.
Это могло быть не совсем ясно, поскольку наш сервер работал на нашем компьютере, но представьте, что вы развернули свой код на экземпляре AWS EC2. Этот сервер больше не находится на нашей машине, поэтому процесс несколько понятнее. Вскоре мы рассмотрим пример, но давайте рассмотрим различные методы связи.
Общие методы запроса
Есть несколько методов запроса, но я хотел представить несколько, которые помогут вам в повседневной жизни разработчика:
GET
: используется для запроса данных с сервера. Данные могут быть отправлены на сервер через адресную строку в виде пар ключ/значение. Вы наверняка видели такой адрес: https://www.dinocajic.com/?p=123. В данном случае p
— это ключ, а 123
— это значение. Он просто возвращает изображение.
POST
: используется для отправки данных на сервер. Не вдаваясь в подробности, данные будут отправлены на сервер и будут доступны серверу через массив $_POST
. В большинстве случаев данные, которые отправляются на сервер через post
, передаются через форму. Поле формы будет иметь атрибут name
, который будет ключом, а данные, введенные пользователем, будут значением. Например, <input type="text" name="full_name">
будет иметь ключ full_name
, а данные, которые вводит пользователь, то есть Dino Cajic
, будут значением. Если вы echo $_POST['full_name']
на стороне сервера, вы получите Dino Cajic
. В отличие от метода get
, данные, отправленные через запрос post
, не видны пользователю в URL-адресе.
PUT/PATCH
: отправляет данные на сервер, уведомляя его о том, что ресурс будет обновлен. Есть несколько различий в том, когда использовать один над другим, но оба они обновляют ресурс. В большинстве случаев это просто зависит от предпочтений разработчика относительно того, какой из них используется. Такие фреймворки, как Laravel, позволяют управлять ресурсами, легко направляя такие запросы, как этот. Можете ли вы использовать запрос post
для обновления чего-либо в базе данных? Конечно. Вы по-прежнему отправляете данные на сервер. Это просто более явно.
DELETE
: Аналогично запросу put/patch
, это еще один явный запрос, который позволяет отправлять данные на сервер. В данном случае мы указываем, что хотим удалить ресурс.
Пример обхода формы
В предыдущей статье мы создали форму, позволяющую пользователю указать свое полное имя.
Посмотрим, как перемещаются данные.
- Пользователь вводит URL в своем браузере. Поскольку мы размещали сервер на нашей машине, URL-адрес был
https://0.0.0.0/form_example.php
илиhttps://127.0.0.1/form_example.php
. - Когда пользователь нажимает Enter, на сервер отправляется запрос
get
для возврата содержимогоform_example.php
. У сервера есть доступ к переменной$_GET
, но данные не были переданы через строку URL. Мы также не запрограммировали никаких действий с содержимым переменной$_GET
. - Сервер получает запрос, переходит в
form_example.php
, видит, что должны быть возвращены html-данные, и возвращает html-данные. - Браузер получает html-данные и преобразует их во что-то, что может видеть пользователь. В этом случае пользователь видит форму, позволяющую ввести свое полное имя и нажать кнопку «Отправить».
- Пользователь вводит свое полное имя и нажимает кнопку «Отправить».
- Форма
action
указывает, что данные должны быть отправлены наhttps://127.0.0.1/form_processor.php
, а способ их отправки на сервер был определен с помощью метода формы, установленного равнымpost
. - На сервер отправляется запрос
post
. Сервер имеет доступ к переменной$_POST
. Мы знаем, что переменная$_POST
будет иметь ключfull_name
. - Сервер обрабатывает наш код, который находится в
echo $_POST['full_name']
. После того, как данные сгенерированы, они отправляются обратно клиенту. - Пользователь видит то, что он только что ввел.
Изменение метода формы с POST на GET
Что, если мы изменим метод формы с post
на get
. Можно ли отправить данные формы на сервер? Давайте посмотрим.
Поскольку данные отправляются через запрос get
, у нас не будет никаких данных в нашем массиве $_POST
. Он должен быть в нашем массиве $_GET
. В файле form_processor.php
давайте var_dump
нашу переменную $_GET
.
Если мы отправим форму, мы увидим, что она работает. Получаем следующие данные.
/app/74 Form Requests/form_processor.php:3: array (size=1) 'full_name' => string 'Dino Cajic' (length=10)
Интересно то, что данные были перемещены в URL-адрес, когда мы нажали «Отправить». Взгляните на свой URL. Вы должны увидеть что-то похожее на это:
https://0.0.0.0/form_processor.php?full_name=Dino+Cajic
Переменные были добавлены к строке URL. Иногда это желательно, например, когда вы хотите добавить в закладки результаты формы, но это также может быть нежелательно, например, когда вы отправляете свое имя пользователя и пароль.
Следует отметить, что когда вы отправляете форму с запросом post
, кнопка «Назад» в вашем браузере спросит, хотите ли вы повторно отправить форму. С запросом get
вы просто получаете обычную функциональность кнопки «Назад».
Передача данных без формы
Я уверен, что вы уже соединяете точки. Вам вообще нужна форма? Не могли бы вы просто отправить переменные через строку URL. Да, ты можешь! Давайте создадим новый файл. Мы заявим, что принимаем ключи first_name
и last_name
в строке URL.
Теперь введите URL-адрес с этими ключами и передайте нужное значение.
https://0.0.0.0/get_request_example.php?first_name=Dino&last_name=Cajic
Вы начинаете свою первую переменную после символа ?
. ?first_name=Dino
. Ваша вторая переменная и далее будут добавляться после символа &
: &last_name=Cajic
.
Как только мы нажмем Enter, запрос на получение будет отправлен вместе с данными, которые мы только что ввели в строку URL-адреса, и сервер обработает их, выводя данные в first_name
и last_name
.
Что, если мы не передадим эти значения, вы получите предупреждающие сообщения:
Warning: Undefined array key "first_name" in /home/user/scripts/code.php on line 2 Warning: Undefined array key "last_name" in /home/user/scripts/code.php on line 2
Вы всегда можете проверить, присутствуют ли данные, прежде чем выводить данные. Вы сделаете это с помощью функции isset()
, которая проверяет, существует ли ключ массива и не является ли он null
.
В этом случае данные отображаются только тогда, когда оба параметра first_name
и last_name
определены и данные переданы, в противном случае пользователь увидит сообщение You must have both the first_name and last_name defined
.
Дино Кайич в настоящее время является руководителем отдела информационных технологий в компаниях LSBio (LifeSpan BioSciences, Inc.), Absolute Antibody, Kerafast, Everest BioTech, Nordic MUbio и Exalpha. Он также является генеральным директором MyAutoSystem. Он имеет более чем десятилетний опыт разработки программного обеспечения. У него есть B.S. в области компьютерных наук и несовершеннолетнего в области биологии. Его опыт включает в себя создание приложений для электронной коммерции на уровне предприятия, разработку программного обеспечения на основе исследований и содействие распространению знаний посредством письма.
Вы можете связаться с ним в LinkedIn, подписаться на него в Instagram или подписаться на его публикацию в Medium.