【问题标题】:PHP $_POST, $_GET, or $_REQUESTPHP $_POST、$_GET 或 $_REQUEST
【发布时间】:2013-07-12 14:57:13
【问题描述】:

我有一个函数文件,我在其中处理 POST 和 GETS,让用户执行发布或获取。它更像是一个 API 调用。

我应该这样做还是使用 $_REQUEST 同时处理 POST 和 GET?

if ($_SERVER['REQUEST_METHOD'] === "GET") {

    $function = $_GET['f'];
    $user_id  = $_GET['user_id'];
}
elseif ($_SERVER['REQUEST_METHOD'] === "POST") {

    $function = $_POST['f'];
    $user_id  = $_POST['user_id'];
}

$res = new stdClass();

if (isset($function)) {

    switch ($function) {    
         ....
    }
}

【问题讨论】:

  • 是的,$_REQUEST 处理 $_GET$_POST
  • 我喜欢你现在的做法。 $_REQUEST 也可能具有 $_COOKIE 值,具体取决于 ini 变量 variables_order,它可能因系统而异。明确胜于模棱两可。
  • 这就是拥有 $_REQUEST 的意义所在。
  • 注意来自不同来源的混合参数,即将 y 发布到 index.php?x=1 并在 cookie 中使用 z 并且请求包含 x、y 和 z

标签: php html post get request


【解决方案1】:

您当前的方法提供的好处是您可以为每个实例使用最佳方法。有时您不想 GET,因为它只是将数据附加到 URL,将其暴露给任何看起来的人,以及将“调用”暴露给任何知道如何使用 URL 做坏事的人。

如果您担心捕获无法控制请求方法的调用,您可以添加 $_REQUEST 作为最后的手段,但我建议限制您使用它的方式 - 例如:仅从DB 而不是任何修改它的东西。

【讨论】:

  • 缺点是他不能混合$_REQUEST类型(当然是在if语句内)
  • 知道这一点的人,也知道如何发布内容。那也不是那么难。如果您自己的页面会在 url 中传递敏感信息,那就太糟糕了,但在接收方,支持它并没有什么坏处。便于调试。
  • 另一个缺点是重复代码!这个怎么样$vars = $_SERVER['REQUEST_METHOD'] === "GET" ? $_GET : $_POST;$vars['user_id']
  • 应该是$user = ($_SERVER['REQUEST_METHOD'] === 'GET' ? $_GET['user_id'] : $_POST['user_id']);
  • @RobertDeBoer 不,我正在分配来自$_POST$_GET 的所有值,以便在$var 中访问,这样您每次想要获取变量时都不需要if 语句
【解决方案2】:

如果你想同时允许,你可以使用$_REQUEST。如果您不关心该值是 POST 还是 -er- GETted,这会容易得多。但请注意,$_REQUEST 也可能包含基于 settings in PHP.ini 的 cookie。

【讨论】:

  • "request_order:请注意,出于安全考虑,默认分发 php.ini 文件不包含 'C' 用于 cookie。",这意味着 $_REQUEST 可以包含 3 个中的任何一个,具体取决于服务器配置。
  • @Luke 感谢您的加入!
【解决方案3】:

$_REQUEST 可以同时是$_POST$_GET,但它可以也可以是$_COOKIE,取决于request_order或@ 987654322@ 设置。因为根据 ini 设置,它也可能不是这些,所以我根本不会使用它。

我的建议是分别使用$_GET$_POST。它们的意思完全不同。您想使用 $_POST 进行操作,使用 $_GET 进行获取。如果您想根据$_GET 填写表单,您可以使用$_SERVER['REQUEST_METHOD'] == 'POST' 来确定实际发生的情况并在两者之间切换。

【讨论】:

    【解决方案4】:

    $_REQUEST 是处理($_GET & $_POST) 两种类型的请求最方便的方式。所以使用 $_REQUEST :

    REQUEST METHOD IN PHP

    【讨论】:

      【解决方案5】:

      是的,您可以,$_REQUEST 处理 $_POST$_GET

      【讨论】:

      • @GeorgeCummins '或者会使用 $_REQUEST 同时处理 POST 和 GET 吗?'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2017-10-30
      • 2019-08-28
      • 1970-01-01
      相关资源
      最近更新 更多