POST tablicę z formularza HTML bez javascript

90

Mam formularz, który jest trochę złożony i mam nadzieję uprościć przetwarzanie po stronie serwera (PHP) przez natywne POSTowanie tablicy krotek.

Pierwsza część formularza przedstawia Użytkownika :

  • Imię
  • Nazwisko
  • E-mail
  • Adres
  • itp

Druga część formularza przedstawia drzewo :

  • Owoc
  • Wysokość
  • itp

Problem polega na tym, że muszę mieć możliwość POST wielu drzew dla jednego użytkownika w tej samej formie. Chciałbym wysłać informacje jako pojedynczy użytkownik z tablicą drzew, ale może to być zbyt skomplikowane, aby zrobić to z formularzem. Jedyne, co przychodzi na myśl, to użycie javascript do utworzenia wiadomości JSON z obiektem User i tablicą obiektów Tree. Ale byłoby miło uniknąć javascript do obsługi większej liczby użytkowników (niektórzy ludzie mają wyłączone skrypty).

styfle
źródło
1
Czy tablica gwarantuje porządek? Chciałbym mieć tablicę obiektów Tree, która miałaby wiele pól, więc oznaczałoby to, że muszę używać wielu tablic do reprezentowania drzewa, a tablice muszą być uporządkowane, aby móc dowiedzieć się, które drzewo reprezentują.
styfle

Odpowiedzi:

154

sprawdź ten.

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

powinno to skończyć się tak w tablicy $ _POST [] (format PHP dla łatwej wizualizacji)

$_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'
        )
    )
)
Józefa
źródło
6
Jakie znaki są dozwolone w indeksowaniu tablic? Czy możemy użyć.: `@? Przykład: tree[tree 1][fr ui_t] tree[tree.1][fru:it] tree[tree@1][fru,it] czy _ tylko bezpieczny separator w nazewnictwie kluczy?
KR
4
będzie tree[][fruit]i tree[][height]nie jest ważne, aby automatycznie indeksu tablicy?
Wobbles,
Jak uzyskać te przesłane dane jako tablicę / obiekt w js do użycia w wywołaniu zwrotnym przesyłania ... Próbowałem new formData($("form")[0])i jQuery $("form").serializeArray()zarówno zwracając name="tree[tree1][fruit]"jako ciąg znaków ... pomoc
Santosh
Uwaga: nie działa z funkcjami jquery do zbierania danych formularza jako .serialize()lub.serializeArray()
SubjectDelta
65

Możesz także opublikować wiele danych wejściowych o tej samej nazwie i zapisać je w tablicy, dodając puste nawiasy kwadratowe do nazwy wejściowej w następujący sposób:

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

Jeśli używasz php:

print_r($_POST['comment']) 

otrzymasz to:

Array ( [0] => 'comment1' [1] => 'comment2' [2] => 'comment3' [3] => 'comment4' )
Dan
źródło