POST ein Array aus einem HTML-Formular ohne Javascript

89

Ich habe ein etwas komplexes Formular und hoffe, die serverseitige (PHP) Verarbeitung zu vereinfachen, indem ich ein Array von Tupeln nativ POSTE.

Der erste Teil des Formulars repräsentiert einen Benutzer :

  • Vorname
  • Nachname
  • Email
  • Adresse
  • etc

Der zweite Teil des Formulars stellt einen Baum dar :

  • Obst
  • Höhe
  • etc

Das Problem ist, dass ich in der Lage sein muss, mehrere Bäume für einen einzelnen Benutzer in derselben Form zu POSTEN . Ich möchte die Informationen als einzelner Benutzer mit einer Reihe von Bäumen senden , dies ist jedoch möglicherweise zu komplex, um mit einem Formular zu tun zu haben. Das einzige, was mir in den Sinn kommt, ist die Verwendung von Javascript, um eine JSON-Nachricht mit einem Benutzerobjekt und einem Array von Baumobjekten zu erstellen. Es wäre jedoch schön, Javascript zu vermeiden, um mehr Benutzer zu unterstützen (einige Leute haben Skripte deaktiviert).

styfle
quelle
1
Garantiert das Array die Bestellung? Ich möchte ein Array von Baumobjekten mit mehreren Feldern. Dies bedeutet, dass ich mehrere Arrays verwenden muss, um einen Baum darzustellen. Die Arrays müssen geordnet werden, damit ich herausfinden kann, welchen Baum sie darstellen.
Styfle

Antworten:

151

Schau dir das an.

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

es sollte so im Array $ _POST [] enden (PHP-Format für einfache Visualisierung)

$_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
quelle
6
Welche Zeichen sind bei der Array-Indizierung zulässig? Können wir verwenden, .: `@? Beispiel: tree[tree 1][fr ui_t] tree[tree.1][fru:it] tree[tree@1][fru,it] Ist _ nur ein sicheres Trennzeichen bei der Schlüsselbenennung?
AdR
4
wäre tree[][fruit]und tree[][height]nicht gültig, um das Array automatisch zu indizieren?
Wobbles
Wie bekomme ich diese übermittelten Daten als Array / Objekt in js, um sie für den Rückruf zu verwenden? Ich habe versucht, new formData($("form")[0])und jQuery $("form").serializeArray()kehrt beide name="tree[tree1][fruit]"als Zeichenfolge zurück. Help
Santosh
Hinweis: Es funktioniert nicht mit jquery-Funktionen, um Formulardaten als .serialize()oder zu erfassen.serializeArray()
SubjectDelta
60

Sie können auch mehrere Eingaben mit demselben Namen veröffentlichen und in einem Array speichern, indem Sie dem Eingabenamen wie folgt leere eckige Klammern hinzufügen:

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

Wenn Sie PHP verwenden:

print_r($_POST['comment']) 

Sie werden dies bekommen:

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