Nhận tất cả các biến được gửi bằng POST?


85

Tôi cần chèn tất cả các biến được gửi cùng với bài đăng, chúng là các hộp kiểm mỗi biến đại diện cho một người dùng.

Nếu tôi sử dụng GET, tôi nhận được một cái gì đó như thế này:

?19=on&25=on&30=on

Tôi cần chèn các biến trong cơ sở dữ liệu.

Làm cách nào để nhận tất cả các biến được gửi bằng POST? Là một mảng hoặc các giá trị được phân tách bằng dấu phẩy hay gì đó?


Câu trả lời:


164

Biến $_POSTđược tự động điền.

Cố gắng var_dump($_POST);xem nội dung.

Bạn có thể truy cập các giá trị riêng lẻ như sau: echo $_POST["name"];

Tất nhiên, điều này giả định rằng biểu mẫu của bạn đang sử dụng mã hóa biểu mẫu điển hình (tức là enctype=”multipart/form-data”

Nếu dữ liệu bài đăng của bạn ở định dạng khác (ví dụ: JSON hoặc XML, bạn có thể làm như sau:

$post = file_get_contents('php://input');

$postsẽ chứa dữ liệu thô.

Giả sử bạn đang sử dụng $_POSTbiến chuẩn , bạn có thể kiểm tra xem hộp kiểm có được chọn như sau không:

if(isset($_POST['myCheckbox']) && $_POST['myCheckbox'] == 'Yes')
{
     ...
}

Nếu bạn có một mảng hộp kiểm (ví dụ:

<form action="myscript.php" method="post">
  <input type="checkbox" name="myCheckbox[]" value="A" />val1<br />
  <input type="checkbox" name="myCheckbox[]" value="B" />val2<br />
  <input type="checkbox" name="myCheckbox[]" value="C" />val3<br />
  <input type="checkbox" name="myCheckbox[]" value="D" />val4<br />
  <input type="checkbox" name="myCheckbox[]" value="E" />val5
  <input type="submit" name="Submit" value="Submit" />
</form>

Sử dụng [ ]trong tên hộp kiểm cho biết rằng các giá trị đã chọn sẽ được truy cập bởi tập lệnh PHP dưới dạng một mảng. Trong trường hợp $_POST['myCheckbox']này sẽ không trả về một chuỗi đơn lẻ nhưng sẽ trả về một mảng bao gồm tất cả các giá trị của các hộp kiểm đã được chọn.

Ví dụ, nếu tôi đã kiểm tra tất cả các hộp, $_POST['myCheckbox']sẽ là một mảng bao gồm: {A, B, C, D, E}. Dưới đây là một ví dụ về cách truy xuất mảng giá trị và hiển thị chúng:

  $myboxes = $_POST['myCheckbox'];
  if(empty($myboxes))
  {
    echo("You didn't select any boxes.");
  }
  else
  {
    $i = count($myboxes);
    echo("You selected $i box(es): <br>");
    for($j = 0; $j < $i; $j++)
    {
      echo $myboxes[$j] . "<br>";
    }
  }

2
Bạn có ý định thêm một ví dụ / liên kết vào cuối không?

1
Cảm ơn, tôi đã thực sự chỉ thử print_r ($ _ POST) và nó không hoạt động do sử dụng GET suốt một thời gian. Xấu của tôi
lisovaccaro

@ Liso22 đừng lo! Xảy ra với tất cả chúng ta :)
Mã Magician

5
$ post = file_get_contents ('php: // input'); đã tiết kiệm thời gian của tôi. Cảm ơn. Ôi trời, f ** ng php ...
Nedudi

1
Gratz với giá 100!
một

77

bạn sẽ có thể truy cập chúng từ $_POSTbiến:

foreach ($_POST as $param_name => $param_val) {
    echo "Param: $param_name; Value: $param_val<br />\n";
}

Bạn có ý định thêm một ví dụ / liên kết vào cuối không?

1
Để ý dấu hai chấm ở cuối câu trả lời.

Đây là câu trả lời cho những gì đã được hỏi.
lisandro

11

Nó không được chấp nhận và không muốn truy cập trực tiếp superglobals (vì tôi nghĩ là php 5.5?)

Mỗi IDE hiện đại sẽ cho bạn biết:

Không truy cập trực tiếp Superglobals. Sử dụng một số chức năng bộ lọc (ví dụ filter_input)

Đối với giải pháp của chúng tôi, để nhận được tất cả tham số yêu cầu, chúng tôi phải sử dụng phương thức filter_input_array

Để lấy tất cả các tham số từ một phương thức nhập, hãy sử dụng điều này:

$myGetArgs = filter_input_array(INPUT_GET);
$myPostArgs = filter_input_array(INPUT_POST);
$myServerArgs = filter_input_array(INPUT_SERVER);
$myCookieArgs = filter_input_array(INPUT_COOKIE);
...

Bây giờ bạn có thể sử dụng nó trong var_dumphoặc foreachLoops của bạn

Điều không hoạt động là truy cập Superglobal $ _REQUEST bằng phương pháp này. Nó luôn trả về NULLvà điều đó là chính xác.

Nếu bạn cần lấy tất cả các tham số Đầu vào, sử dụng các phương thức khác nhau, chỉ cần hợp nhất chúng như trong phương pháp sau:

function askForPostAndGetParams(){
    return array_merge ( 
        filter_input_array(INPUT_POST), 
        filter_input_array(INPUT_GET) 
    );
}

Chỉnh sửa: Phiên bản mở rộng của phương pháp này (cũng hoạt động khi một trong các phương thức yêu cầu không được đặt):

function askForRequestedArguments(){
    $getArray = ($tmp = filter_input_array(INPUT_GET)) ? $tmp : Array();
    $postArray = ($tmp = filter_input_array(INPUT_POST)) ? $tmp : Array();
    $allRequests = array_merge($getArray, $postArray);
    return $allRequests;
}

tôi gặp lỗi nghiêm trọng khi cố gắng sử dụng đề xuất của bạn "$ postArray = ($ tmp = filter_input_array (INPUT_POST))? $ tmp: Array ();". LỖI FATAL Biểu thức không đổi chứa các hoạt động không hợp lệ trên dòng số 5
luckyguy73 21/12/16

@AshtonMorgan Tôi đã thử nghiệm nó (sao chép dán) và nó hoạt động tốt. Bạn sử dụng phiên bản PHP nào?
mtizziani

8

Vì vậy, một cái gì đó giống như $_POSTmảng?

Bạn có thể sử dụng http_build_query($_POST)để lấy lại chúng trong một var=xxx&var2=yyychuỗi. Hoặc chỉ print_r($_POST)để xem những gì ở đó.


6

Tại sao không, điều này thật dễ dàng:

extract($_POST);

4
Ý tưởng khủng khiếp như hiện tại; lỗ hổng bảo mật khổng lồ.
không ai

2
Mã này trả lời câu hỏi của anh ấy một cách hoàn hảo "Làm cách nào để nhận được tất cả các biến được gửi bằng POST?", Trong khi các câu trả lời khác thì không. Và câu trả lời hay nhất được bỏ phiếu từ chối, hãy xem. Bảo mật có thể không phải là vấn đề đối với dự án của anh ấy. Bạn đang nói rằng những người tạo ra php đã mắc sai lầm khi phát minh ra chức năng này, rằng nó không bao giờ nên được sử dụng?
bubbahut 14/09/15

2
@bubbahut chính xác. Không ai muốn tất cả các biến đăng cho mã sản xuất.
cowboysaif

5

Sử dụng u này có thể nhận được tất cả các biến bài đăng

print_r($_POST)
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.