【问题标题】:Check whether a request is GET or POST [duplicate]检查请求是 GET 还是 POST [重复]
【发布时间】:2010-11-25 05:19:18
【问题描述】:

可能重复:
PHP detecting request type (GET, POST, PUT or DELETE)

这应该很容易。

我有一个脚本,在脚本中我想确定请求是通过GET 还是POST 方法到达的。

正确的做法是什么?

我正在考虑使用类似的东西

if (isset($_POST)) {
    // do post
} else  {
    // do get
}

但在我内心深处,我觉得这不是正确的方法。有什么想法吗?

【问题讨论】:

  • 如果您以处理变量为目标而不考虑请求类型,为什么不能尝试 $_REQUEST["variable_name"]?
  • @AnoopPete - 因为这不是被问到的。 $_REQUEST 将接受 GET、POST、PUT、DELETE(任何东西)。这种做法不仅可怕,而且可能导致安全风险。想象一下,您的逻辑只是期望表单 POST 方法,但您允许接受任何/所有方法。这可能会在坏人手中造成可怕的后果。
  • 尝试使用它,它将帮助您无论是获取还是发布表单 if( $_REQUEST["name"] || $_REQUEST["age"] ) { echo "Welcome ". $_REQUEST['name']。 "
    ";回声“你是”。 $_REQUEST['年龄']。 “岁。”;出口(); }

标签: php


【解决方案1】:

【讨论】:

    【解决方案2】:

    更好地使用$_SERVER['REQUEST_METHOD']:

    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        // …
    }
    

    【讨论】:

    • @Gumbo 我们需要===,如果我使用==会怎样
    • 您可以使用=== ==。前者只是一种很好的做法,因为它检查变量是否“相同”。 (例如:5 == '5'true,但 5 === '5'false
    • 如果它既不是 GET 也不是 POST,也考虑返回 405。 if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 发布 } elseif ($_SERVER['REQUEST_METHOD'] === 'GET') { // 获取 } else { http_response_code(405) ;死(); }
    • 根据NetBeans IDE,直接访问$_SERVER不好。所以,在这种情况下,替代方案是if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') === 'POST') { … }
    • 我经历过 PHP 不主动设置 $_POST 全局变量的环境,所以我同意使用上述方法更可靠。
    猜你喜欢
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    相关资源
    最近更新 更多