2010-09-14 10 views
8

Me pregunto si hay algún tipo de garantía sobre el orden de las variables POST que veré en el lado del servidor.¿Cuál es el orden esperado de una matriz enviada en un formulario HTML?

Mi caso de uso es Tengo un formulario que un usuario completará para ingresar una lista de nombres y correos electrónicos. Estoy usando una tabla de filas, cada una de las cuales tiene dos entradas:

<table> 
<tr> 
<td><input type='text' name='name[]' /></td> 
<td><input type='text' name='email[]' /></td> 
</tr> 
<tr> 
<td><input type='text' name='name[]' /></td> 
<td><input type='text' name='email[]' /></td> 
</tr> 
</table> 

La fila puede ser clonado a través de JavaScript para permitir al usuario que escriba en más nombres y correos electrónicos, así que no saber de antemano cómo muchos serán enviados.

En el lado del servidor, veo $ _POST ['email'] y $ _POST ['nombre'] establecidos, pero me pregunto si puedo asumir con seguridad $ _POST ['email'] [0] corresponderá a $ _POST ['nombre'] [0], $ _POST ['email'] [1] corresponderá a $ _POST ['nombre'] [1], y así sucesivamente. Algunas pruebas básicas parecen indicar que sí, pero me pregunto si hay una garantía o si solo tengo suerte.

Respuesta

12

por qué no añadir una clave de agrupación como:

<td><input type='text' name='user[0][name]' /></td> 
<td><input type='text' name='user[0][email]' /></td> 
</tr> 
<tr> 
<td><input type='text' name='user[1][name]' /></td> 
<td><input type='text' name='user[1][email]' /></td> 

y luego manuall establezca los índices user Al clonar en base al número actual. De esta manera, todo ya está carbonizado.

1

Los datos aparecerán en el mismo orden que en el formulario. Así primera fila tiene tecla 0, segunda fila - 1.

+0

dice quién? Debo estar absolutamente seguro, si lo usaré en producción. –

+0

¿por qué no simplemente prueba la forma simple y el resultado de var_dump? Verás el resultado. el resultado será siempre el mismo que en el formulario HTML (por supuesto se puede cambiar de posición el visability de elementos que no tienen efect) –

+1

dice que la especificación HTML: "Los nombres de los controles/valores se enumeran en el orden en que aparecen en el documento " http://www.w3.org/TR/html401/interact/forms.html#form-content-type – webbiedave

0

Como dijo Vaidas Zilionis, los datos aparecerán exactamente en el mismo orden en que aparecen en el formulario, consulte del W3C HTML 4.01 Specification: aplicación

/x-www-form-urlencoded
[...] 2. los nombres de los controles/valores se enumeran en el orden en que aparecen en el documento.

multipart/form-data
[...] mensaje A "multipart/form-data" contiene una serie de partes, cada uno representando un control exitoso. Las piezas se envían al agente de procesamiento en el mismo orden en que aparecen los controles correspondientes en el flujo de documentos.

7

¿Cuál es el orden esperado de una matriz presentado en un formulario HTML?

De acuerdo con la especificación de HTML:

El control de nombres/valores se enumeran en el orden en que aparecen en el documento

http://www.w3.org/TR/html401/interact/forms.html#form-content-type

Sin embargo, es mejor codificación practique para emplear un enfoque de matriz indexada como se muestra en la respuesta de prodigitalson.

Cuestiones relacionadas