Как работать с POST-запросами в PHP

#php #request #post

53241

119

Итак, в прошлом уроке мы вспоминали о том, как происходит работа пользователя с сайтом. Их общение происходит в форме запрос-ответ. Пользователь отправляет в запросе какие-то данные, а сервер возвращает какой-либо ответ, в зависимости от этих данных.

В предыдущем уроке мы научились работать с GET-запросами. Как мы помним, при этом способе данные передаются на сервер с помощью параметров в адресной строке. Такое бывает удобно, когда нам нужно поделиться ссылкой в которой эти параметры нужны. Например, у нас спрашивают, где в Москве купить шкаф. И мы скидываем человеку ссылку на поиск в Яндексе:
https://yandex.ru/search/?text=шкаф%20в%20москве%20купить

Он переходит по ней и прекрасно себя чувствует, потому что всё уже введено за него.

Однако, параметры в адресной строке – это не всегда уместно. Например, когда в параметрах содержится какая-то конфиденциальная информация: пароль, пин-код. И любой мимо проходящий человек может её увидеть. Как в такой ситуации быть? Использовать POST-запросы!

Что это такое? Да всё тот же запрос от клиента к серверу, только параметры передаются внутри тела запроса, а не в адресной строке. И увидеть их просто так не получится.

Что за тело запроса? Ну, это просто данные, которые передаются на сервер. При этом они скрыты от лишних глаз.

Чтобы отправить POST-запрос нужно в HTML-форме задать для атрибута method значение POST.

Вот так:

<html>
<head>
    <title>Форма входа</title>
</head>
<body>
<form action="/login.php" method="post">
    <label>
        Логин <input type="text" name="login">
    </label>
    <br>
    <label>
        Пароль <input type="password" name="password">
    </label>
    <br>
    <input type="submit" value="Войти">
</form>
</body>
</html>

Данные, отправленные с помощью POST-запроса доступны в PHP в суперглобальном массиве $_POST.

Давайте выведем переданные скриптом выше значения login и password. Для этого в файл login.php положим следующий код:

<?php
$login = !empty($_POST['login']) ? $_POST['login'] : '';
$password = !empty($_POST['password']) ? $_POST['password'] : '';
?>
<html>
<head>
    <title>Обработка POST-запроса</title>
</head>
<body>
<p>
    Переданный login: <?= $login ?>
    <br>
    Переданный password: <?= $password ?>
</p>
</body>
</html>

Откройте теперь форму, введите в неё значения и нажмите кнопку «Войти».
Вы увидите введенные вами в форме данные, при этом они будут отсутствовать в адресной строке. Вуаля! Теперь никто не подсмотрит ваш пароль в адресной строке.

Как увидеть тело POST-запроса

Чтобы увидеть данные POST-запроса в браузере, в Google Chrome нужно перейти в режим разработчика. Нажмите клавишу F12, находясь в окне браузера. После этого вы увидите панель разработчика.

Перейдите во вкладку Network, а затем установите галочку напротив пункта Preserve log.

Теперь вернитесь на форму, и снова введите данные, после чего нажмите на кнопку «Войти».

Одновременно с тем, как вы нажмете на кнопку входа, вы увидите в панели разработчика запрос на login.php.

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

Нас здесь интересует вкладка Headers. Перейдите в неё, и прокрутите содержимое в самый низ. Здесь вы увидите те данные, что браузер отправил на сервер.

Заключение

Вот так и работают POST-запросы под капотом. Используют их всегда, когда не нужно отображать детали запроса в адресной строке. Хорошие примеры: форма авторизации, ввод данных о кредитной карте. Такими данными лучше в адресной строке не светить.

А сейчас — немного нестандартное домашнее задание =)

Если этот урок был вам полезен, расскажите об этом курсе своим знакомым или поделитесь на него ссылкой в социальных сетях.

#php #request #post

53241

119

Методы GET и POST в PHP

В этом руководстве вы узнаете, как отправлять информацию на сервер с помощью методов HTTP GET и POST и как получать эту информацию на сервере.

Методы отправки информации на сервер

Веб-браузер взаимодействует с сервером, как правило, используя один из двух методов HTTP (HyperText Transfer Protocol) — GET и POST. Оба метода передают информацию по-разному и имеют разные преимущества и недостатки.

Метод GET

