PHP $ _REQUEST $ _GET或$ _POST

时间:2011-08-10 16:01:55

标签: php post get request

说我有一张表格:

<form action="form.php?redirect=false" method="post">
    <input type="hidden" name="redirect" value="true" />
    <input type="submit" />
</form>

在form.php上:

var_dump($_GET['redirect']) // false
var_dump($_POST['redirect']) // true
var_dump($_REQUEST['redirect']) // true

如何获取注入的查询字符串参数以覆盖$_POST值,以便$_REQUEST['redirect'] = false

6 个答案:

答案 0 :(得分:11)

如果要更改$_GET数组中$_POST优先于$_REQUEST的优先级,请更改php.ini中的request_order指令。

默认值为:

request_order = "GP"

P代表POST,G代表GET,后面的值具有优先权,因此在此配置中,查询字符串中的值将覆盖$_REQUEST数组中POST传递的值。如果你想要POST覆盖GET值,只需按照这样切换它们:

request_order = "PG"

您需要重新启动webserver / php才能生效。

(编辑使用Brad建议的更合适的request_order,而不是variables_order

答案 1 :(得分:4)

请参阅PHP.ini中的request_order指令。

但实际上,您应该明确使用您特别想要的超全局。否则,您不能依赖系统之间的一致行为,然后您的变量可能会被意外覆盖。

答案 2 :(得分:2)

请参阅PHP的request order参数。在这里,您可以设置数组是否填充post,get,cookie或其任何组合。

答案 3 :(得分:0)

$_REQUEST['redirect'] = $_POST['redirect'];

$_REQUEST['redirect'] = $_GET['redirect'];

取决于你想要的东西

答案 4 :(得分:0)

如果你在那最后一行意味着false,并且希望$_REQUEST仍然拥有来自POST和GET数据的数据,并且不想弄乱配置,请使用:< / p>

$_REQUEST = array_merge($_POST, $_GET);

答案 5 :(得分:0)

我只想添加@Chris Hepner 的回答,正如他所说:

<块引用>

"后面的值优先",

后面是字母 P 而不是 G,因此这意味着 POST 值具有优先权,并且 POST 值会覆盖 GET 值。

代码示例:

<?php 
    echo ini_get('request_order')."\n";
    echo ini_get('variables_order')."\n";
  
    echo var_export($_REQUEST,1);
?>

结果:

EGPCS
array (
    'abc' => '5',
    'fed' => '2',
    'cde' => '8',
    ...
)

我添加了这条评论,供其他人寻找相关信息