2009-10-18 8 views
6

Bunu yapmanın daha zarif bir yolu olmalı.PHP - Tüm POST verilerini SESSION değişkenlerine dönüştürün

Her bir satır satır belirtmeden, boş olmayan tüm posta verilerini oturum değişkenlerine nasıl dönüştürebilirim? Temel olarak, POST dizisinde var olan tüm X örnekleri için aşağıdaki işlevi gerçekleştirmek istiyorum.

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

ben teker teker bunu yapacağım, ama sonra çok daha zarif bir çözüm

+2

, ne 0 tedavi altına iyiyim güvenlik – borrel

cevap

10

Ben kabul edilebilir POST ad sözlüğü belirtmek istiyorum orada olmalı dedim. Veya bu etkiyle ilgili bir şey. empty kullanmam çünkü 0 boş olarak davranır.

+0

için kullanmak istediğiniz önceden tanımlanmış listesini kullanmak boş olarak, aslında verilerimi temizlemeye yardımcı olur. Teşekkürler! –

+0

ihtiyaçlarınızı karşılayacak şekilde değiştirildi. –

+0

Dürüst olmak gerekirse, boş() kullanmayı hiç kullanmamalısınız - şimdi alışkanlığı tekmeleyeceksiniz, ve sadece bu değil, HER durumda çalışacak teknikler geliştireceksiniz. Her veri tipi için uygun işlevler vardır. Onları kullan! –

1

İlk önereceğim şey, bunu yapmamanızdır. Bu büyük bir potansiyel güvenlik deliği. Kullanıcı adı ve/veya usertype (çok yaygın) bir oturum değişkenine bel bağladığınızı varsayalım. Birisi bu detayların üzerine yazabilir. Sen $_POST den $_SESSION yani sadece onaylanmış kopyalamas değerlerle beyaz liste yaklaşımla edilmelidir: Eğer "boş" define nasıl

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

tür yapmanız kontrol belirler. Yukarıdaki kod isset() kullanır. Boş dizeleri veya 0. İşte

+0

Evet, işaretçi için teşekkürler. Yani, aslında, bunu tek tek yapmalıydım, ancak kodu düzenli tutmak için bir dizide beyaz listeye alabilirim. Bunu nasıl beyaz listede olsa bile, bir "boş değil()" sadece boş POST verileri oturum değişkenleri dönüştürülür sağlamak için, yukarıdaki koduna kontrol uygularız? Boş olarak kayıtlı "0" ile iyiyim. –

2

gitmek numarayı yazmak için istemiyorsanız Ayrıca braket hala açık var sırf

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

sözdizimi hatası vardır, if ($_POST[$v]) ... yapabilirdi.

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

Böyle çalışması gerekir. Eğer

kullanırsanız, boş veriyi keser.

1

Bu @ Meder en cevabın basitleştirilmiş bir versiyonudur bu bit, bana yol: olarak,

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

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

Ayrıca olsa yukarıda isset() için !empty() yerine ne kadar empty() öteye kapsamlı olduğu haberdar olabilir @meder işaret etti.

0

Ardından, $ var öğesini bir post değişkeni olarak kullanın. Örneğin:

echo $var["email"]; 

yerine bunu yapmak için akıllı bir şey değildir

echo $_POST["email"]; 

Alkış