Вы находитесь на странице: 1из 6

Vamos a seguir un ejemplo bsico para hacer un sistema de registro y un sistema de login mediante sesiones.

El ejemplo sigue los siguientes pasos: - 1 tabla de mysql y cdigo general - 2 sistema de registro - 3 sistema de login - 4 ejemplo prctico del login Para ello es necesario un host con PHP, las sesiones activadas y mysql. :: Tabla del Mysql y cdigo general Este php ir en todos los .php que usemos porque contiene los datos para la conexin a la db: <? $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 sesin, esto se explica despues en el Sistema de Login session_start(); ?>

config.php

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 conexin 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 conexin 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 $rollo $rollo $rollo $rollo

= = = = =

stripslashes($_POST["rollo"]); strip_tags($rollo); str_replace("\n\r","<br>",$rollo); //se cambian los saltos de linea por <br> str_replace("\r\n","<br>",$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 pequeo 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 funcin, como es nuestro caso, en el config.php. Tamben exponer el cdigo 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 conexin 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 opcin de deslogearse //Este sera el men que saldra a la gente que esta logeada, se puede modificar y aadir 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, ira a logout.php } ?>

autentificar.php <? include('config.php'); //incluimos el config.php que contiene los datos de la conexin 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 vacas, 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 sesin $_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 conexin a la db y la sesin
session_destroy(); //destruimos la sesion Header("Location: login.php"); //volvemos al login.php ?>

* Nota: Si utilizis el login.php como un include('login.php'); dentro de un index.php deberais cambiar los Header("Location: login.php"); por Header("Location: index.php"); :: Ejemplos prcticos - Hacer una pgina privada donde solo puedan entrar los de level 1: paginaprivada.php <? include('config.php'); //incluimos el config.php que contiene los datos de la conexin a la db y la sesin
if($_SESSION[level] == 1) { echo 'Tienes level 1 y puedes ver esta pgina'; }else{ Header("Location: index.php"); } ?>

Hacer una pgina donde se muestre la informacin 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 conexin a la db y la sesin 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 cdigos y ejemplos son una gua 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)

Вам также может понравиться