使用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中的变量?” 没有回答。(也许应该是一个单独的问题。)
但是对于为什么这不是该堆栈的适当问题却感到失望和不清楚。(是的,我阅读了“规则”。)
我对此进行了一些进一步的测试,想简化代码并重现问题。该代码位于具有各种“包含”的网站上。因此,我采用了简单的代码(只是一个表单,然后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>
谢谢您的帮助。