2011-01-17 5 views
8

Comprendo le nozioni di base sull'uso dei nomi di input HTML formattati in serie. Se avessi un modulo con un numero variabile di ingressi 'voce' Potrei fare qualcosa di simile per ciascuno di essi:Come posso utilizzare i nomi dei campi di input in formato array nel mio modulo HTML che pubblica su PHP?

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

E quando recuperare gli elementi dalla matrice $ _POST ho potuto scorrere su di loro in questo modo :

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

Ma la mia domanda è leggermente più complicata. Ho un modulo in cui gli utenti possono fare clic su un pulsante "aggiungi uno" e una nuova riga verrà visualizzata nel numero inferiore del modulo. Ogni nuova riga contiene un input "name" e "description".

quindi inizialmente ho pensato di fare questo:

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

E poi iterare su di loro in questo modo:

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

Ma invece di lavorare come speravo, invece le strutture della 'voce' array in modo tale da accedere al nome del primo oggetto come $item['name'][0] anziché come $item[0]['name'].

Allora ho capovolto in modo che i miei ingressi sono stati nominati come tali:

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

Ma questo ha determinato un 'oggetto' separato per ogni 'nome' e per ogni 'Descrizione', piuttosto che il raggruppamento ogni coppia in un singolo 'oggetto'.

Non mi piace davvero avere matrici di "nome" e una serie separata di "descrizione". Preferirei matrici di 'item' con ogni array contenente un campo 'name' e 'description'. C'è un modo per farlo senza generare un indice nel mio javascript? Dal momento che le persone possono aggiungere e rimuovere questi dinamicamente è molto difficile per il mio javascript calcolare l'indice appropriato per l'elemento successivo. Non c'è modo di fare questo genericamente?

+0

Cosa c'è di male avere un array di 'name' e una matrice di' description'? - puoi rimetterli insieme dopo. –

+2

@ Mark E: Ho un disturbo ossessivo-compulsivo e questo mi fa davvero impazzire al punto in cui non riesco a muovermi intorno e procedere. Tutti i miei altri array (ad esempio dal database) sono indice delle righe come prima dimensione e nome della proprietà come seconda. – fumplr

+2

Beh, l'unico modo per superare il problema di denominazione è mettere i numeri nelle parentesi vuote, che sembra essere la peggiore delle scelte disponibili, non credi? –

risposta

8

Non è possibile fare quello che vuoi, ma se aiuta, ecco qualche codice di mettere di nuovo insieme che penso funzionerà (con item_name[] e 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

ha utilizzato il pulsante di formattazione sul tuo blocco di codice perché non è stato inviato correttamente con i tag 'pre'. spero non ti dispiaccia. – prodigitalson

+0

Grazie! Dovrei davvero leggere su come postare codice in quel modo ... –

+0

@prodigitalson ecco come i moderatori dovrebbero agire/comportarsi! Lo faccio notare agli altri per riconoscerlo! – whispers

Problemi correlati