我需要从表中显示一些预先存在的数据,但需要禁用它们以防止用户编辑它们。所以我禁用了它们
$form -> getElement("elementname") -> setAttrib("disable", true);
当我提交表单时,我发现表单元素根本没有提交,只是因为它被禁用了。我在测试删除禁用选项时确认了这一点。
发生了什么事?难道我做错了什么?怎么解决这个问题?
答案 0 :(得分:21)
这是设计使然,禁用的元素不会随表单一起提交。
你在做什么实际上是一种空洞的做法,无论你对该形式做什么,最终用户都可以编辑 。你根本无法信任表单输入 - 甚至隐藏字段 - 不被篡改。
您最好的选择是向用户显示信息并在提交表单后再次加载;最糟糕的是将它存放在会话中。
答案 1 :(得分:17)
这对我来说就像一个魅力。 它可以防止元素被编辑并将其传递给帖子。
$this->username->setAttrib('readonly', 'true');
答案 2 :(得分:1)
我使用隐藏元素处理这些类型的场景。添加隐藏元素,其内容与禁用元素中的内容相同。发布表单时,使用隐藏元素中的值。
但要小心使用者可以在提交表单之前使用Firebug或其他工具修改隐藏元素的值。在处理之前,请务必再次检查表单值。