2011-01-17 4 views
8

Ich verstehe die Grundlagen der Verwendung der Array-formatierten HTML-Eingabenamen. Wenn ich ein Formular mit einer variablen Anzahl von ‚item‘ Eingänge hatte ich könnte für jeden von ihnen so etwas tun:Wie kann ich die Array-Format-Eingabefeldnamen in meinem HTML-Formular verwenden, das nach PHP sendet?

<input name='item[]' type='text' /> 

Und wenn ich die Elemente aus dem Array $ _POST abrufen konnte ich über sie iterieren wie so :

$items = $_POST['item']; 
foreach($items as $item) { 
} 

Aber meine Frage ist etwas komplizierter. Ich habe ein Formular, in dem Benutzer auf den Button "Add One" klicken können und eine neue Zeile wird an der unteren Nummer des Formulars angezeigt. Jede neue Zeile enthält eine Eingabe 'Name' und 'Beschreibung'.

Also zunächst dachte ich, ich würde dies tun:

<input name='item[name][]' type='text' /> 
<input name='item[description][]' type='text' /> 

Und dann über sie iterieren wie so:

$items = $_POST['item']; 
foreach($items as $item) { 
    print $item['name'] . ' ' . $item['description']; 
} 

Aber anstatt zu arbeiten, wie ich gehofft, es stattdessen Strukturen des ‚item‘ Array so, dass ich auf den ersten Elementnamen als $item['name'][0] statt als $item[0]['name'] zugreifen würde.

Also dann drehte ich es so, dass meine Eingaben als solche benannt wurden:

<input name='item[][name]' type='text' /> 
<input name='item[][description]' type='text' /> 

Aber dies führte zu einem separaten ‚item‘ für jeden ‚name‘ und für jede ‚Beschreibung‘, anstatt jedes Paar Gruppierung in einem einzigen "Gegenstand".

Ich mag wirklich Arrays von "Name" und separate Array von "Beschreibung". Ich würde Arrays von 'item' bevorzugen, wobei jedes Array ein 'name' und ein 'description' Feld enthält. Gibt es eine Möglichkeit, dies zu erreichen, ohne einen Index in meinem Javascript zu generieren? Da Leute diese dynamisch hinzufügen und entfernen können, ist es für mein Javascript sehr schwierig, den passenden Index für das nächste Element zu berechnen. Gibt es keine Möglichkeit, dies generisch zu tun?

+0

Was so schlimm ist ein etwa mit Array von 'name' und ein Array von' description'? - Sie können sie später wieder zusammensetzen. –

+2

@Mark E: Ich habe eine Zwangsstörung, und das bringt mich wirklich zu dem Punkt, wo ich mich nicht herumhacken und fortfahren kann. Alle meine anderen Arrays (z. B. aus der Datenbank) sind der Zeilenindex als erste Dimension und der Eigenschaftsname als zweiter. – fumplr

+2

Nun, der einzige Weg, um Ihr Namensproblem zu überwinden, ist Zahlen in die leeren Klammern zu setzen, das scheint die schlechteste der verfügbaren Möglichkeiten zu sein, meinst du nicht? –

Antwort

8

Es ist nicht möglich, zu tun, was Sie wollen, aber wenn es hilft, hier einige Code es um Stück wieder zusammen, dass ich Arbeit denken (mit item_name[] und item_description[]):

$items_desc = $_POST["item_description"]; 
$items_name = $_POST["item_name"]; 
$items = array(); 
for ($i = 0; $i < count($items_name); $i++) 
{ 
    $items[] = array("name" => $items_name[$i], "description" => $items_desc[$i]); 
} 
+1

verwendet die Format-Taste auf Ihrem Code-Block, weil es nicht mit Ihren 'Pre'-Tags richtig durchgekommen ist. Ich hoffe, es macht Ihnen nichts aus. – prodigitalson

+0

Danke! Ich sollte wirklich lesen, wie man Code richtig so schreibt ... –

+0

@prodigitallson so sollten sich Moderatoren verhalten! Ich zeige es für andere zu erkennen! – whispers

Verwandte Themen