dominios y alojamiento web en hostalia

Pasar las variables SESSION, POST Y GET a variables normales en PHP

06 de octubre de 2005
Valoración del artículo:
Cómo hacer que unas variables globales como son GET, SESSION y POST se traten como variables normales en PHP.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
Hace un par de semanas se me encomendó migrar un sitio (desarrollado en php) de servidor, el tema iba relativamente en paz hasta que di cuenta de un problema recurrente en este tipo de situaciones, el servidor antiguo tenia las variables globales en On y el nuevo las tenia en Off ... recurrente no ?

La verdad es que no quise complicarme la vida como otras veces, y me di cuenta de algo que me podría ahorrar un par de horas de trabajo, todos los php hacían un include a un archivo php, recurrente también no?
Asi es que me puse a pensar en un pedazo de código que me permitiera tomar estos 3 tipos de variables (SESSION, POST Y GET) y me las dejara como variables normales, si no lo tienen claro el ejercicio es mas o menos el siguiente :

Supongamos que la variable viene desde un formulario via POST, el código decía algo asi ...

<?

if ($variable == "algo")
{
    echo "esta variable hace alguna cosa";
}

?>


Es decir, le faltaba esta instrucción antes del if

<?php

$variable = $_POST["variable"]; // le faltaba esta instrucción antes del if

if ($variable == "algo")
{
    echo "esta variable hace alguna cosa";
}

?>


Tenia 2 opciones, o me ponía a buscar TODAS estas situaciones y las arreglaba una a una, o colocaba un pedazo de código en archivo al que todos los demás le hacían un include que me corrigiera este "error" propio de aquellos que estamos a trabajar con los "servidores en producción", o sea, con las variables globales en On.

Bueno, después de muchos cabecearme encontré la solución, y aquí la muestro a todos uds.

<?

if($_POST)
{
    $keys_post = array_keys($_POST);
    foreach ($keys_post as $key_post)
     {
      $$key_post = $_POST[$key_post];
      error_log("variable $key_post viene desde $ _POST");
     }
}

if($_GET)
{
    $keys_get = array_keys($_GET);
    foreach ($keys_get as $key_get)
     {
        $$key_get = $_GET[$key_get];
        error_log("variable $key_get viene desde $ _GET");
     }
}

if($_SESSION)
{
    $keys_sesion = array_keys($_SESSION);
    foreach ($keys_sesion as $key_sesion)
     {
       $$key_sesion = $_SESSION[$key_sesion];
       error_log("variable $key_sesion viene desde $ _SESSION");
     }
}

?>


Son básicamente 3 if que hacen lo mismo, toman las claves del arreglo en cuestión (SESSION , POST o GET) y generan una "variable variable", creo que hay un articulo en desarrolloweb que habla de este tema, y esto hace toda la magia, el error_log fue una implementación para ver que variables se iban ocupando (si no tienes acceso al servidor puedes sacarlo sin problemas).

Para alguien que guste de las funciones puede también guardarlo como función y llamarla cuando lo necesite. O también iterar el proceso con las 3 variables en cuestión para no tener que hacer 3 if, o pasarle cualquier arreglo para que haga el mismo proceso ... en fin, la idea esta, solo espero haber contribuido en algo al ahorro de tiempo de alguno de ustedes.

Compartir en redes sociales

Comentarios
Fueron enviados 12 comentarios al artículo
7 comentarios no revisados
5 comentarios revisados:
Por: Andrés Fernández
06/10/2005
Es más fácil usar la función extract. Para POST: extract($_POST); Para GET: extract($_GET); y así con el resto. Saludos.
Por: yorfre
23/10/2005
creo que hay un error aqui
if ($variable = "algo")
{
echo "esta variable hace alguna cosa";
}

?>

siempre entrara por que a variable le estas asignando el valor de "algo", debes usar == para comparar

RESPUESTA

Gracias por reportarnos ese error, muy típico. Lo hemos corregido.
Por: Javier de la Rosa
24/10/2005
Creo que para que fuese totalmente correcto primero habría que revisar el orden en el que PHP trata los distintos arrays, es decir, acceder al contenido del atributo de configuración 'gpc_order' mediante la función ini_get('gpc_order'), y entonces sí gestionar la conversión a variables desde los distintos arrays.
Por: Antonio
20/4/2007
Este artículo es realmente malo, tanto por la solucón propuesta como por la forma de proponerla.
Me explico.
La solución propuesta por su autor consiste en saltarse a la torera la medida de seguridad que supuso desactivar register_globals, abriendo la puerta a todos los fallos que su desactivación pretendió evitar. Vamos, que este hombre se empeña en ir contracorriente y hacer las cosas mal. Gracias a su "solución", este caballero abre la puerta a la inyección de variables en el código, con la sobrecarga de valores que ello implica y los riesgos de seguridad asociados.
Por otro lado, el uso de arary_keysç() es totalmente innecesario porque la construcción foreach() ya ofrece la forma de trabajar con índices y valores de un array.
De esto se deducen dos cosas: Primero, que su autor no se ha leído el manual de PHP, con lo cual no entiendo cómo puede esta facultadp par aconsejar a los lectores. Segundo, que lo de "analista programador" le viene muy grande a su autor (ahora cualquiera se atribuye tal categoría laboral).
DesarrolloWeb debería ser más escrupuloso a la hora de aceptar colaboraciones, empezando por someterlas a "referee", porque se están colando barbaridades notables.

nicoriz...
Asignacion a array $_GET
28/10/2010
Hola: mi pregunta es ésta.
Supongamos esta situacion:
1) Recibo en un script php una variable por GET llamada "usuario" con el valor "nico".

echo $_GET["usuario"];

//imprime:
//nico

Ahora se puede hacer esto??


$_GET["usuario"] = $_GET["usuario"]."123";
echo $_GET["usuario"]

//imprime
//nico123


Yo nunca vi que se pueda hacer, lo probe y no me anda, pero no encuentro documentacion alguna que diga que no puedo asignar de esa manera a una variable $_GET.

COMENTO: no quiero hacer nada en especial, solo saber si es posible o no y encontrar documentacion que lo respalde, más allá de que en la práctica no lo he visto.

Muchas GRacias !

Manuales relacionados
Categorias relacionadas
El autor
Lectura recomendada
Compra este libro en Agapea, la librería urgente a domicilio.
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...