2009-10-18 17 views
6

Tiene que haber una forma mucho más elegante de hacerlo.PHP - Convierta todos los datos POST en variables de SESIÓN

¿Cómo convierto todos los datos de entrada no vacíos en variables de sesión, sin especificar cada línea por línea? Básicamente, quiero realizar la función a continuación para todas las instancias de X que existen en la matriz POST.

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

que iba a hacerlo de uno en uno, pero entonces me imaginé que debe haber una solución mucho más elegante

+2

esto no es una cosa elegante a hacer, usar una lista predefinida que desee utilizar para la seguridad – borrel

Respuesta

10

Me especificar un diccionario de nombres POST que son aceptables.

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

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

O algo por el estilo. No usaría empty porque trata 0 como vacío.

+0

estoy bien con 0 siendo tratados como vacío, de hecho, ayudaría a limpiar mis datos. ¡Gracias! –

+0

modificado para satisfacer sus necesidades a continuación. –

+0

Para ser honesto, debes evitar el uso de empty() en absoluto: deja el hábito ahora, y desarrollarás técnicas que funcionarán en CADA situación, no solo en esta. Hay funciones apropiadas para cada tipo de datos. ¡Usalos, usalos a ellos! –

1

Bueno, lo primero que sugeriría es que no haga esto. Es un gran agujero de seguridad potencial. Digamos que confía en una variable de sesión de nombre de usuario y/o tipo de usuario (muy común). Alguien puede publicar sobre esos detalles. Que debería tomar un enfoque de lista blanca de valores solo copiando aprobados $_POST-$_SESSION es decir:

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

¿Cómo se define "vacío" determina qué tipo de comprobar que haces. El código anterior usa isset(). También podría hacer if ($_POST[$v]) ... si no desea escribir cadenas vacías o el número 0.

+0

Sí, gracias por el puntero. Así que tendría que, de hecho, hacerlo uno por uno, pero puedo incluirlo en una lista blanca para mantener el código ordenado. ¿Cómo implemento una verificación "no vacía()" en su código anterior, para garantizar que solo los datos POST no vacíos se conviertan en variables de sesión, incluso si están en la lista blanca? Estoy de acuerdo con que "0" esté registrado como vacío. –

2

Aquí tiene,

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

El error de sintaxis, es sólo porque hay un soporte todavía abierto. debería ser

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

Debería funcionar así. Si utiliza

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

quita los datos vacíos.

1

Esto me llevó a este bit, que es una versión simplificada de la respuesta de @ meder:

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

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

También podrían sustituir !empty() para isset() anterior, a pesar de ser consciente de lo mucho mayor alcance empty() es, como @meder señaló.

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

Luego solo use $ var como variable de publicación. Por ejemplo:

echo $var["email"]; 

en lugar de

echo $_POST["email"]; 

Saludos

Cuestiones relacionadas