【问题标题】:The disabled form element is not submitted禁用的表单元素未提交
【发布时间】:2011-12-14 02:28:18
【问题描述】:

我需要显示表格中的一些预先存在的数据,但需要禁用它们以防止用户对其进行编辑。所以我禁用了它们

$form -> getElement("elementname") -> setAttrib("disable", true);

当我提交表单时,我发现表单元素根本没有被提交,只是因为它被禁用了。我在测试删除禁用选项时确认了这一点。

发生了什么?难道我做错了什么?如何解决?

【问题讨论】:

  • 无论如何,这不是确保用户不会编辑该字段的正确方法。你应该添加一个验证器来实现这个目标。
  • 如果目标是只显示预先存在的数据,那么就这样做:打印出来,根本不要使用表单域。

标签: zend-framework zend-form-element


【解决方案1】:

这对我来说就像一个魅力。 它可以防止元素被编辑并将其传递给帖子。

$this->username->setAttrib('readonly', 'true');

【讨论】:

  • JavaScript 仍然可以访问只读元素并更改其值。
【解决方案2】:

我使用隐藏元素处理这些类型的场景。添加一个隐藏元素,其内容与禁用元素中的内容相同。发布表单时,使用隐藏元素中的值。

要小心,用户可以在提交表单之前使用 Firebug 或其他工具修改隐藏元素的值。在处理之前,请务必再次检查表单值。

【讨论】:

  • Always check the form values again before processing 如果您必须在提交表单后检查该值是否是您想要的值,那么首先提交它是没有意义的。
【解决方案3】:

这是设计使然,禁用的元素不会随表单一起提交。

您所做的实际上是一种无效的做法,无论您对该表单做什么,最终用户都可以编辑。您根本无法相信表单输入 - 甚至是隐藏字段 - 不会被篡改。

最好的办法是向用户显示信息并在提交表单后再次加载;最坏的情况是将其存储在会话中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    相关资源
    最近更新 更多