В методе GET данные отправляются в виде параметров URL, которые обычно представляют собой наборы пар имен и значений, разделенных амперсандами (&). В общем, URL с данными GET будет выглядеть так:

http://www. example.com/action.php?name=vasya&age=33

Части, выделенные жирным шрифтом в URL, являются параметрами GET, а части, выделенные курсивом, являются значениями этих параметров. Более одного набора параметр=значение может быть встроено в URL путем объединения их с амперсандами (&). Методом GET можно отправлять только простые текстовые данные.

Преимущества и недостатки использования метода GET

  • Поскольку данные, отправленные методом GET, отображаются в URL-адресе, можно добавить в избранное страницу с определенными значениями строки запроса.
  • Метод GET не подходит для передачи конфиденциальной информации, такой как имя пользователя и пароль, потому что они полностью видны в строке запроса URL-адреса, а также потенциально могут храниться в памяти браузера клиента в качестве посещенной страницы.
  • Поскольку метод GET назначает данные для переменной среды сервера, длина URL-адреса ограничена. Таким образом, существует ограничение на общее количество отправляемых данных.

PHP предоставляет суперглобальную переменную $_GET для доступа ко всей информации, отправляемой либо через URL, либо через HTML-форму с использованием method=»get».

<!DOCTYPE html>
<html lang="en">
<head>
<title>Пример отправки данных из формы методом GET</title>
</head>
<body>
<?php
  if(isset($_GET["name"])){
  echo "<p>Привет, " . $_GET["name"] . "</p>";
}
?>
<form method="get" action="<?php echo $_SERVER["PHP_SELF"];?>">
  <label for="inputName">Имя:</label>
  <input type="text" name="name">
  <input type="submit" value="Отправить">
</form>
</body>
</html>

Метод POST

блок 1

В методе POST данные отправляются на сервер в виде пакета в отдельном сообщении со сценарием обработки. Данные, отправленные методом POST, не будут видны в URL.

Преимущества и недостатки использования метода POST

  • Это более безопасно, чем GET, потому что введенная пользователем информация никогда не отображается в строке запроса URL или в журналах сервера.
  • Существует гораздо больший лимит на количество данных, которые можно передать, и можно отправлять текстовые данные, а также двоичные данные (загрузка файла) с помощью POST.
  • Поскольку данные, отправленные методом POST, не видны в URL-адресе, невозможно добавить страницу в закладки с помощью конкретного запроса.

Как и $_GET, PHP предоставляет еще одну суперглобальную переменную $_POST для доступа ко всей информации, отправляемой методом post или отправляемой через форму HTML с использованием method=»post».

