Artículo publicado por rubenico el 16 Feb 03
Ha sido leído en 69437 ocasiones
En este artículo vamos a mostrar cómo hacer un sistema básico de registro y un sistema de login mediante sesiones.
El ejemplo sigue los siguientes pasos:
Para ello es necesario un hosting con soporte PHP, las sesiones activadas y una base de datos mysql.
Este php irá en todos los .php que usemos porque contiene los datos para la conexión a la db:
config.php . Archivo de configuración donde almacenaremos los datos de conexión a la base de datos.
<?
$dbhost="localhost"; //Host del mysql
$dbuser="usuario"; //Usuario del mysql
$dbpass="password"; //Password del mysql
$db="db_usuarios"; //db donde se creará la tabla users
//conectamos y seleccionamos db
mysql_connect("$dbhost","$dbuser","$dbpass");
mysql_select_db("$db");
//Comenzamos la sesión, esto se explica despues en el Sistema de Login
session_start();
?>
Para llevar a cabo el proceso de registro deberemos crear una tabla llamada users con los campos: id,nick, pass,email,fecha,level,rollo .
SQL a ejecutar
CREATE TABLE `users` (
`id` INT( 4 ) NOT NULL AUTO_INCREMENT,
`nick` VARCHAR(30) NOT NULL ,
`pass` VARCHAR(30) NOT NULL ,
`email` VARCHAR(50) NOT NULL ,
`fecha` INT(15) NOT NULL ,
`level` INT(2) NOT NULL ,
`rollo` LONGTEXT NOT NULL ,
INDEX ( `id` )
);
Primero comenzaremos con una pagina llamada form.php donde mostraremos un formulario donde introducir los datos de registro. Este formulario se enviará a registrar.php donde realizará las comprobaciones e introducirá los datos en la tabla users de nuestra base de datos.
form.php . Creamos el formulario que se enviará a registrar.php
<form action="registrar.php" method="POST">
Nick: <input type="text" name="nick" size="30"><br>
Password: <input type="password" name="pass" size="30" ><br>
Repetir Password: <input type="password" name="pass1" size="30" ><br>
Email: <input type="text" name="email" size="50"><br>
Rollo: <textarea name="rollo" cols="30" rows="10"></textarea><br>
<input type="submit" name="submit" value="Enviar"></form>
registrar.php .
<?
//incluimos datos de la conexión a la db
include('config.php');
//Comprobamos que los campos nick, pass y pass1 se han rellenado en el formulario
if(($_POST[nick] == ' ') or ($_POST[pass] == ' ') or ($_POST[pass1] == ' ') )
{
// redirigimos al formulario
header("Location: form.php"); /
}else{
//Comprobamos que la pass y pass1
if($_POST[pass] != $_POST[pass1])
{
echo 'Las passwords no son iguales';
}else{
//quitamos el codigo malicioso de $_POST[nick] y $_POST[pass]
$user = stripslashes($_POST["nick"]);
$user = strip_tags($user);
$pass = stripslashes($_POST["pass"]);
$pass = strip_tags($pass);
//comprobamos que el usuario no existe en la db
$usuarios=mysql_query("SELECT nick FROM users WHERE nick='$user' ");
if($user_ok=mysql_fetch_array($usuarios))
{
echo 'El usuario ya esta registrado';
//liberamos la memoria del query a la db
mysql_free_result($usuarios);
}else{
//quitamos todo el codigo malicioso de las demas variables
$email = stripslashes($_POST["email"]);
$email = strip_tags($email);
$rollo = stripslashes($_POST["rollo"]);
$rollo = strip_tags($rollo);
$fecha = time();
//usaremos level 1 para admins, level 2 para los demas
$level = "2";
//introducimos el nuevo registro en la tabla users
mysql_query("INSERT INTO users (nick,pass,email,fecha,level,rollo) values ('$user','$pass','$email','$fecha','$level','$rollo') ");
echo 'Usuario registrado con éxito';
}
}
}
?>
Una vez que ya tenemos el formulario de registro y la funcionalidad necesaria para dar de alta nuevos usuarios, procemos a realizar el módulo para que los usuarios puedan identificarse en el sistema.
Comenzaremos con un pequeño form en login.php donde se introduciran los datos de acceso (login/password) para ser comprobados posteriormente en autentificar.php .
Si los datos de acceso son correctos, crearemos una variable de sesión indicando que el usuario se encuentra identificado correctamente. Las sesiones nos permiten conservar valores relativos a un usuario entre diferentes páginas. Debemos recordar que para poder utilizar sesiones y acceder a los diferentes valores en cada página, deberemos llamar a la función session_start() , en cada página donde queramos acceder a la sesión del usuario.
login.php . Formulario de identificación
<?
//incluimos datos de la conexión a la db
include('config.php');
?>
<?
// Comprobamos que el usuario no esté identificado ya
if(!isset($_SESSION[usuario]) ) {
?>
<form action="autentificar.php" method="POST">
Nick: <input type="text" name="nick" size="30"><br>
Password: <input type="password" name="pass" size="30" ><br>
<input type="submit" name="submit" value="Enviar"></form>
<? }else{
//SI ya está identificado, mostramos la opción para cerrar sesión
//Este sería el menú que saldría a la gente que esta logeada, se puede modificar y añadir cosas
//ej Bienvenido Juan
echo 'Bienvenido '.$_SESSION[usuario];
//mostramos el level del user
echo '<br>Tu level es '.$_SESSION[level];
if($_SESSION[level] == 1)
{
// mostramos el link para ir a la pagina privada porque el user tiene level 1 (*Nota: el level por defecto es 2, por lo tanto no se le mostrará)
// *Nota2: para cambiar el level a 1, se puede hacer manualmente desde un gestor como phpmyadmin
echo '<br><a href="paginaprivada.php">Ir a pagina privada</a>';
}
//link para hacer logout
echo '<br><a href="logout.php">Salir</a>';
}
?>
autentificar.php
<?
//incluimos datos de la conexión a la db
include('config.php');
if( ($_POST[nick] == ' ') or ($_POST[pass] == ' ') )//comprobamos que las variables enviadas por el form de login.php tienen contenido
{
Header("Location: login.php"); //estan vacías, volvemos al index
}else{
//comprobamos en la db si existe ese nick con esa pass
$usuarios=mysql_query("SELECT * FROM users WHERE nick='$_POST[nick]' and pass='$_POST[pass]' ");
if($user_ok = mysql_fetch_array($usuarios)) //si existe comenzamos con la sesion, si no, al index
{
session_register("usuario"); //registramos la variable usuario que contendrá el nick del user
session_register("idusuario"); //registramos la variable idusuario que contendrá la id del user
session_register("level"); //registramos la variable level que contendrá el level del user
//damos valores a las variables de la sesión
$_SESSION[usuario] = $user_ok["nick"]; //damos el nick a la variable usuario
$_SESSION[idusuario] = $user_ok["id"]; //damos la id del user a la variable idusuario
$_SESSION[level] = $user_ok["level"]; //damos el level del user a la variable level
Header("Location: login.php"); //volvemos al login donde nos saldrá nuestro menú de usuario
}else{
echo 'Nick y pass incorrectos';
}
}
?>
logout.php . Script que borrará los datos de la sesión, haciendo que el usuario deje de estar identificado.
<?
session_destroy(); //destruimos la sesion
header("Location: login.php"); //volvemos al login.php
?>
paginaprivada.php
<?
//incluimos datos de la conexión a la db
include('config.php');
if($_SESSION[level] == 1)
{
echo 'Tienes level 1 y puedes ver esta página';
}else{
header("Location: index.php");
}
?>
Hacer una página donde se muestre la información de un usuario, del tipo perfil.php?id=3, donde id sera el identificador del usuario.
perfil.php
<?
//incluimos datos de la conexión a la db
include('config.php');
if(!isset($id))
{
//no han seleccionado ninguna id,
echo 'no se ha seleccionado ninguna id';
}else{
//comprobamos si esa id existe
$user=mysql_query("SELECT * FROM users WHERE id='$id' ");
if($user_ok=mysql_fetch_array($user) )
{
//todo comprobado, ahora solo falta mostrar los datos
echo 'Usuario <b>'.$user_ok["nick"].'</b><br>';
echo '<br>Email: <a href="mailto:'.$user_ok["email"].'">'.$user_ok["email"].'</a> <br>';
//sacamos la fecha de registro mediante la funcion date
$fecha=date("d.m.Y - H:i", $user_ok["fecha"]);
echo 'Fecha de registro: '.$fecha.'<br>';
//por último mostramos el rollo
echo 'Rollo:<br>'.$user_ok["rollo"];
}else{
echo 'La id seleccionada no existe';
}
}
?>
Todos estos códigos y ejemplos son una guía de como se deben hacer o empezar a hacer las cosas. Pretende dar una idea general de funcionamiento, por lo que pueden mejorarse enormemente en cuanto a seguridad y a calidad. Sin embargo, creemos que son suficientes para poder hacerse una idea de cómo implementar un sistema de este tipo.
Si tenéis cualquier duda, podéis hacerla llegar a través de los foros de PHP-Hispano.
Un saludo.
rubenico & PHP-Hispano.net (porque al final, aprendemos todos)
Guía paso a paso de como realizar un sistema básico de registro de usuarios con PHP y MySQL mediante el uso de sesiones. Cada paso viene acompañado con un código de ejemplo y bien explicado para principiantes.