POST un tableau à partir d'un formulaire HTML sans javascript

90

J'ai un formulaire un peu complexe et j'espère simplifier le traitement côté serveur (PHP) en POSTANT nativement un tableau de tuples.

La première partie du formulaire représente un utilisateur :

  • Prénom
  • Nom de famille
  • Email
  • Adresse
  • etc

La deuxième partie du formulaire représente un arbre :

  • Fruit
  • la taille
  • etc

Le problème est que je dois être capable de POSTER plusieurs arbres pour un seul utilisateur sous la même forme. Je voudrais envoyer les informations en tant qu'utilisateur unique avec un tableau d' arbres, mais cela peut être trop complexe à faire avec un formulaire. La seule chose qui me vient à l'esprit est l'utilisation de javascript pour créer un message JSON avec un objet User et un tableau d'objets Tree. Mais ce serait bien d'éviter le javascript pour prendre en charge plus d'utilisateurs (certaines personnes ont des scripts désactivés).

styfle
la source
1
Le tableau garantit-il l'ordre? Je voudrais un tableau d'objets Tree qui auraient plusieurs champs, donc cela signifierait que je devrais utiliser plusieurs tableaux pour représenter un arbre et que les tableaux doivent être ordonnés afin que je puisse déterminer quel arbre ils représentent.
styfle

Réponses:

154

Vérifiez celui-ci.

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

il devrait finir comme ça dans le tableau $ _POST [] (format PHP pour une visualisation facile)

$_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
la source
6
Quels caractères sont autorisés dans l'indexation de tableau? Pouvons-nous utiliser,.: `@? Exemple: tree[tree 1][fr ui_t] tree[tree.1][fru:it] tree[tree@1][fru,it] _ est-il seulement un délimiteur sûr dans la dénomination des clés?
CoR
4
serait tree[][fruit]et tree[][height]ne serait pas valide pour indexer automatiquement le tableau?
Wobbles le
Comment puis-je obtenir ces données soumises en tant que tableau / objet dans js à utiliser dans le rappel de soumission ... J'ai essayé new formData($("form")[0])et jQuery $("form").serializeArray()retournant tous les deux name="tree[tree1][fruit]"sous forme de chaîne .... Aide
Santosh
Remarque: cela ne fonctionne pas avec les fonctions jquery pour collecter des données de formulaire en tant que .serialize()ou.serializeArray()
SubjectDelta
65

Vous pouvez également publier plusieurs entrées avec le même nom et les enregistrer dans un tableau en ajoutant des crochets vides au nom de l'entrée comme ceci:

<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 vous utilisez php:

print_r($_POST['comment']) 

vous obtiendrez ceci:

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