PUBLICAR una matriz desde un formulario HTML sin javascript

90

Tengo un formulario que es un poco complejo y espero simplificar el procesamiento del lado del servidor (PHP) publicando de forma nativa una matriz de tuplas.

La primera parte del formulario representa a un usuario :

  • Nombre de pila
  • Apellido
  • Correo electrónico
  • Habla a
  • etc

La segunda parte del formulario representa un árbol :

  • Fruta
  • Altura
  • etc

El problema es que necesito poder PUBLICAR varios árboles para un solo usuario en el mismo formulario. Me gustaría enviar la información como un solo usuario con una matriz de árboles, pero esto puede ser demasiado complejo para hacerlo con un formulario. Lo único que me viene a la mente es usar javascript para crear algún mensaje JSON con un objeto User y una matriz de objetos Tree. Pero sería bueno evitar javascript para admitir más usuarios (algunas personas tienen los scripts desactivados).

styfle
fuente
1
¿La matriz garantiza el orden? Me gustaría una matriz de objetos de árbol que tuviera múltiples campos, por lo que esto significaría que tengo que usar múltiples matrices para representar un árbol y las matrices deben ordenarse para poder averiguar qué árbol representan.
styfle

Respuestas:

154

mira este.

<input type="text" name="firstname">
<input type="text" name="lastname">
<input type="text" name="email">
<input type="text" name="address">

<input type="text" name="tree[tree1][fruit]">
<input type="text" name="tree[tree1][height]">

<input type="text" name="tree[tree2][fruit]">
<input type="text" name="tree[tree2][height]">

<input type="text" name="tree[tree3][fruit]">
<input type="text" name="tree[tree3][height]">

debería terminar así en la matriz $ _POST [] (formato PHP para una fácil visualización)

$_POST[] = array(
    'firstname'=>'value',
    'lastname'=>'value',
    'email'=>'value',
    'address'=>'value',
    'tree' => array(
        'tree1'=>array(
            'fruit'=>'value',
            'height'=>'value'
        ),
        'tree2'=>array(
            'fruit'=>'value',
            'height'=>'value'
        ),
        'tree3'=>array(
            'fruit'=>'value',
            'height'=>'value'
        )
    )
)
Joseph
fuente
6
¿Qué caracteres se permiten en la indexación de matrices? ¿Podemos usar,.: `@? Ejemplo: tree[tree 1][fr ui_t] tree[tree.1][fru:it] tree[tree@1][fru,it] ¿_ es solo un delimitador seguro en la denominación de claves?
CoR
4
¿Sería tree[][fruit]y tree[][height]no válido indexar automáticamente la matriz?
Wobbles
¿Cómo obtengo estos datos enviados como matriz / objeto en js para usar en el envío de devolución de llamada ... lo he intentado new formData($("form")[0])y jQuery $("form").serializeArray()regresan name="tree[tree1][fruit]"como cadena ... ayuda
santosh
Nota: no funciona con las funciones de jquery para recopilar datos de formularios como .serialize()o.serializeArray()
SubjectDelta
65

También puede publicar varias entradas con el mismo nombre y guardarlas en una matriz agregando corchetes vacíos al nombre de la entrada de esta manera:

<input type="text" name="comment[]" value="comment1"/>
<input type="text" name="comment[]" value="comment2"/>
<input type="text" name="comment[]" value="comment3"/>
<input type="text" name="comment[]" value="comment4"/>

Si usa php:

print_r($_POST['comment']) 

obtendrás esto:

Array ( [0] => 'comment1' [1] => 'comment2' [2] => 'comment3' [3] => 'comment4' )
Dan
fuente