【问题标题】:Does GET variable override POST variable?GET 变量会覆盖 POST 变量吗?
【发布时间】:2023-04-06 20:13:01
【问题描述】:

假设我有一个表单,它发布其字段,例如 payment.php?amount=100

而不是使用

$amount=$_POST['amount'];

如果我使用会怎样:

$amount=$_REQUEST['amount'];

我的问题是,当$_REQUEST 方法可以用于检索get 和post 变量时,表单发送的post 变量是否会被get 变量覆盖?

【问题讨论】:

标签: php post get


【解决方案1】:

如果您使用的是PHP 5.3,那么您可以选择$_REQUEST 顺序。来自 PHP 手册:

request_order 指令描述了 PHP 将 GETPOSTCookie 变量注册到 _REQUEST 数组中的顺序。注册是从左到右完成的,新的值会覆盖旧的值。

正如它所说,它比$_GET 更偏爱$_POST。因此,如果您有两个相同的值,$_REQUEST 将采用 $_POST 的值而不是 $_GET

【讨论】:

    【解决方案2】:

    POST 和 GET 是两个不同的超级全局变量,它们不会相互覆盖。

    php.ini 中的request_order 配置指令将确定$_REQUEST 中将包含哪些超级全局变量(GET、POST、COOKIE、ENV 和 SERVER)

    http://php.net/request-order

    该指令描述了 PHP 将 GET、POST 和 Cookie 变量注册到 _REQUEST 数组中的顺序。注册是从左到右完成的,新的值会覆盖旧的值。

    通常(默认情况下)它设置为 GP。这意味着在最终的 _REQUEST 数组中,如果两者都存在,POST 将覆盖 GET。

    【讨论】:

      【解决方案3】:

      $_REQUEST 中的变量通过 GET 提供给脚本, POST 和 COOKIE 输入机制,因此可以通过以下方式修改 远程用户并且不能被信任。的存在和秩序 此数组中列出的变量是根据 PHP 定义的 variables_order 配置指令。

      variables_order string 设置 EGPCS 的顺序(Environment, Get, Post、Cookie 和 Server) 变量解析。

      所以在你的情况下,POST 是在先。

      http://php.net/manual/en/reserved.variables.request.php http://www.php.net/manual/en/ini.core.php#ini.variables-order

      【讨论】:

        【解决方案4】:

        $_REQUEST 处理 $_POST 和 $_GET 值

        $_POST 方法对最终用户不可见,因此他/她无法操纵此信息,因此更安全,并且没有 $_GET 方法那样发送信息的限制。

        $_REQUEST方法用于在页面调用的数据传输上接收信息的数据,与数据发送方法无关...

        最重要的是$_REQUEST方法只用于读取传递的信息它不用于通过页面调用发送信息。

        无论哪种方式,速度差异都应该是最小的,当然使用 REQUEST 时,POST 会覆盖 GET

        【讨论】:

          猜你喜欢
          • 2019-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-27
          • 2017-02-25
          • 2021-08-24
          相关资源
          最近更新 更多