2011-10-24 53 views
10

我需要显示表中的一些预先存在的数据,但需要禁用它们以防止用户编辑它们。所以我禁用了它们禁用的表单元素未提交

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

当我提交表单,我发现,该表单元素没有得到所有提交的,只是因为它被禁用。我在测试删除禁用选项时证实了这一点。

发生了什么事?难道我做错了什么?如何解决这个问题?

+0

无论如何,这不是确保用户不会编辑该字段的正确方法。你应该添加一个验证器来实现这个目标。 –

+2

如果目标是仅显示先前存在的数据,那么就这样做:打印出来,根本不要使用表单域。 – 2013-07-23 14:54:30

回答

21

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

你在做什么其实是一个空的做法,不管你在做放这种形式是什么由最终用户编辑。你根本无法信任表单输入 - 即使隐藏字段 - 也不会被篡改。

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

1

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

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

+3

'总是在处理之前再次检查表单值如果您要在提交表单后检查值是否是您想要的值,那么首先提交它就没有意义了。 – Dunhamzzz

17

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

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

注意:这对于选择输入类型不起作用 –

+0

JavaScript仍然可以访问只读元素并更改其值。 –