2009-10-18 10 views
6

Có một cách làm thanh lịch hơn rất nhiều.PHP - Chuyển đổi tất cả dữ liệu POST thành các biến SESSION

Làm cách nào để chuyển đổi tất cả dữ liệu bài đăng không trống sang biến phiên, mà không chỉ định từng dòng một? Về cơ bản, tôi muốn thực hiện chức năng dưới đây cho tất cả các trường hợp X tồn tại trong mảng POST.

if (!empty($_POST['X'])) $_SESSION['X']=$_POST['X']; 

tôi sẽ làm điều đó từng người một, nhưng sau đó tôi đã tìm có phải là một giải pháp nhiều thanh lịch hơn

+2

đây không phải là một điều thông minh để làm, sử dụng một danh sách định sẵn bạn muốn sử dụng cho an ninh – borrel

Trả lời

10

tôi sẽ chỉ định một từ điển của tên POST có thể chấp nhận.

$accepted = array('foo', 'bar', 'baz'); 

foreach ($_POST as $foo=>$bar) { 
    if (in_array($foo, $accepted) && !empty($bar)) { 
     $_SESSION[$foo] = $bar; 
    } 
} 

Hoặc điều gì đó có hiệu lực. Tôi sẽ không sử dụng empty vì nó xử lý 0 làm trống.

+0

Tôi tốt với 0 đang được điều trị trống rỗng, trên thực tế nó sẽ giúp dọn sạch dữ liệu của tôi. Cảm ơn! –

+0

được sửa đổi để phù hợp với nhu cầu của bạn sau đó. –

+0

Thành thật mà nói, bạn nên tránh sử dụng rỗng() ở tất cả - đá thói quen bây giờ, và bạn sẽ phát triển các kỹ thuật mà sẽ làm việc trong mọi tình huống, không chỉ này. Có các chức năng thích hợp cho mọi loại dữ liệu. Sử dụng chúng! –

1

Điều đầu tiên tôi đề nghị là bạn không làm điều này. Đó là một lỗ hổng bảo mật tiềm năng rất lớn. Giả sử bạn dựa vào biến phiên của tên người dùng và/hoặc loại người dùng (rất phổ biến). Ai đó chỉ có thể đăng các chi tiết đó. Bạn nên dùng một cách tiếp cận danh sách trắng bởi các giá trị chỉ sao chép phê duyệt $_POST-$_SESSION ví dụ:

$vars = array('name', 'age', 'location'); 
foreach ($vars as $v) { 
    if (isset($_POST[$v]) { 
    $_SESSION[$v] = $_POST[$v]; 
    } 
} 

Làm thế nào bạn định nghĩa "trống rỗng" xác định những loại kiểm tra bạn làm. Đoạn mã trên sử dụng isset(). Bạn cũng có thể làm if ($_POST[$v]) ... nếu bạn không muốn viết chuỗi rỗng hoặc số 0.

+0

Có, cảm ơn con trỏ. Vì vậy, tôi sẽ phải, trong thực tế, làm điều đó từng người một, nhưng tôi có thể đưa vào danh sách trắng trong một mảng để giữ mã gọn gàng. Làm cách nào để triển khai kiểm tra "không trống()" vào mã của bạn ở trên, để đảm bảo rằng chỉ dữ liệu POST không trống được chuyển đổi thành biến phiên, ngay cả khi nó nằm trong danh sách trắng? Tôi ổn với "0" được đăng ký là trống. –

2

Ở đây bạn đi,

if(isset($_POST) { 
foreach ($_POST as $key => $val) { 
    if($val != "Submit") 
    $_SESSION["$key"] = $val; 
} 
} 
3

Các lỗi cú pháp, chỉ là bởi vì có một khung vẫn còn mở. phải là

$vars = array('name', 'age', 'location'); 
foreach ($vars as $v) { 
    if (isset($_POST[$v])) { 
     $_SESSION[$v] = $_POST[$v]; 
    } 
} 

Nó sẽ hoạt động như thế. Nếu bạn sử dụng

if ($_POST[$v])... 

nó sẽ xóa dữ liệu trống.

1

này đưa tôi đến với bit này, mà là một phiên bản đơn giản của câu trả lời @ Meder của:

<?php 
$accepted = array('foo', 'bar', 'baz'); 

foreach ($accepted as $name) { 
    if (isset($_POST[$name])) { 
     $_SESSION[$name] = $_POST[$name]; 
    } 
} 

Bạn cũng có thể thay thế !empty() cho isset() ở trên, mặc dù nhận thức được bao nhiêu xa rộng empty() là, như @meder chỉ ra.

0
$_SESSION["data"] = $POST; 
    $var = $_SESSION["data"]; 

Sau đó, chỉ cần sử dụng $ var làm biến bài đăng. Ví dụ:

echo $var["email"]; 

thay vì

echo $_POST["email"]; 

Cheers