为什么使用隐藏字段来检测表单提交?

Rob*_*tSF 3 php forms

我一直在阅读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似乎没有这样的行为,但也许其他浏览器可以.

The*_*pha 6

是否有一个特殊情况我缺少哪里需要隐藏字段来检测表单提交?

要检测表单提交,您不需要表单中的隐藏字段,但有时它被用作垃圾邮件保护.例如,如果您在表单中放置一个隐藏字段,例如

<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尝试填写所有字段,并且不知道您为了捕获它而隐藏的字段,这样您可以确定它是由人提交还是机器人.您可以阅读本文以获取更多信息并更好地理解垃圾邮件拦截.


use*_*104 5

不,你有正确的想法.

我不建议这样做,但是 - 听起来像编写教程的人有点像新手.;)如果您已经为表单使用POST,我会坚持使用更传统(更简单)的方法来检测表单是否已提交,或者是否有人通过HTTP方法查看页面($ _SERVER ['REQUEST_METHOD'],在PHP中为"GET"或"POST".