POSTar uma matriz de um formulário HTML sem javascript

89

Eu tenho um formulário que é um pouco complexo e espero simplificar o processamento do lado do servidor (PHP) postando nativamente uma matriz de tuplas.

A primeira parte do formulário representa um usuário :

  • Primeiro nome
  • Último nome
  • O email
  • Endereço
  • etc

A segunda parte do formulário representa uma árvore :

  • Fruta
  • Altura
  • etc

O problema é que eu preciso ser capaz de POSTAR várias árvores para um único usuário no mesmo formulário. Eu gostaria de enviar as informações como um único usuário com uma matriz de árvores, mas isso pode ser muito complexo para fazer com um formulário. A única coisa que vem à mente é usar javascript para criar alguma mensagem JSON com um objeto User e um array de objetos Tree. Mas seria bom evitar o javascript para oferecer suporte a mais usuários (algumas pessoas têm os scripts desativados).

estilo
fonte
1
O array garante a ordem? Eu gostaria de um array de objetos Tree que teria vários campos, então isso significaria que eu tenho que usar vários arrays para representar uma Tree e os arrays devem ser ordenados para que eu possa descobrir qual Tree eles representam.
styfle

Respostas:

152

verifique 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]">

deve terminar assim no array $ _POST [] (formato PHP para fácil visualização)

$_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
fonte
6
Quais caracteres são permitidos na indexação de matriz? Podemos usar,.: `@? Exemplo: tree[tree 1][fr ui_t] tree[tree.1][fru:it] tree[tree@1][fru,it] _ é apenas um delimitador seguro na nomenclatura de chaves?
CR de
4
seria tree[][fruit]e tree[][height]não seria válido para indexar automaticamente a matriz?
Wobbles
Como faço para obter esses dados enviados como array / objeto em js para usar no retorno de chamada de envio ... eu tentei new formData($("form")[0])e jQuery $("form").serializeArray()ambos retornando name="tree[tree1][fruit]"como string .... help
santosh
Observação: não funciona com funções jquery para coletar dados de formulário como .serialize()ou.serializeArray()
SubjectDelta
60

Você também pode postar várias entradas com o mesmo nome e salvá-las em uma matriz adicionando colchetes vazios ao nome da entrada, como este:

<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"/>

Se você usa php:

print_r($_POST['comment']) 

você receberá isto:

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