PHP:通过post发送的变量在$ _GET数组中,而$ _POST数组为空

时间:2019-10-25 14:12:38

标签: php post http-post postman

我正在运行一个包含以下代码的PHP服务器。

<?php
    if ($_SERVER["REQUEST_METHOD"] === "POST") {
        if (isset($_POST["username"]) && isset($_POST["password"])) {
            echo $_POST["username"];
            http_response_code(200);
        }
    }
?>
如果发布请求中同时设置了用户名和密码,

期望脚本返回用户名但是脚本不返回任何内容。使用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 个答案:

答案 0 :(得分:3)

$_POST$_GET超全局变量不是以HTTP方法命名的(至少不是直接命名)。

它们以HTML表单method属性值的名称命名,并关心数据在请求中的位置。

  • $_GET由URL的查询字符串中的数据填充
  • $_POST由请求正文中的application / x-www-form-urlencoded和multipart / form-data编码的数据填充

您必须发出POST请求,但要将数据放入URL的查询字符串中。 (请注意,查询字符串中的数据通常以纯文本格式记录在标准的Web服务器日志中,因此放置密码的确实位置很糟糕)

使用 Body 标签而不是 Params 标签输入数据。确保选择 form-data x-www-form-urlencoded

Sceenshot of Postman