PHP - Variables de Sesión

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 9

Variables de sesin ($_SESSION)

Es otro mtodo para hacer que variables estn disponibles en mltiples pginas sin tener que
pasarlas como parmetro.

ara identificar al usuario que gener las variables de sesin, el servidor genera una clave nica que
es enviada al navegador y almacenada en una cookie. Luego, cada vez que el navegador solicita
otra pgina al mismo sitio, enva esta cookie (clave nica) con la cual el servidor identifica de qu
navegador proviene la peticin y puede rescatar de un archivo de texto las variables de sesin que
se han creado. Cuando han pasado 20 minutos sin peticiones por parte de un cliente (navegador)
las variables de sesin son eliminadas automticamente (se puede configurar el entorno de PHP
para variar este tiempo)

Haremos un problema muy sencillo, cargaremos en un formulario el nombre de usuario y


clave de un cliente, en la segunda pgina crearemos dos variables de sesin y en una
tercera pgina recuperaremos los valores almacenados en las variables de sesin.

La primera pgina es un formulario HTML puro:

<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php" method="post">
Ingrese nombre de usuario:
<input type="text" name="campousuario"><br>
Ingrese clave:
<input type="password" name="campoclave"><br>
<input type="submit" value="confirmar">
</form>
</body>
</html>

Lo que podemos recalcar es que, cuando en un cuadro de texto queremos ingresar una
clave y no queremos que aparezcan los caracteres tipeados en pantalla, debemos utilizar
el control de tipo password:

<input type="password" name="campoclave">

La segunda pgina es donde creamos e inicializamos las dos variables de sesin:


<?php
session_start();
$_SESSION['usuario']=$_REQUEST['campousuario'];
$_SESSION['clave']=$_REQUEST['campoclave'];
?>
<html>
<head>
<title>Problema</title>
</head>
<body>
Se almacenaron dos variables de sesin.<br><br>
<a href="pagina3.php">Ir a la tercer pgina donde se recuperarn
las variables de sesin</a>
</body>
</html>

Cuando creamos o accedemos al contenido de variables de sesin debemos llamar a la


funcin session_start() antes de cualquier salida de etiquetas HTML.

Para almacenar los valores en las variables de sesin lo hacemos:

$_SESSION['usuario']=$_REQUEST['campousuario'];
$_SESSION['clave']=$_REQUEST['campoclave'];

Es decir, tenemos el vector asociativo $_SESSION que almacena las variables de sesin.

Por ltimo, esta pgina tiene un hipervnculo a la tercera pgina.

La ltima pgina de este ejemplo tiene por objetivo acceder a las variables de sesin:

<?php
session_start();
?>
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
echo "Nombre de usuario recuperado de la variable de sesin:".$_SESSION['usuario'];
echo "<br><br>";
echo "La clave recuperada de la variable de sesin:".$_SESSION['clave'];
?>
</body>
</html>

De nuevo vemos que la primera lnea de esta pgina es la llamada a la funcin


session_start() que, entre otras cosas, rescata de un archivo de texto las variables de
sesin creadas para ese usuario (recordemos que desde el navegador todas las veces
retorna una cookie con la clave que gener PHP la primera vez que llamamos a una pgina
del sitio).

Para mostrar las variables de sesin, las accedemos por medio del vector asociativo
$_SESSION:

echo "Nombre de usuario recuperado de la variable de sesin:".$_SESSION['usuario'];


echo "<br><br>";
echo "La clave recuperada de la variable de sesin:".$_SESSION['clave'];

Tengamos en cuenta que en cualquier otra pgina del sitio tenemos acceso a las variables
de sesin slo con llamar inicialmente a la funcin session_start().

Administracin de fechas y horas (funcin date)

La funcin date retorna un string con una fecha y hora, o partes de ella segn un string de
formato que le pasamos como parmetro. Se obtiene la fecha y hora del servidor.

Veamos como ejemplo la impresin de la fecha y hora actual del servidor:

<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
echo "La fecha de hoy es:";
$fecha=date("d/m/Y");
echo $fecha;
echo "<br>";
echo "La hora actual es:";
$hora=date("H:i:s");
echo $hora;
echo "<br>";
?>
<a href="pagina2.php">Siguiente problema</a>
</body>
</html>

Los caracteres de formato utilizados en las dos llamadas de la funcin date son:

d da del mes con dos dgitos "01" al "31"


m mes con dos dgitos "01" al "12"
Y ao con cuatro dgitos
Para la hora, los caracteres que sern sustituidos son:
H hora con dos dgitos "00" a "23"
i minutos con dos dgitos "00" a "59"
s segundos con dos dgitos "00" a "59"

Los otros caracteres que disponemos al llamar a la funcin date, son retornados sin
cambios, en este caso la barra y los dos puntos.

Los caracteres de formato que veamos son los ms comunes, pero tenemos otras
variantes posibles. Si queremos los das y meses sin el cero delante y el ao con dos
dgitos tenemos entonces:

<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
echo "La fecha de hoy es:";
$fecha=date("j/n/y");
echo $fecha;
echo "<br>";
?>
<a href="pagina3.php">Siguiente problema</a>
</body>
</html>

Los caracteres que ahora tenemos son:

j da del mes "1" al "31"

n mes "1" al "12"


y ao con dos dgitos

mysqli - POO (Programacin Orientada a Objetos)

