代码之家  ›  专栏  ›  技术社区  ›  Rupert Madden-Abbott

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

  •  8
  • Rupert Madden-Abbott  · 技术社区  · 16 年前

    目前,当我设计表单时,我喜欢保持submit按钮的名称等于表单的id。然后,在我的php中,我只是 if(isset($_POST['submitName'])) 以便检查是否提交了表格以及提交了哪一份表格。

    首先,这种方法是否存在安全问题或设计缺陷?

    我遇到的一个问题是,我希望用javascript覆盖表单,以便为用户提供更快的验证。例如,虽然我显然需要保留服务器端验证,但如果在模糊输入时,错误消息内联显示,则对用户更方便。此外,单击submit按钮时最好提供整个表单验证。

    因此,当用户单击表单的提交按钮时,我将停止默认操作,执行验证,然后尝试重新启用传统的提交功能(如果验证通过)。为了做到这一点,我使用 form.submit() 方法,但不幸的是,这不会发送submit button变量(因为它应该是form.submit()形式,可以在不单击任何按钮的情况下调用它)。这意味着我的php脚本无法检测表单是否已提交。

    解决这个问题的正确方法是什么?标准的解决方案似乎是在通过名为form's id的验证后,在表单中添加一个隐藏字段。然后在调用form.submit()时,它将代替submit按钮一起传递。然而,这个解决方案对我来说似乎很不公平,所以我想知道我是否应该:

    a)使用另一种方法来检测哪个表单已经提交,而不依赖于传递submit按钮。如果是这样,还有什么选择?显然,从一开始就有一个额外的隐藏字段并不是更好的。

    b)使用另一种javascript解决方案,它允许我保留我的非javascript设计。例如,是否有一个替代form.submit()的方法允许我传递额外的数据?

    c)把它吸起来,然后使用javascript插入一个隐藏字段。

    更新: 我已经接受了正确的答案,但我只想在这里澄清我的错误,这样对其他人会更有帮助。我使用mootools,我非常天真地相信,当我使用addEvent('submit'…)时,我需要立即调用event.stop(),以防止提交。实际上情况并非如此,我只能在验证失败时调用event.stop()。否则,会像往常一样触发默认提交,并且使用form.submit()变得完全不必要。

    2 回复  |  直到 13 年前
        1
  •  6
  •   Alex Mcp    16 年前

    您可以使用 action=file1.php action=file2.php .

    它们是用一堆相同的代码处理的吗?将其放入单独的文件中,包括共性,并在每个处理文件中写入唯一的位。不要黑,组织好。

    对于javascript验证,不要停止默认操作然后继续,而是执行以下操作:

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

    这样,如果js被关闭或验证失败,表单操作/事件就完好无损,其行为与预期一致,否则就会崩溃。当然,当然保留服务器端验证。这是“真正的”验证,客户端只是为了取悦用户并节省时间。不要为了你而依赖它。

        2
  •  3
  •   Jared Forsyth appas    16 年前

    您可以自定义窗体的操作以添加get键/值;例如 action="formhandle.php?formid=10"

    推荐文章