禁用的表单元素不会被提交。

10

我需要展示一些来自表格的预先存在的数据,但需要将其禁用以防止用户编辑。因此,我将它们禁用了。

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

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

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


无论如何,这并不是确保用户不会编辑字段的正确方法。您应该添加一个验证器来实现这个目标。 - Aurelio De Rosa
2
如果目标只是展示现有数据,那么就直接打印出来,不要使用表单字段。 - user241168
3个回答

21

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

你现在所做的实际上是无效的,无论你对表单做什么,都会被最终用户编辑。你根本不能相信表单输入——即使是隐藏字段——不会被篡改。

你最好的选择是向用户显示信息,并在表单提交后重新加载它;在最坏的情况下,将其存储在会话中。


17

这对我来说非常有效。它可以防止元素被编辑并通过post方法传递。

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

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

1
我处理这些情况时使用隐藏元素。添加一个与禁用元素中相同内容的隐藏元素。在提交表单时,使用隐藏元素的值。但是要注意,用户可以在提交表单前使用Firebug或其他工具修改隐藏元素的值。始终在处理之前重新检查表单值。

3
在处理表单之前,请再次检查表单的值。如果你在提交表单后还需要检查该值是否符合要求,那么首次提交表单就没有意义了。 - Dunhamzzz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接