En conceptos anteriores vimos un conjunto de funciones para el acceso a una base de


datos de MySQL: mysqli_connect, mysqli_query, mysqli_fetch_array etc.

Pero la extensin mysqli nos suministra dos formas de comunicarnos con la base de datos
MySQL, una interfaz procedimental que es la que hemos visto en conceptos anteriores y
una interfaz orientada a objetos.

Ahora vamos a ver la sintaxis si queremos utilizar la extensin mysqli pero mediante esta
interfaz orientada a objetos.

Clases

Esta extensin nos suministra dos clases fundamentales:

mysqli
mysqli_result

Para conectarnos con el motor de base de datos y seleccionar una base de datos debemos
crear un objeto de la clase mysqli:

$mysql=new mysqli("localhost","root","","base1");

Para crear un objeto debemos utilizar el operador new e inmediatamente disponer el


nombre de la clase (en este caso la clase se llama mysqli) y entre parntesis los
parmetros del constructor. El contructor recibe los mismos parmetros que habamos
visto con la interfaz procedimental, es decir el nombre del servidor, el usuario, la clave y el
nombre de la base de datos.

La variable $mysql almacena la referencia del objeto que se acaba de crear de la clase
mysqli.

Para saber si la conexin y seleccin de la base de datos se efectu en forma correcta


debemos acceder a la propiedad connect_error de la clase mysqli, dispondremos una
sintaxis similar a esta:

if ($mysql->connect_error)
die('Problemas con la conexion a la base de datos');
$mysql es un objeto de la clase mysqli y mediante este objeto accedemos a la propiedad
connect_error, si el if se verifica falso es que la propiedad connect_error almacena un
NULL ya que no hay un error en la conexin al servidor y base de datos indicado cuando
creamos el objeto.

Para ejecutar una consulta la clase mysqli tiene un mtodo llamado query, la sintaxis para
llamar a este mtodo tendr una estructura similar a:

$mysql->query("insert into rubros(descripcion) values ('$_REQUEST[descripcion]')")


or
die($mysql->error);

Al mtodo query le pasamos como referencia un string con el comando SQL que
queremos que se ejecute, si hay algn error en el comando SQL el mtodo query retorna
un false y se ejecuta el comando seguido al operador or.

Con la funcin die detenemos la ejecucin del programa y accedemos a la propiedad error
que almacena el error generado al tratar de ejecutar el comando SQL.

Finalmente llamamos al mtodo close para cerrar la conexin:

$mysql->close();
Problema

Implementaremos una serie de pginas para efectuar el ABM (Altas, Basjas, y


Modificaciones) y listados de una serie de tablas empleando la extensin mysqli orientada
a objetos.

Crearemos una base de datos base1 (si ya la tenemos de conceptos anteriores


procederemos a agregar las tablas a dicha base de datos)

Crearemos dos tablas llamadas "rubros" y "articulos", en la primera almacenaremos un


listado de rubros de un supermercado y en la tabla "articulos" almacenaremos la
descripcin, precio y cdigo de rubro que pertenece el artculo.

Desde el PhpMyAdmin procedemos a crear las dos tablas, primero indicamos el nombre
de la tabla:
y seguidamente indicamos la estructura de la tabla rubros:

y la tabla articulos tiene la siguiente estructura:

Ingreso tabla rubros


Ya tenemos las dos tablas creadas dentro de nuestra base de datos "base1":

Implementaremos el alta de la tabla rubros utilizando la interfaz orientada a objetos de la


extensin mysqli.

La primer pgina es el formulario donde ingresamos por teclado la descripcin del rubro a
cargar:

<!doctype html>
<html>
<head>
<title>Alta de rubros</title>
</head>
<body>
<form method="post" action="pagina2.php">
Ingrese la descripcin del rubro:
<input type="text" name="descripcion" size="50" required>
<br>
<input type="submit" value="confirmar">
</form>
</body>
</html>

Ahora la pgina que efecta el insert en la tabla MySQL es:

<!doctype html>
<html>
<head>
<title>Alta</title>
</head>
<body>
<?php
$mysql=new mysqli("localhost","root","","base1");
if ($mysql->connect_error)
die('Problemas con la conexion a la base de datos');

$mysql->query("insert into rubros(descripcion) values ('$_REQUEST[descripcion]')")


or
die($mysql->error);

$mysql->close();

echo 'El nuevo rubro se almacen';


?>
<br>
</body>
</html>

En esta pgina lo primero que hacemos es crear un objeto de la clase mysqli:

$mysql=new mysqli("localhost","root","","base1");

Verificamos con un if si la propiedad connect_error almacena un valor distinto a NULL y en


dicho caso detenemos la ejecucin del programa.

Llamamos al mtodo query componiendo un string con el comando SQL necesario para
efectuar el insert en la tabla rubros, si el mtodo query retorna false se ejecuta el
comando seguido al operador or donde mostramos la propiedad error del objeto $mysql:

$mysql->query("insert into rubros(descripcion) values ('$_REQUEST[descripcion]')")


or
die($mysql->error);

Por ltimo cerramos la conexin a la base de datos:

$mysql->close();

En forma inmediata podemos ver la diferencia con la metodologa procedimental donde


todas las funciones tenamos que pasarle una variable que era la referencia a la conexin
(ac lo almacena el objeto luego de que se lo crea al llamar al constructor)

También podría gustarte