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