2011-01-17 10 views
8

Rozumiem podstawy korzystania z nazw wejściowych HTML w formacie tablicowym. Gdybym miał formę ze zmienną liczbą wejść „pozycji” mogę zrobić coś takiego dla każdego z nich:Jak mogę używać nazw pól wejściowych formatu tablicy w formularzu HTML, które wysyłają do PHP?

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

I kiedy pobierać elementy z tablicy $ _POST mogę iteracyjne nad nimi jak tak :

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

Ale moje pytanie jest nieco bardziej skomplikowane. Mam formularz, w którym użytkownicy mogą kliknąć przycisk "dodaj jeden", a nowy wiersz pojawi się na dole formularza. Każdy nowy wiersz zawiera dane wejściowe "nazwa" i "opis".

Więc początkowo myślałem, że chciałbym to zrobić:

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

A następnie iteracyjne nad nimi tak:

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

Ale zamiast pracować jak miałem nadzieję, zamiast tego Struktury „item” tablica taka, że ​​uzyskuję dostęp do nazwy pierwszego elementu jako $item['name'][0], a nie jako $item[0]['name'].

Więc potem przerzucił go tak, że moje wejścia zostały nazwane jako takie:

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

Ale to spowodowało w oddzielnym „elementu” dla każdego „name” i dla każdego „opis”, zamiast grupowania każdą parę w jednym "przedmiocie".

Naprawdę nie podoba mi się posiadanie tablic "nazwa" i oddzielnego zestawu "opisu". Wolałbym tablice "elementu" z każdą tablicą zawierającą pole "nazwa" i "opis". Czy jest jakiś sposób, aby to osiągnąć bez generowania indeksu w moim javascript? Ponieważ ludzie mogą je dodawać i usuwać dynamicznie, bardzo trudno jest javascriptowi obliczyć odpowiedni indeks dla następnego elementu. Czy nie ma sposobu, aby zrobić to ogólnie?

+0

Co jest tak źle o posiadaniu tablica "nazwa" i tablica "opisu"? - możesz je później złożyć razem. –

+2

@ Mark E: Mam zaburzenie obsesyjno-kompulsywne i to naprawdę, naprawdę doprowadza mnie do punktu, w którym nie jestem w stanie po prostu zhakować się wokół niego i kontynuować. Wszystkie moje inne tablice (na przykład z bazy danych) to indeks wiersza jako pierwszy wymiar, a nazwa właściwości jako drugi. – fumplr

+2

Cóż, jedynym sposobem na przezwyciężenie problemu z nazywaniem jest umieszczenie liczb w pustych nawiasach, co wydaje się najgorszym z możliwych wyborów, nie sądzisz? –

Odpowiedz

8

To nie jest możliwe, aby robić to, co chcesz, ale czy to pomaga, tu jest jakiś kod, aby go poskładać do kupy, że myślę, że będzie działać (z item_name[] i 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

użył przycisku formatowania w twoim bloku kodu, ponieważ nie był on poprawnie przechwytywany przez tagi 'pre'. mam nadzieję, że nie masz nic przeciwko. – prodigitalson

+0

Dzięki! Naprawdę powinienem przeczytać, jak poprawnie opublikować kod ... –

+0

@prodigitalson tak powinni postępować/zachowywać się moderatorzy! Wskazuję to, aby inni mogli je rozpoznać! – whispers

Powiązane problemy