温馨提示:本文翻译自stackoverflow.com,查看原文请点击:php - Form with POST method returns $_REQUEST but $_POST is empty
forms php post

php - 具有POST方法的表单返回$ _REQUEST,但$ _POST为空

发布于 2020-04-08 11:58:36

使用PHP7.x,我有一个简单的表格

<form method='post' action=''>
<input type='text' name ='yourname'>
<input type='submit' name = 'submitted' value = 'here'>
</form>

提交按钮可以正常工作。通过开发人员工具查看POST,我看到了提交的输入字段的值。因此,“开发人员工具”窗口中的POST参数将显示输入的值。

但是,如果我的处理页面(“操作”页面)包含此代码

echo $_POST['yourname'];

输出为空。该语句 echo $_REQUEST['yourname']显示输入的值。

为什么不$_POST['yourname']显示值?

而且,我使用此命令清除所有表单数据

$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

我可以更改代码以使用$_REQUEST['yourname'],但是为什么不$_POST['yourname']显示数据?而且,我会filter_input_array()“清理”结果$_REQUEST值吗?

添加 了对代码的更正(我在示例代码中的错误语句中添加了“操作”;该代码不是实际使用的代码。实际代码在正确的位置具有“操作”参数。示例代码是一个通用示例,正如我在使用“表单”的许多代码区域中所看到的那样。

但是不了解“接近”。这是一个编程领域(据我所知),这是一个编程问题:“为什么POST在提交时不填充$ _POST数组”。

而且,第二个问题是“ filter_input_array是否'清除'$ _REQUEST中的变量?” 没有回答。(也许应该是一个单独的问题。)

但是对于为什么这不是该堆栈的适当问题却感到失望和不清楚。(是的,我阅读了“规则”。)

查看更多

提问者
Rick Hellewell
被浏览
106
Rick Hellewell 2020-02-04 02:29

我对此进行了一些进一步的测试,想简化代码并重现问题。该代码位于具有各种“包含”的网站上。因此,我采用了简单的代码(只是一个表单,然后print_r是$ _GET / POST / REQUEST的表单)来帮助重复该问题。

includes包含以下语句以清理所有输入:

$_POST = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_GET = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

看起来还不错,不是吗?标准清理$_GET$_POST变量。这没东西看。向前走。

但仔细观察。我在代码中多次使用这些语句。继续前进。但是应该是这样的:

$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);

请注意,第一个块是将GET过滤到POST中,然后将POST过滤到GET中。阅读困难的代码!

我称这为“ SAF”错误-“对额头拍打”。或“ LCG”-“仔细看,蚱hopper”。

<sigh> 谢谢您的帮助。