POST un array da un modulo HTML senza javascript


90

Ho un modulo un po 'complesso e spero di semplificare l'elaborazione lato server (PHP) inserendo in modo nativo un array di tuple.

La prima parte del modulo rappresenta un Utente :

  • Nome di battesimo
  • Cognome
  • E-mail
  • Indirizzo
  • eccetera

La seconda parte del modulo rappresenta un albero :

  • Frutta
  • Altezza
  • eccetera

Il problema è che devo essere in grado di POST più alberi per un singolo utente nella stessa forma. Vorrei inviare le informazioni come un singolo utente con un array di alberi, ma questo potrebbe essere troppo complesso da fare con un modulo. L'unica cosa che mi viene in mente è usare javascript per creare un messaggio JSON con un oggetto User e un array di oggetti Tree. Ma sarebbe bello evitare javascript per supportare più utenti (alcune persone hanno gli script disattivati).


1
L'array garantisce l'ordine? Vorrei un array di oggetti Tree con più campi, quindi questo significherebbe che devo utilizzare più array per rappresentare un albero e gli array devono essere ordinati in modo da poter capire quale albero rappresentano.
stile

Risposte:


154

controlla questo.

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

dovrebbe finire così nell'array $ _POST [] (formato PHP per una facile visualizzazione)

$_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'
        )
    )
)

6
Quali caratteri sono consentiti nell'indicizzazione degli array? Possiamo usare,.: `@? Esempio: tree[tree 1][fr ui_t] tree[tree.1][fru:it] tree[tree@1][fru,it] _ è solo un delimitatore sicuro nella denominazione delle chiavi?
CdR

4
sarebbe tree[][fruit]e tree[][height]non sarebbe valido per indicizzare automaticamente l'array?
Wobbles

Come ottengo questi dati inviati come array / oggetto in js da utilizzare in submit callback ... ho provato new formData($("form")[0])e jQuery $("form").serializeArray()restituisce entrambi name="tree[tree1][fruit]"come stringa .... aiuto
santosh

Nota: non funziona con le funzioni jquery per raccogliere i dati del modulo come .serialize()o.serializeArray()
SubjectDelta

65

Puoi anche pubblicare più input con lo stesso nome e salvarli in un array aggiungendo parentesi quadre vuote al nome dell'input in questo modo:

<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 usi php:

print_r($_POST['comment']) 

otterrai questo:

Array ( [0] => 'comment1' [1] => 'comment2' [2] => 'comment3' [3] => 'comment4' )
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.