PHP: переменные, отправленные по почте, находятся в массиве $ _GET, а массив $ _POST пуст - PullRequest
0 голосов
/ 25 октября 2019

Я использую PHP-сервер со следующим кодом.

<?php
    if ($_SERVER["REQUEST_METHOD"] === "POST") {
        if (isset($_POST["username"]) && isset($_POST["password"])) {
            echo $_POST["username"];
            http_response_code(200);
        }
    }
?>

I Ожидается Сценарий для возврата имени пользователя , если имя пользователя и парольустанавливаются в почтовом запросе. Однако , скрипт ничего не возвращает . При отладке с Postman я обнаружил, что первый оператор if проходит - я отправляю запрос на публикацию , но массив $ _ POST пуст . Я обнаружил, что вместо массива $ _POST , массив $ _REQUEST, в частности массив $ _ GET, содержит мои параметры .

Для сервера REQUEST_METHOD установлено значение POST, но массив $ _GET содержит мои параметры.

Итак, этот код работает:

<?php
    if ($_SERVER["REQUEST_METHOD"] === "POST") {
        if (isset($_GET["username"]) && isset($_GET["password"])) {
            echo $_GET["username"];
            http_response_code(200);
        }
    }
?>

У кого-нибудь есть идеи, почему это происходит? Я программировал php некоторое время назад, может быть, я упускаю что-то очевидное.

1 Ответ

3 голосов
/ 25 октября 2019

Суперглобальные значения $_POST и $_GET не названы в честь методов HTTP (по крайней мере, не напрямую).

Они названы в соответствии со значениями атрибута method формы HTML и заботятся о том, гдеданные находятся в запросе.

  • $_GET заполняется данными из строки запроса URL-адреса
  • $_POST заполняется application / x-www-form-urlencoded и multipart/ form-data закодированные данные в теле запроса

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

Используйте Вкладка Body , а не вкладка Params для ввода ваших данных. Убедитесь, что вы выбрали данные формы или x-www-form-urlencoded .

Sceenshot of Postman

...