ĐĂNG một mảng từ một biểu mẫu HTML không có javascript


90

Tôi có một biểu mẫu hơi phức tạp và tôi hy vọng sẽ đơn giản hóa việc xử lý phía máy chủ (PHP) bằng cách ĐĂNG nguyên một mảng các bộ giá trị.

Phần đầu tiên của biểu mẫu đại diện cho Người dùng :

  • Tên đầu tiên
  • Họ
  • E-mail
  • Địa chỉ
  • Vân vân

Phần thứ hai của biểu mẫu đại diện cho một Cây :

  • Trái cây
  • Chiều cao
  • Vân vân

Vấn đề là tôi cần có thể ĐĂNG nhiều Cây cho một Người dùng duy nhất trong cùng một biểu mẫu. Tôi muốn gửi thông tin với tư cách là một Người dùng duy nhất với một mảng Cây nhưng điều này có thể quá phức tạp để thực hiện với một biểu mẫu. Điều duy nhất nghĩ đến là sử dụng javascript để tạo một số thông báo JSON với đối tượng Người dùng và một mảng các đối tượng Cây. Nhưng sẽ rất tốt nếu bạn nên tránh sử dụng javascript để hỗ trợ nhiều người dùng hơn (một số người đã tắt tập lệnh).


1
Mảng có đảm bảo thứ tự không? Tôi muốn một mảng các đối tượng Cây sẽ có nhiều trường, vì vậy điều này có nghĩa là tôi phải sử dụng nhiều mảng để biểu diễn một Cây và các mảng phải được sắp xếp theo thứ tự để tôi có thể tìm ra Cây nào chúng đại diện.
súng trường vào

Câu trả lời:


153

kiểm tra cái này.

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

nó sẽ kết thúc như thế này trong mảng $ _POST [] (định dạng PHP để dễ hình dung)

$_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'
        )
    )
)

6
Những ký tự nào được phép trong lập chỉ mục mảng? Chúng ta có thể sử dụng,.: `@? Ví dụ: tree[tree 1][fr ui_t] tree[tree.1][fru:it] tree[tree@1][fru,it] _ có phải chỉ dấu phân cách an toàn trong đặt tên khóa không?
CoR

4
sẽ tree[][fruit]tree[][height]không hợp lệ để tự động lập chỉ mục mảng?
Wobbles

Làm cách nào để lấy dữ liệu đã gửi này dưới dạng mảng / đối tượng trong js để sử dụng trong gửi gọi lại ... tôi đã thử new formData($("form")[0])và jQuery $("form").serializeArray()đều trả về name="tree[tree1][fruit]"dưới dạng chuỗi .... trợ giúp
santosh

Lưu ý: nó không hoạt động với các hàm jquery để thu thập dữ liệu biểu mẫu dưới dạng .serialize()hoặc.serializeArray()
SubjectDelta

64

Bạn cũng có thể đăng nhiều đầu vào có cùng tên và lưu chúng vào một mảng bằng cách thêm dấu ngoặc vuông trống vào tên đầu vào như sau:

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

Nếu bạn sử dụng php:

print_r($_POST['comment']) 

bạn sẽ nhận được điều này:

Array ( [0] => 'comment1' [1] => 'comment2' [2] => 'comment3' [3] => 'comment4' )
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.