我一直在阅读PHP表单处理教程,他们建议在表单中使用隐藏字段,以便PHP可以使用类似的方法IF ($_POST['hidden_field'] == whatever
来检测表单是提交还是仅显示.
但是在XDebug
使用Notepad ++并逐步完成代码并观察变量之后,我不清楚为什么我们不能IF ($_POST['submit_button'] == 'Ok')
完全消除隐藏字段.
毕竟,似乎没有时间设置隐藏字段而没有设置其他表单字段(即使它们是空的).第一次,在显示表单时以及在提交表单之前,$_POST
变量已经存在,但它是空的.我想我们也可以IF (!empty($_POST))
用来查看表单是否已提交?
是否有一个特殊情况我缺少哪里需要隐藏字段来检测表单提交?
编辑:好的,我失踪的特殊情况,需要隐藏字段似乎是这个.http://www.vbforums.com/showthread.php?562749-PHP-Checking-if-a-form-has-been-submitted-the-correct-way似乎如果按Enter键提交表单, $ _POST变量不包含提交按钮的值.Chrome似乎没有这样的行为,但也许其他浏览器可以.
是否有一个特殊情况我缺少哪里需要隐藏字段来检测表单提交?
要检测表单提交,您不需要表单中的隐藏字段,但有时它被用作垃圾邮件保护.例如,如果您在表单中放置一个隐藏字段,例如
<input type="text" name="humans" id="humans" class="humans" />
Run Code Online (Sandbox Code Playgroud)
您可以使用css类来隐藏字段
.humans { display: none; }
Run Code Online (Sandbox Code Playgroud)
当您检查表单提交时,您还可以检查字段是否为空,例如
if(!empty($_POST['humans'])) {
// it's spam
}
else {
// it's human
}
Run Code Online (Sandbox Code Playgroud)
因为,bots/spammers
(使用自动脚本)可以提交表单,并且基本上是script
尝试填写所有字段,并且不知道您为了捕获它而隐藏的字段,这样您可以确定它是由人提交还是机器人.您可以阅读本文以获取更多信息并更好地理解垃圾邮件拦截.
不,你有正确的想法.
我不建议这样做,但是 - 听起来像编写教程的人有点像新手.;)如果您已经为表单使用POST,我会坚持使用更传统(更简单)的方法来检测表单是否已提交,或者是否有人通过HTTP方法查看页面($ _SERVER ['REQUEST_METHOD'],在PHP中为"GET"或"POST".