【问题标题】:PHP: Variables sent via post are in the $_GET array and $_POST array is emptyPHP:通过 post 发送的变量在 $_GET 数组中,而 $_POST 数组为空
【发布时间】:2020-02-21 21:46:51
【问题描述】:

我正在运行一个带有以下代码的 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 数组是空的。我发现不是 $_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 编程过,也许我遗漏了一些明显的东西。

【问题讨论】:

  • 执行POST的代码或HTML表单在哪里?我猜如果一个表格,那么method 设置为GET
  • “有人知道为什么会发生这种情况吗?” - 似乎有理由得出这样的结论,因为您的值在查询字符串中而不是在 POST 中身体。您是否尝试过检查发送到代码的请求,而不仅仅是代码本身?

标签: php post http-post postman


【解决方案1】:

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

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

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

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

使用 Body 标签而不是 Params 标签来输入您的数据。确保选择 form-datax-www-form-urlencoded

【讨论】:

    猜你喜欢
    • 2012-03-30
    • 2018-05-09
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2017-09-20
    • 2016-10-11
    相关资源
    最近更新 更多