Publicado el 22 de Abril del 2018
861 visualizaciones desde el 22 de Abril del 2018
721,3 KB
110 paginas
Creado hace 15a (04/12/2008)
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Pasar las variables SESSION, POST Y GET a variables
normales en PHP
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");
}
Taller de PHP: http://www.desarrolloweb.com/manuales/6/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
1
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
}
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.
Juan Edgardo Jorquera Uribe
Artículo por
Bucle para recibir todos los datos de una fila de un
recordset con PHP
Vamos a realizar una función para recibir todos los datos de una fila de un recordset (conjunto
de registros extraídos de una base de datos, Mysql en el caso de este artículo) y declararlos
como variables globales a la página. Se trata de una función que realiza un recorrido genérico
a todos los datos de cualquier fila y cualquier recordset y va generando las variables globales
para trabajar con esos datos.
Las variables globales tendrían como nombre el mismo del campo (que es el mismo nombre
que la columna de la tabla asociada a ese dato) y como valor, el dato que guarda esa fila en la
columna determinada.
Nota: Este artículo es similar a otro en el que se realiza un recorrido genérico a las variables recibidas por
POST. Las explicaciones de ese artículo pueden venir bien para comprender mejor este.
Para una tabla como esta:
id_clie
nombre
telefono_
Taller de PHP: http://www.desarrolloweb.com/manuales/6/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
2
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
nte
_cliente
cliente
1
2
3
Pepe
Juan
María
90 000
00 00
99 888
88 88
999 99
99 99
Si la función recibiera una fila cualquiera, se generarían variables con nombres id_cliente,
nombre_cliente y telefono_cliente y sus valores serían los de esa fila en concreto. Para la fila
1, se generarían las variables:
id_cliente=1
nombre_cliente="Pepe"
telefono_cliente="90 000 00 00"
El recorrido será genérico, por lo que servirá para cualquier tabla, con cualquier número y
nombre de las columnas. Las variables generadas serán siempre las columnas que existan, con
los valores de la fila que se haya recibido por parámetro.
Esta función es muy útil para recibir los datos de una fila y meterlos en variables globales,
para luego operar con ellos. Como el recorrido es genérico, da igual el número, nombre y tipo
de los campos que se van a meter en las variables.
function recibe_fila($fila){
foreach($fila as $nombre_campo => $valor){
if (gettype($nombre_campo)!="integer"){
$asignacion = "\$GLOBALS[\"" . $nombre_campo . "\"]='" . $valor . "';";
eval($asignacion);
//echo $asignacion . "<br>";
}
}
}
Un ejemplo de uso de esta función
Veamos cómo utilizar esta función para recibir los datos de una fila. Se supone que antes de
ejecutar estas líneas se debe haber abierto una conexión con la base de datos. También se
supone que después de ejecutar este código, se debería cerrar esa conexión con la base de
datos.
$ssql="select * from cliente where id_cliente=2";
$rs=mysql_query($ssql);
$fila=mysql_fetch_array($rs);
recibe_fila($fila);
Después de estas líneas, se habrán creado las variables globales con los datos de la fila
extraída de la tabla cliente, una variable para cada una de las columnas de la fila.
Miguel Angel Alvarez
Artículo por
Taller de PHP: http://www.desarrolloweb.com/manuales/6/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
3
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Función PHP segura para recibir los datos de un formulario
La idea de este artículo es realizar una función que nos simplifique la tarea de recibir en
variables los datos que nos llegan desde un formulario por el método POST, pero asegurando
nuestra aplicación, para no declarar como variable aquello que no estamos esperando.
Ya hicimos una primera aproximación a este objetivo en el artículo Bucle para recibir todas las
variables por POST en PHP. Aunque la solución propuesta en dicho artículo no era del todo
adecuada, por hacer más vulnerable nuestro script, ya que rebaja la seguridad de nuestro
código como si utilizásemos register_globals = on.
Nota:Podemos saber qué es esto de register_globals y por qué afecta a la seguridad de nuestras
aplicaciones PHP en la FAQ: register_globals y seguridad en PHP
El ejemplo que estamos tratando sólo recibe las variables por POST que nosotros esperamos
recibir y no todas las variables que el formulario pueda contener, lo que realmente mejora la
seguridad. Para ello, la función recibe_post() va a recibir un parámetro con los nombres de las
variables que debe declarar con los datos del formulario. Como nosotros decidimos qué
variables se reciben, ya no corremos el riesgo que un usuario malicioso envíe otros campos por
el formulario que luego se conviertan en variables en nuestro sistema.
Veamos el código de esta función:
function recibe_post($datos_recibir=""){
if ($datos_recibir==""){
foreach($_POST as $nombre_campo => $valor){
$asignacion = "\$GLOBALS[\"" . $nombre_campo . "\"]='" . $valor . "';";
eval($asignacion);
}
}else{
//es que recibo por parámetro la lista de campos que deseo recibir
$campos = explode(",", $datos_recibir);
foreach($campos as $nombre_campo){
$asignacion = "\$GLOBALS[\"" . $nombre_campo . "\"]=\$_POST[\"" . $nombre_campo . "\"];";
eval($asignacion);
}
}
}
Esta función recibe una variable llamada $datos_recibir, que contiene los datos que se desean
recibir. Ese dato es opcional, ya que si no recibe nada, se entiende que $datos_recibir vale "".
Lo primero que se hace es evaluar si $datos_recibir es un string vacío. Si es así, es que no se
ha indicado qué es lo que se quiere recibir. Entonces, se recibe por formulario todo lo que
haya. (Nótese que si no enviamos nada en ese parámetro se estarán recibiendo todos los
datos que haya en el formulario y nuestra aplicación verá mermada la seguridad).
Ahora bien, si se recibe algo en $datos_recibir, es que sabemos qué datos se desean declarar
como variables. En ese caso, estaremos recibiendo un string con todos los nombres de los
campos del formuario que deseamos recibir, separados por comas. Imaginemos que tenemos
un formulario con dos campos, uno llamado "nombre_usuario" y otro "edad_usuario".
Entonces, a esta función tenemos que pasarle esos dos nombres de campos separados por
comas "nombre_usuario,edad_usuario".
Para realizar las tareas de declaración de las variables, se crea un array con todos los campos
Taller de PHP: http://www.desarrolloweb.com/manuales/6/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
4
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
rec
Comentarios de: Pasar las variables SESSION, POST Y GET a variables normales en PHP (0)
No hay comentarios