<!DOCTYPE html>
<html lang="en">
<head>
<title>Пример отправки данных из формы методом POST</title>
</head>
<body>
<?php
  if(isset($_POST["name"])){
  echo "<p>Привет, " . $_POST["name"] . "</p>";
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
  <label for="inputName">Имя:</label>
  <input type="text" name="name">
  <input type="submit" value="Отправить">
</form>
</body>
</html>

Переменная $_REQUEST

PHP предоставляет еще одну суперглобальную переменную $_REQUEST, которая содержит значения переменных $_GET и $_POST, а также значения суперглобальной переменной $_COOKIE.

<!DOCTYPE html>
<html lang="en">
<head>
<title>Пример работы переменной $_REQUEST</title>
</head>
<body>
<?php
  if(isset($_REQUEST["name"])){
  echo "<p>Привет, " . $_REQUEST["name"] . "</p>";
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
  <label for="inputName">Имя:</label>
  <input type="text" name="name">
  <input type="submit" value="Отправить">
</form>
</body>
</html>

блок 3

Как использовать глобальную переменную PHP $_POST

Гас

Обновлено

PHP

В этом руководстве мы познакомим вас с основами использования глобальной переменной PHP $_POST для обработки входящих сообщений POST. данные.

Суперглобальная (суперглобальная) переменная $_POST в PHP представляет собой ассоциативный массив переменных, содержащих данные, отправляемые через HTTP-запрос POST. Используя эту переменную, вы можете получить доступ к данным, отправленным в ваш PHP-скрипт из HTML-формы. Вы также можете отправлять данные формы через JavaScript.

Альтернативой $_POST является суперглобальная переменная $_GET. Переменная $_GET позволяет вам получить доступ к данным, отправленным через запрос GET. Параметры запроса GET включены в URL-адрес, например, https://example.com/post.php?test=example . Текст « test » — это имя параметра , а « пример » — это значение .

В этом руководстве рассматриваются основы метода HTTP POST и способы использования глобальной переменной PHP $_POST для обработки запроса POST.

Что такое метод HTTP POST

Метод POST отправляет данные на сервер с использованием протокола передачи гипертекста (HTTP). POST и GET — два наиболее распространенных типа методов HTTP.

В POST-запросах есть несколько ключевых моментов, которые я перечислю ниже.

  • Вы можете использовать POST-запросы для отправки конфиденциальных данных (рекомендуется HTTPS).
  • Запрос POST никогда не будет кэшироваться.
  • Запросы POST не сохраняются в истории браузера и не могут быть добавлены в закладки.
  • Нет ограничений на длину данных в POST-запросе.

Вы можете просмотреть тип HTTP-запроса, найдя в запросе заголовок метода .

Пример использования $_POST в PHP

Чтобы получить POST-запрос в PHP, нам потребуется использовать суперглобальную переменную $_POST . Поскольку это глобальная переменная, вы можете использовать переменную $_POST в любой области.

Суперглобальная переменная $_POST представляет собой ассоциативный массив переменных, содержащих данные POST-запроса, отправляемые сценарию. Использовать эту переменную очень просто, как мы быстро объясним ниже.

Сценарий ниже на этой странице демонстрирует, как можно использовать суперглобальную переменную $_POST для получения и обработки HTTP-запросов POST. Мы рассмотрим каждую часть сценария ниже.

Во-первых, мы создаем форму HTML, которая использует метод HTTP POST для отправки данных. В атрибуте формы action мы указываем наш файл post.php в качестве URL-адреса для обработки отправки данных формы.

Внутри нашей формы у нас есть ввод, который принимает текст и будет доступен под имя « testString » в суперглобальной переменной $_POST . Убедитесь, что каждый вход имеет атрибут name , если вы хотите, чтобы он был доступен в пределах $_POST , так как использование id не будет работать.

Далее у нас есть ввод типа « submit », позволяющий отправить форму.

Под HTML находится наш скрипт PHP. Во-первых, мы создаем переменную $test_string и присваиваем ей значение testString из нашей формы, используя $_POST суперглобальная переменная.

Наконец, мы делаем простой оператор if else, в котором выводим строку, если она не пуста. В противном случае мы печатаем сообщение о том, что наша строка пуста.

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

На приведенном ниже снимке экрана показано, как наша базовая форма выглядит в веб-браузере. При отправке форма отправляет запрос POST на post.php , который обрабатывает строку и выводит текст под формой.

Заключение

Надеюсь, теперь вы хорошо понимаете запросы HTTP POST и то, как вы можете просматривать их с помощью суперглобальной переменной PHP $_POST. Если вы планируете много обмениваться данными с сервером, вы должны понимать обе эти концепции.

У нас есть еще много руководств по PHP, которые могут оказаться полезными, если вы хотите узнать больше. Например, у нас есть руководства, посвященные обработке переменных в PHP, написанию операторов if-else и многому другому.

Пожалуйста, сообщите нам, если вы заметили ошибку или если важная тема отсутствует в этом руководстве.

Ключевое различие между методами HTTP

АвторLawrence Williams

Часы

Обновлено

Что такое ПОЛУЧИТЬ?

Метод GET используется для добавления данных формы к URL-адресу в паре имени или значения. Если вы используете GET, длина URL останется ограниченной. Это помогает пользователям представить результат в закладки. GET лучше подходит для данных, которые не требуют какой-либо защиты или имеют изображения или текстовые документы.

В этом GET Vs. Учебник POST, вы узнаете:

  • Что такое GET?
  • Что такое POST?
  • Особенности GET
  • Особенности POST
  • Пример метода GET
  • Пример метода POST
  • Разница между GET и POST
  • Преимущества GET
  • Преимущества POST
  • Недостатки GET
  • Недостатки POST

Что такое POST?

POST — это метод, который поддерживается HTTP и показывает, что веб-сервер принимает данные, включенные в тело сообщения. POST часто используется World Wide Web для отправки сгенерированных пользователем данных на веб-сервер или при загрузке файла.

Особенности GET

Вот важные особенности GET:

  • С помощью метода GET очень легко добавлять данные в закладки.
  • Ограничение длины метода GET ограничено.
  • Вы можете использовать этот метод только для получения данных из адресной строки в браузере.
  • Этот метод позволяет легко сохранять данные.

Особенности POST

Вот важные особенности POST:

  • Запрос метода POST получает входные данные из тела запроса и строки запроса.
  • Данные, переданные методом POST, не будут отображаться в параметрах запроса в URL-адресе браузера.
  • параметры методов POST не сохраняются в истории браузера.
  • Нет ограничений на длину передаваемых данных.
  • Помогает вам безопасно передавать конфиденциальную информацию, такую ​​как данные для входа, на сервер.

Пример метода GET

Вот пример метода GET:

 GET/RegisterStudent.asp?user=value1&pass=value2
 

Пример метода POST

Вот пример метода POST:

 POST/RegisterStudent.asp HTTP/1.1
Хост: www.guru99.com
пользователь=значение1&пароль=значение2
 

Форма, использующая тип содержимого application/x-www-form-urlencoded по умолчанию:

Разница между GET и POST

Вот основные различия между GET и POST:

12 4 ПОСТ
В методе GET значения отображаются в URL-адресе. В методе POST значения не отображаются в URL-адресе.
GET имеет ограничение на длину значений, обычно 255 символов. POST не имеет ограничений на длину значений, поскольку они передаются через тело HTTP.
GET работает лучше по сравнению с POST из-за простого характера добавления значений в URL. Он имеет более низкую производительность по сравнению с методом GET из-за времени, затрачиваемого на включение значений POST в тело HTTP.
Этот метод поддерживает только строковые типы данных. Этот метод поддерживает различные типы данных, такие как строковые, числовые, двоичные и т. д.
Результаты GET можно добавить в закладки. Результаты POST не могут быть добавлены в закладки.
Запрос GET часто кэшируется. Запрос POST трудно кэшировать.
GET Параметры остаются в истории веб-браузера. Параметры не сохраняются в истории веб-браузера.

Ознакомьтесь с нашим руководством по разнице между HTTP и HTTPS: — Нажмите здесь

Преимущества GET

Вот преимущества / плюсы использования GET:

  • Метод GET может извлекать информацию, идентифицированную URL-адресом запроса ( Единый идентификатор ресурса).
  • запросов GET можно просмотреть в истории браузера.
  • Позволяет сохранять результаты формы HTML.
  • Вы можете легко использовать метод GET для запроса необходимых данных.

Преимущества POST

Вот преимущества и плюсы использования POST:

  • Этот метод помогает определить URI ресурса.
  • Указать новый заголовок местоположения ресурса очень просто, используя заголовок местоположения.
  • Вы можете отправить запрос на принятие объекта в качестве нового ресурса, который идентифицируется URI.
  • Вы можете отправлять пользовательские данные на веб-сервер.
  • Это очень полезно, когда вы не имеете ни малейшего представления о ресурсе, который вы должны сохранить в URL-адресе.
  • Используйте POST, если вам нужен сервер, который контролирует создание URL-адресов ваших ресурсов.
  • POST — это безопасный метод, поскольку его запросы не сохраняются в истории браузера.
  • С помощью почты можно легко передавать большие объемы данных.
  • Вы можете сохранить данные в тайне.
  • Этот метод можно использовать для отправки двоичных данных, а также данных ASCII.

Недостатки GET

Вот недостатки/недостатки использования GET:

  • GET нельзя использовать для отправки текстовых документов или изображений.
  • Запросы GET можно использовать только для получения данных
  • Метод GET нельзя использовать для передачи конфиденциальной информации, такой как имена пользователей и пароли.
  • Длина URL-адреса ограничена.
  • Если вы используете метод GET, браузер добавляет данные к URL-адресу.
  • Вы можете легко добавить значение строки запроса в закладки в GET

Недостатки POST

Вот минусы/недостаток использования POST:

  • Невозможно сохранить данные, так как данные, отправленные методом POST, не видны в URL-адресе.
  • Вы не видите запросы POST в истории браузера.
  • Этот метод несовместим со многими настройками брандмауэра.
  • Вы не можете использовать пробелы, табуляцию, резню и т. д.
  • Этот метод несовместим с некоторыми настройками брандмауэра.