2011-06-14 19 views
5

¿Alguien puede explicarme esto?

Tengo el siguiente código:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<input type="text" id="testField" /> 
<input type="submit"> 
</form> 
<br /><br /> 
<pre> 
<?php print_r($_POST); ?> 
</pre> 

Esto funciona muy bien en mi caja principal dev, y en el servidor. Sin embargo, tengo que trabajar de forma remota en mi computadora portátil en este momento. Instalé exactamente la misma versión de WAMPServer 2.1a que en mi configuración de desarrollo, y la matriz $ _POST está vacía.

Si declaro el campo como:

<input type="text" name="testField" /> 

consigo la salida esperada.

+2

Fuera del punto, pero debe tener en cuenta que esto crea una vulnerabilidad XSS: ' '. En su lugar use ' '. – Chris

Respuesta

8

De la especificación HTML 4.01, § 17.2, "Controls":

"nombre de control" de un control viene dado por su atributo de nombre.

...

Cuando se envía un formulario para su procesamiento, algunos controles tienen su nombre emparejado con su valor actual y estos pares se envía con el formulario.

"id" no importa.

7

Comportamiento estándar. Siempre use name dentro del formulario.

+0

De hecho. Estoy sorprendido por el comportamiento en la caja de desarrollo. "Funciona bien" parece completamente contrario al sentido común y al comportamiento habitual de las formas HTML. –

+2

Este es el caso. Puede ser que el navegador en su caja de desarrollo principal automágicamente use el 'id' como el atributo' name' faltante. – Chris

0

Nunca se puede pasar un valor a otra página utilizando el id., El único atributo que php puede leer a través de methos POST es usar el nombre del objeto.