目前,当我设计我的表单时,我喜欢保持提交按钮的名称等于表单的ID。然后,在我的PHP中,我只需要if(isset($_POST['submitName']))
以检查表单是否已提交以及哪个表单已提交。什么是确定提交表单的最佳方式?
首先,这种方法是否存在安全问题或设计缺陷?
我遇到的一个问题是,当我希望用JavaScript覆盖我的表单以便为用户提供更快的验证。例如,虽然我显然需要保留服务器端验证,但如果在模糊输入时错误消息以内联方式显示,则对用户更方便。此外,点击提交按钮后,提供整个表单验证将会很好。
因此,当用户单击表单的提交按钮时,如果验证通过,我将停止默认操作,执行验证,然后尝试重新提交传统的提交功能。为了做到这一点,我使用form.submit()
方法,但不幸的是,这不会发送提交按钮变量(因为它应该是form.submit()可以在没有任何按钮被点击的情况下调用)。这意味着我的PHP脚本无法检测到表单已被提交。
解决此问题的正确方法是什么?看起来标准的解决方案是在通过验证后添加一个隐藏的字段到表单中,该表单的ID为name。然后,当form.submit()被调用时,这是代替submit按钮传递的。然而,这个解决方案对我来说似乎很不理智,所以我想知道我是否应该:
a)使用另一种方法来检测哪个表单已被提交,而不依赖于传递提交按钮。如果有,还有什么替代方案?显然,从一开始就有一个额外的隐藏领域是没有更好的。
b)使用另一个Javascript解决方案,它允许我保留我的非Javascript设计。例如,是否有替代form.submit(),它允许我传递额外的数据?
c)把它吸起来,只是用Javascript插入一个隐藏的字段。
更新: 我接受了正确的答案,但我只是想澄清我的错误在这里,所以这会对其他人更有帮助。我使用Mootools,我非常天真地认为,当我使用addEvent('submit'...)时,我需要立即调用event.stop()以防止提交。实际上情况并非如此,只有在验证失败的情况下,我才可以调用event.stop()。否则,像往常一样,默认提交被触发,并且使用form.submit()变得完全不必要。
我的团队目前是这样做的。我不喜欢它,因为我们的表单现在需要有一个提交按钮。实施这个的人转移到另一个团队中;我和另一个队友很难弄清楚为什么我们的表格没有提交,然后我们意识到它需要提交按钮进行验证。 – b01 2013-04-28 21:41:49