2011-11-21 38 views
45

Tôi cần phải 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 tra từng biến thể hiện một người dùng.Nhận tất cả các biến được gửi bằng POST?

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 phải 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 giá trị được phân tách bằng dấu phẩy hoặc gì đó?

+2

có thể trùng lặp 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

87

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

Hãy thử var_dump($_POST); để xem nội dung.

Bạn có thể truy cập vào các giá trị cá nhân như thế này: echo $_POST["name"];

này, tất nhiên, giả định hình thức của bạn đang sử dụng mã hóa hình thức điển hình (ví dụ enctype=”multipart/form-data”

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

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

$post sẽ chứa các dữ liệu thô

.

Giả sử bạn đang sử dụng $_POST biến tiêu chuẩn, bạn có thể kiểm tra nếu chọn hộp kiểm như thế này:

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

Nếu bạn có một loạt các 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 giá trị được chọn sẽ được truy cập bởi tập lệnh PHP dưới dạng mảng. Trong trường hợp này, $_POST['myCheckbox'] sẽ không trả lại một chuỗi nào 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 đã chọn 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à 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): "); 
    for($j = 0; $j < $i; $j++) 
    { 
     echo($myboxes[$i] . " "); 
    } 
    } 
+2

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

+1

Cảm ơn, tôi đã thực sự cố gắng chỉ để print_r ($ _ POST) và nó đã không làm việc do đang sử dụng GET tất cả các thời gian. My xấu – lisovaccaro

+0

@ Liso22 không phải lo lắng! Xảy ra cho tất cả chúng ta :) –

6

Vì vậy, giống như mảng $_POST?

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

56

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

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

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

+0

vâng, bạn biết điều đó như thế nào? –

+1

Nhận thấy dấu hai chấm ở cuối câu trả lời. –

3

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

extract($_POST); 
+2

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

+0

Mã này trả lời câu hỏi của mình một cách hoàn hảo "Làm cách nào để nhận 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 giảm xuống, hãy tìm hình. Bảo mật có thể không phải là vấn đề đối với dự án của anh ta. Bạn có nói rằng những người làm cho php mắc sai lầm bằng cách phát minh ra chức năng này, rằng nó không bao giờ nên được sử dụng? – bubbahut

+0

@bubbahut chính xác. Không ai muốn tất cả các biến bài viết cho mã sản xuất. – cowboysaif

2

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

print_r($_POST) 
4

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

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

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

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

Để có được tất cả các params từ một phương pháp đầu vào sử dụng 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_dump hoặc bạn foreach -Loops

gì không làm việc là để truy cập $ _REQUEST Siêu toàn cầu với phương pháp này. Nó Allways trả về NULL và đó là chính xác.

Nếu bạn cần để có được tất cả các params Input, đến qua các phương pháp khác nhau, chỉ cần kết hợp chúng như thế nào trong các phương pháp sau đây:

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

Edit: mở rộng bản của phương pháp này (chỉ hoạt động cũng có khi một trong những phương pháp theo 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; 
} 
+0

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();". Hàm ERROR Biểu thức hằng số chứa các hoạt động không hợp lệ trên số dòng 5 –

+0

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

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