【发布时间】:2010-04-18 18:40:01
【问题描述】:
目前,当我设计表单时,我喜欢让提交按钮的名称与表单的 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() 变得完全没有必要。
【问题讨论】:
-
我的团队目前是这样做的。我不喜欢它,因为我们的表单现在需要有一个提交按钮。执行此操作的人转移到另一个团队;我和另一个队友很难弄清楚为什么我们的表单没有提交,然后我们意识到它需要一个提交按钮来进行验证。
标签: php javascript