Vamos a seguir un ejemplo básico para hacer
un sistema de registro y un sistema de login mediante sesiones. El ejemplo sigue los siguientes pasos:
- 1º tabla de mysql y código general
- 2º sistema de registro
- 3º sistema de login
- 4º ejemplo práctico del login
Para ello es necesario un host con PHP, las sesiones activadas y mysql.
:: Tabla del Mysql y código general
Este php irá en todos los .php que usemos porque contiene los
datos para la conexión a la db:
config.php
<?
$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();
?>
|
|
Crearemos una tabla llamada users con los campos: id,nick, pass,email,fecha,level,rollo
.
| <?
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` )
);
?>
|
|
:: Sistema de registro
Primero comenzaremos con una pagina llamada reg.php que tiene un formulario donde introducir
los datos. Este formulario se enviará a registrar.php donde realizará las comprobaciones e introducirá los datos a la tabla users en el mysql.
reg.php
| <?
include('config.php'); //incluimos
el config.php que contiene los datos de la conexión
a la db
//Creamos el form k irá a registrar.php para comprobar y introducir los datos a la tabla users
echo '<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
| <?
include('config.php'); //incluimos
el config.php que contiene los datos de la conexión
a la db
//Comprobamos que los campos nick,
pass y pass1 se han rellenado en el form de reg.php,
sino volvemos al form
if(($_POST[nick] == ' ') or ($_POST[pass] == ' ') or
($_POST[pass1] == ' ') )
{
Header("Location: reg.php"); //enviamos
al form de registro que esta en reg.php
}else{
//Comprobamos que la pass y pass1
son iguales, sino, volvemos a reg.php
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'; mysql_free_result($usuarios); //liberamos la memoria del query a la db
}else{
//quitamos todo el codigo malicioso
de las demas variables del form de registro
$email = stripslashes($_POST["email"]);
$email = strip_tags($email);
$rollo = stripslashes($_POST["rollo"]);
$rollo = strip_tags($rollo);
$rollo = str_replace("\n\r","<br>",$rollo); //se
cambian los saltos de linea por <br>
$rollo = str_replace("\r\n","<br>",$rollo);
$rollo = str_replace("\n","<br>",$rollo);
$fecha = time(); $level = "2"; //usaremos level 1 para admins, level 2 para los demas (se cambia manualmente desde phpmyadmin)
//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';
}
}
}
?>
|
|
:: Sistema de login
Comenzaremos con un pequeño form en login.php donde se introduciran los datos para ser comprobados en autentificar.php y comenzar las sesiones. Las sesiones tienen la ventaja de que se crean en el servidor (las cookies no) y no tienen que estar activadas por el usuario, por lo tanto pueden ser utilizadas por cualquiera. Las sesiones sirven para pasar datos de una pagina .php a otra sin necesidad de hacer querys ni nada por el estilo. Por este motivo todas las webs en las que queramos pasar la session deben comenzar por session_start(); o un archivo que contenga esta función, como es nuestro caso, en el config.php. Tambíen exponer el código para deslogearse, que estará en logout.php.
* Nota, siempre que se ponga el session_start(); o el include con
el archivo que contiene el start como puede ser include('config.php');
, antes del <? no puede haber ningun espacio en blanco,
es decir, el primer caracter de la pagina .php tiene k ser <?
login.php
| <?
include('config.php'); //incluimos el config.php que contiene los datos de la conexión a la db
if(!isset($_SESSION[usuario]) ) //comprobamos que no existe la session, es decir, que no se ha logeado, y mostramos el form {
//Creamos el form k irá a autentificar.php
para comprobar los datos con la tabla users
echo '<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 se ha logeado, mostramos el nick y la opción de deslogearse
//Este sería el menú que saldría a la gente que esta
logeada, se puede modificar y añadir cosas
echo 'Bienvenido '.$_SESSION[usuario]; //ej Bienvenido Juan
echo '<br>Tu level es '.$_SESSION[level]; //mostramos
el level del user 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 tiene k hacer manualmente por phpmyadmin
echo '<br><a href=paginaprivada.php>Ir a
pagina privada</a>'; }
echo '<br><a href=logout.php>Salir</a>';
//link para deslogearse, iría a logout.php
}
?>
|
|
autentificar.php
| <?
include('config.php'); //incluimos
el config.php que contiene los datos de la conexión
a la db
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
| <?
include('config.php'); //incluimos
el config.php que contiene los datos de la conexión
a la db y la sesión
session_destroy(); //destruimos la sesion
Header("Location: login.php"); //volvemos al login.php
?> |
|
* Nota: Si utilizáis el login.php como un include('login.php'); dentro de un index.php deberíais cambiar los Header("Location: login.php"); por Header("Location: index.php");
:: Ejemplos prácticos
- Hacer una página privada donde solo puedan entrar los de
level 1:
paginaprivada.php
| <?
include('config.php'); //incluimos
el config.php que contiene los datos de la conexión
a la db y la sesión
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
| <?
include('config.php'); //incluimos
el config.php que contiene los datos de la conexión
a la db y la sesión
if(!isset($id)) {
echo 'no se ha seleccionado ninguna id'; //no
han 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. Pueden mejorarse en cuanto a seguridad y a calidad pero son suficientes para poder realizar un sistema de login decente. Un saludo. rubenico & PHP-Hispano.net (porque al final, aprendemos todos)
|
|