确定哪个表单已提交的最佳方法是什么?

时间:2010-04-18 18:40:02

标签: php javascript

目前,当我设计表单时,我喜欢将提交按钮的名称保持等于表单的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()变得完全没必要。

2 个答案:

答案 0 :(得分:6)

您可以使用action=file1.phpaction=file2.php将表单发送给不同的处理程序。

他们是否使用一堆相同的代码进行处理?将它放入单独的文件中,包括共性,并在每个处理文件中写入唯一的位。不要破解,组织。

对于Javascript验证,不要暂停默认操作然后恢复,而是执行此操作:

if (validation != valid) {
    return false;
}

这样,如果关闭JS或验证失败,表单操作/事件就完好无损,并且行为符合预期,否则就会出现问题。当然,肯定会保留服务器端验证。这是“真正的”验证,客户端只是为了取悦用户并节省时间。永远不要依赖它。

答案 1 :(得分:3)

您可以自定义表单的操作以添加获取键/值;例如action="formhandle.php?formid=10"