gpt4 book ai didi

PHP:INPUT_POST(在 filter_input_array 中使用)覆盖之前对 $_POST 的所有修改

转载 作者:行者123 更新时间:2023-12-04 01:42:57 26 4
gpt4 key购买 nike

INPUT_POST PHP过滤函数参数 filter_input_array() 例如在

filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

似乎覆盖了应用于超全局 $_POST 的任何修改。

测试:
<?php
// 1.
$_POST['abc'] = '123';
var_dump($_POST);

// 2.
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
var_dump($_POST);
?>

输出:

//2 之后。您的 $_POST 将为空(因为初始 POST 为空)
index.php:4:
array (size=1)
'abc' => string '123' (length=3)

index.php:8:null

所以一定要放
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING, true);

顶部 你的脚本!

问:是否有人也注意到了这种行为——或者我在推理时犯了错误?

可能的答案:数据取自 superglobal $_请求 不是来自 $_POST

最佳答案

$_POST 和 INPUT_POST 之间没有直接联系。

后者仅指定 filter_input_vars 应该从最初用于填充 $_POST 的相同源获取要过滤的数据。稍后对 $_POST 的操作不会改变最初发送到脚本的 POST 数据。

您可以通过设置一个将隐藏输入字段发布到脚本的小表单来轻松验证这一点。然后在该脚本中向 $_POST 添加一个附加条目,就像您在上面的示例中所做的那样。你会看到 filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING)返回一个数组,其中包含隐藏字段的条目,但不包含您手动添加到 $_POST 的条目。

http://php.net/manual/en/filter.constants.php将 INPUT_POST 描述为“POST 变量”,并且指向 $_POST 描述的链接在这里可能有点误导,当然。但公平地说,它在那里说 POST,而不是 $_POST。

so be sure, to put $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING, true); on the top of your scripts!



我不会真的推荐那个。每个 PHP 开发人员都会假设 $_POST 包含未过滤的数据。只要你 f.e.开始使用 3rd-party 模块,这可能会导致麻烦。

保留 $_POST 原样,并使用单独的变量来保存过滤后的 POST 参数,是更好的方式去恕我直言。

关于PHP:INPUT_POST(在 filter_input_array 中使用)覆盖之前对 $_POST 的所有修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45732836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com