POST array dari bentuk HTML tanpa javascript

90

Saya memiliki formulir yang sedikit rumit dan saya berharap untuk menyederhanakan pemrosesan sisi server (PHP) dengan secara native mem-POST array tupel.

Bagian pertama dari formulir mewakili Pengguna :

  • Nama depan
  • Nama keluarga
  • Surel
  • Alamat
  • dll

Bagian kedua dari formulir mewakili Pohon :

  • Buah
  • Tinggi
  • dll

Masalahnya adalah saya harus bisa POST beberapa Pohon untuk satu Pengguna dalam bentuk yang sama. Saya ingin mengirim informasi sebagai Pengguna tunggal dengan larik Pohon tetapi ini mungkin terlalu rumit untuk dilakukan dengan formulir. Satu-satunya hal yang terlintas dalam pikiran adalah menggunakan javascript untuk membuat beberapa pesan JSON dengan objek User dan array objek Tree. Tetapi alangkah baiknya menghindari javascript untuk mendukung lebih banyak pengguna (beberapa orang menonaktifkan skrip).

styfle
sumber
1
Apakah susunan menjamin ketertiban? Saya ingin sebuah array dari objek Tree yang memiliki banyak field, jadi ini berarti saya harus menggunakan beberapa array untuk merepresentasikan sebuah Tree dan array tersebut harus diurutkan sehingga saya dapat mengetahui Tree mana yang mereka wakili.
styfle

Jawaban:

154

lihat yang ini.

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

itu harus berakhir seperti ini dalam array $ _POST [] (format PHP untuk visualisasi yang mudah)

$_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
sumber
6
Karakter apa yang diperbolehkan dalam pengindeksan array? Bisakah kita menggunakan,.: `@? Contoh: tree[tree 1][fr ui_t] tree[tree.1][fru:it] tree[tree@1][fru,it] Apakah _ hanya pembatas aman dalam penamaan kunci?
CoR
4
akan tree[][fruit]dan tree[][height]tidak valid untuk mengindeks array secara otomatis?
Goyah
Bagaimana cara mendapatkan data yang dikirimkan ini sebagai array / objek di js untuk digunakan dalam mengirimkan panggilan balik ... saya telah mencoba new formData($("form")[0])dan jQuery $("form").serializeArray()keduanya kembali name="tree[tree1][fruit]"sebagai string .... help
santosh
Catatan: tidak bekerja dengan fungsi jquery untuk mengumpulkan data formulir sebagai .serialize()atau.serializeArray()
SubjectDelta
65

Anda juga dapat memposting banyak input dengan nama yang sama dan menyimpannya ke dalam array dengan menambahkan tanda kurung siku kosong ke nama input seperti ini:

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

Jika Anda menggunakan php:

print_r($_POST['comment']) 

Anda akan mendapatkan ini:

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