2009-10-18 16 views
6

Ci deve essere un modo molto più elegante per farlo.PHP - Converti tutti i dati POST in variabili SESSION

Come si convertono tutti i dati dei post non vuoti in variabili di sessione, senza specificare una riga per riga? Fondamentalmente, voglio eseguire la funzione seguente per tutte le istanze di X che esistono nell'array POST.

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

stavo per farlo uno per uno, ma poi ho pensato che ci deve essere una soluzione molto più elegante

+2

questa non è una cosa intelligente da fare, utilizzare un elenco predefinito che si desidera utilizzare per la sicurezza – borrel

risposta

10

Vorrei specificare un dizionario dei nomi POST che sono accettabili.

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

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

O qualcosa del genere. Non userei empty perché tratta lo 0 come vuoto.

+0

mi trovo benissimo con 0 in trattamento come vuoto, infatti, sarebbe utile per ripulire i miei dati. Grazie! –

+0

modificato per soddisfare le tue esigenze allora. –

+0

Per essere onesti, dovresti evitare di usare empty() a tutti: eliminare l'abitudine ora e svilupperai tecniche che funzioneranno in OGNI situazione, non solo in questa. Ci sono funzioni appropriate per ogni tipo di dati. Usali! –

1

Beh, la prima cosa che suggerirei è che tu sia non fare fai questo. È un enorme potenziale buco di sicurezza. Supponiamo che tu faccia affidamento su una variabile di sessione di username e/o usertype (molto comune). Qualcuno può semplicemente postare quei dettagli. Si dovrebbe prendere un approccio lista bianca da solo i valori copiatura approvati $_POST-$_SESSION cioè:

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

Come si definisce "vuoto" determina il tipo di controllare che fate. Il codice sopra riportato utilizza isset(). Si potrebbe anche fare if ($_POST[$v]) ... se non si desidera scrivere stringhe vuote o il numero 0.

+0

Sì, grazie per il puntatore. Quindi dovrei, in effetti, farlo uno per uno, ma posso autorizzarlo in un array per mantenere il codice in ordine. Come implementare un controllo "non vuoto()" nel codice qui sopra, per garantire che solo i dati POST non vuoti vengano convertiti in variabili di sessione, anche se è nella whitelist? Sto bene con "0" registrato come vuoto. –

2

Qui si va,

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

L'errore di sintassi, è solo perché c'è una staffa ancora aperto. dovrebbe essere

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

Dovrebbe funzionare così. Se si utilizza

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

elimina i dati vuoti.

1

Questo mi ha portato a questo bit, che è una versione semplificata di risposta di @ Meder:

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

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

Si potrebbe anche sostituire !empty() per isset() sopra, anche se essere consapevoli di quanto incisiva empty() è, come @meder ha sottolineato.

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

Quindi utilizzare $ var come variabile post. Per esempio:

echo $var["email"]; 

invece di

echo $_POST["email"]; 

Acclamazioni