2011-06-13 31 views
38

Câu hỏi đơn giản: Có thể nhận tất cả dữ liệu được đăng lên một trang, ngay cả khi bạn không biết tất cả các trường?PHP: Có thể tự động nhận tất cả dữ liệu đã đăng không?

Ví dụ: tôi muốn viết một tập lệnh đơn giản thu thập bất kỳ dữ liệu đã đăng và gửi email nào. Tôi có thể thấy trước rằng các trường trong biểu mẫu có thể thay đổi rất nhiều theo thời gian, và vì vậy để tiết kiệm thời gian trong một thời gian dài, tôi đã tự hỏi liệu mình có thể viết thứ gì đó tự động thu thập mọi thứ không?

Có thể không?

+2

ofcourse chỉ sử dụng mảng toàn cục $ _POST, $ _GET, $ _Ser ..... –

+2

bản sao có thể có của [Cách lấy tất cả các biến trong bài đăng (PHP)] (http://stackoverflow.com/questions/ 3058336/how-to-grab-all-variables-in-a-post-php) – mario

Trả lời

73

Chắc chắn. Chỉ cần đi bộ qua các mảng $_POST:

foreach ($_POST as $key => $value) 
echo "Field ".htmlspecialchars($key)." is ".htmlspecialchars($value)."<br>"; 
+4

@Django Reinhardt Lưu ý rằng các hộp kiểm không được chọn không xuất hiện trong mảng '$ _POST' vì vậy nếu bạn sử dụng hộp kiểm, bạn sẽ cần phải xử lý chúng khác nhau bằng cách sử dụng 'isset' chẳng hạn. – jeroen

+0

nếu có một tập tin, nó sẽ đi kèm với nó – bhawin

2

Bạn có thể lấy tất cả các phím của mảng $ _POST sử dụng array_keys(), sau đó xây dựng một email với các giá trị của những chìa khóa.

var_dump($_POST) cũng sẽ đổ thông tin về tất cả thông tin trong $ _POST cho bạn.

1

Có bạn có thể sử dụng đơn giản

 $input_data = $_POST; 

hoặc extract() có thể hữu ích cho bạn.

+2

'trích xuất ($ _ POST)' sẽ bắt chước 'register_globals'. Đừng làm thế. – netcoder

+1

@netcoder; tôi chỉ đề nghị anh ta rằng nó có thể hữu ích; nó cũng là một lựa chọn. và u xin vui lòng cho tôi một ví dụ để làm cho ý kiến ​​ur có giá trị. – diEcho

2

Miễn là bạn không muốn bất kỳ định dạng đặc biệt nào: có.

foreach ($_POST as $key => $value) 
    $body .= $key . ' -> ' . $value . '<br>'; 

Rõ ràng, nhiều định dạng hơn sẽ là cần thiết, tuy nhiên đó là cách "dễ dàng". Trừ khi tôi hiểu lầm câu hỏi.

Bạn cũng có thể làm một cái gì đó như thế này (và nếu bạn thích định dạng, nó chắc chắn dễ dàng hơn):

$body = print_r($_POST, true); 
0

Bạn có thể sử dụng $_REQUEST cũng như $_POST để đạt được tất cả mọi thứ như bài viết, nhận và dữ liệu Cookie .

1

Để thêm vào những người khác, var_export có thể là tiện quá:

$email_text = var_export($_POST, true); 
28

Không ai đề cập Raw bài viết dữ liệu, nhưng đó là tốt để biết, nếu dữ liệu được đăng không có chìa khóa, nhưng chỉ có giá trị, sử dụng Raw Post Data:

$postdata = file_get_contents("php://input"); 

PHP Man:

php: // đầu vào là luồng chỉ đọc cho phép bạn đọc dữ liệu thô từ phần yêu cầu. Trong trường hợp yêu cầu POST, nó thích hợp hơn là để sử dụng đầu vào php: // thay vì $ HTTP_RAW_POST_DATA vì nó không phụ thuộc vào chỉ thị php.ini đặc biệt.Hơn nữa, đối với những trường hợp trong đó $ HTTP_RAW_POST_DATA không được điền theo mặc định, đó là khả năng thay thế thiếu bộ nhớ ít hơn để kích hoạt always_populate_raw_post_data. php: // đầu vào không có sẵn với enctype = "multipart/form-data". .

0
foreach ($_POST as $key => $value) 

echo "Dòng" .htmlspecialchars ($ key) "là" .htmlspecialchars ($ value) "
.";

+0

vui lòng giải thích và định dạng câu trả lời của bạn – Mazz

+0

vì vậy, sự khác biệt của câu trả lời được chấp nhận là gì http://stackoverflow.com/a/6334857/2359679? – hassan

Các vấn đề liên quan