2012-04-03 4 views
13

Trong chuỗi tham số GET hoặc yêu cầu POST "x-www-form-urlencoded", có thể chỉ định một mảng tham số bằng cách đặt tên cho chúng bằng dấu ngoặc vuông (ví dụ: "name []").Tôi làm cách nào để POST một mảng với mã hóa đa dạng/biểu mẫu dữ liệu?

Có cách nào "đúng" (hoặc ít nhất là một quy ước rộng) để chỉ định một mảng thông số với yêu cầu POST "nhiều phần/biểu mẫu dữ liệu" không?

Điều sau đây có đúng không?

Content-Type: multipart/form-data; boundary=--abc 

--abc 
Content-Disposition: form-data; name="name[]" 

first index 
--abc 
Content-Disposition: form-data; name="name[]" 

second index 

Nếu nó thay đổi theo nền tảng, tôi quan tâm đến quy ước cho Apache/PHP.

Trả lời

15

Nếu bạn muốn một mảng liên quan đến bạn có thể vượt qua chỉ số trong tên của một trường mẫu:

Content-Type: multipart/form-data; boundary=--abc 

--abc 
Content-Disposition: form-data; name="name[first]" 

first value 
--abc 
Content-Disposition: form-data; name="name[second]" 

second value 

Sau đó, trên php print_r cấp ($ _ POST) sẽ cung cấp cho bạn

Array ([name] => Array ([first] => 'first value', [second] => 'second value'))

Nếu bạn chỉ sau một mảng đặt hàng bình thường thì giống như bạn đã làm:

Content-Type: multipart/form-data; boundary=--abc 

--abc 
Content-Disposition: form-data; name="name[]" 

first index 
--abc 
Content-Disposition: form-data; name="name[]" 

second index 

Sau đó, trên mức php print_r ($ _ POST) sẽ cung cấp cho bạn

Array ([name] => Array ([0] => 'first index', [1] => 'second index'))

Params với [] trong tên của họ dịch thành mảng trên phía máy chủ là một tính năng đặc trưng cho PHP (http://www.php.net/manual/en/faq.html.php#faq.html.arrays).

Đối với mã hóa nhiều phần, bạn có thể tìm thấy nhiều hơn trong RFC: http://www.ietf.org/rfc/rfc1867.txt

+1

Cảm ơn Alexei. Bạn có tham chiếu đến bất kỳ thông số hoặc tài liệu nào xác định điều này không? Cụ thể liên quan đến một POST nhiều so với một url được mã hóa chuẩn? – DougW

+1

Tôi đã thêm một vài liên kết vào câu trả lời –

+0

Tôi chắc chắn đang rất khó tìm ở đây, nhưng tôi muốn chỉ ra rằng các tài liệu PHP chỉ đề cập đến quy ước này liên quan đến các biểu mẫu web luôn POST qua x-www- form-urlencoded. Tôi * đoán * rằng theo thời gian các biến POST được chuyển từ Apache sang PHP mà không có sự phân biệt giữa các loại nội dung, nhưng tôi chưa thực sự đọc bất cứ điều gì xác nhận điều đó. Và chắc chắn có rất nhiều giả định dường như an toàn về PHP mà hóa ra là không chính xác một cách thảm khốc. Tôi sẽ đảm bảo rằng tôi xác minh điều này. – DougW