2011-10-24 11 views
10

Necesitaba mostrar algunos datos preexistentes de una tabla y necesitaba deshabilitarlos para evitar que el usuario los editara. Así que lesEl elemento de formulario desactivado no se ha enviado

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

Cuando envíe el formulario de discapacitados, descubrí, que el elemento de formulario no quede sometido en absoluto, simplemente porque se ha desactivado. Confirmé esto cuando probé eliminando las opciones de desactivación.

¿Qué está pasando? ¿Estoy haciendo algo mal? ¿Cómo resolver esto?

+0

De todos modos, esta no es la forma correcta de asegurarse de que el usuario no edite el campo. Debe agregar un validador para lograr este objetivo. –

+2

Si el objetivo es mostrar solo los datos preexistentes, simplemente haz eso: imprimirlo, no usar campos de formulario. –

Respuesta

21

Esto es por diseño, los elementos desactivados no se envían con el formulario.

Lo que está haciendo es en realidad una práctica nula, no importa lo que haces a esa forma de venta que en se ser modificable por el usuario final. Simplemente no puede confiar en la entrada del formulario, incluso en los campos ocultos, para no ser manipulado.

Su mejor opción es simplemente mostrar la información al usuario y volver a cargarla una vez que se haya enviado el formulario; en el peor, almacenarlo en una sesión.

1

Manejo este tipo de escenarios utilizando elementos ocultos. Agregue un elemento oculto con el mismo contenido que está allí en su elemento deshabilitado. Cuando se publique el formulario, use el valor del elemento oculto.

Pero tenga cuidado que el uso puede modificar el valor del elemento oculto utilizando Firebug u otras herramientas antes de enviar el formulario. Siempre revise los valores del formulario nuevamente antes del procesamiento.

+3

'Siempre compruebe los valores del formulario nuevamente antes del procesamiento' Si va a tener que comprobar que el valor es el que desea después de enviar el formulario, no tiene sentido enviarlo en primer lugar. – Dunhamzzz

17

Esto funcionó como un encanto para mí. Impide que el elemento se edite y lo pasará por la publicación.

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

Nota: Esto no funciona para los tipos de entrada de selección –

+0

JavaScript aún puede acceder al elemento de solo lectura y cambiar su valor. –

Cuestiones relacionadas