Esta vez quiero mostrarles como hacer para que tu web tenga un sistema de registro para tus usuarios, ya con esto puedes hacer muchas cosas como darles permisos específicos, restringir la entrada de visitantes a algunas partes de tu web, etc..
Cabe aclarar que el script es bastante básico, para quienes empiezan en esto de la programación web.
Requerimientos:
Hosting (servidor local o web)
PHP (ojala 5)
1 base de datos MySQL
Empecemos:
Para el desarrollo de nuestro script necesitaremos la creación de 4 archivos .php:
- conexion.php
- registro.php
- login.php
- perfil.php
- Lo primero es crear una base de datos a la cual vamos a poner nombre "registro".
En la cual vamos a generar la siguiente consulta SQL:Lo que estamos haciendo es crear una tabla en nuestra base de datos llamada "usuarios", en la cual almacenaremos los datos de nuestros usuarios.Código: Seleccionar todo
CREATE TABLE usuarios ( id int(5) not null auto_increment, fecha int(10) not null, nick varchar(20) not null, pass varchar(32) not null, mail varchar(40) not null, ip varchar(15) not null, primary key (id), key (nick,pass) )
- Luego empezaremos con la creación de nuestro primer archivo "conexion.php", el cual se encarga de conectar nuestro sistema con la base de datos que creamos en el punto anterior.
Este archivo también tendrá algunas funciones php necesarias para el registro y el logueo de los usuarios.
Código: Seleccionar todo
<?php $nombre_server[1] = 'localhost'; //Servidor al cual nos vamos a conectar. $nombre_user[2] = 'root'; //Nombre del usuario de la base de datos. $password[3] = ''; //Contraseña de la base de datos $nombre_db[4] = 'registro'; //nombre de la base de datos $conectar = @mysql_connect($nombre_server[1],$nombre_user[2],$password[3]) or exit('Datos de conexion incorrectos.'); mysql_select_db($nombre_db[4]) or exit('No existe la base de datos.'); /*En este archivo también pondremos unas funciones necesarias para el registro y el login*/ session_start(); /*Función que se encarga de eliminar codigo malicioso de las variables.*/ function limpiar($var) { $var = trim($var); $var = htmlspecialchars($var); $var = str_replace(chr(160),'',$var); return $var; } /*Función que se encarga de validar el email de registro para que sea correcto.*/ function validar_email($email){ $mail_correcto = 0; //compruebo unas cosas primeras if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")) { if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) {//miro si tiene caracter . if (substr_count($email,".")>= 1) {//obtengo la terminacion del dominio $term_dom = substr(strrchr ($email, '.'),1); //compruebo que la terminaci?n del dominio sea correcta if (strlen($term_dom)>1 && strlen($term_dom)<5 && (!strstr($term_dom,"@")) ) {//compruebo que lo de antes del dominio sea correcto $antes_dom = substr($email,0,strlen($email) - strlen($term_dom) - 1); $caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1); if ($caracter_ult != "@" && $caracter_ult != ".") { $mail_correcto = 1; } } } } } if ($mail_correcto) return 1; else return 0; } /*Funcion que se encarga de validar si el usuario esta registrado en el sistema*/ function user_login() { if(!$_SESSION['id']) { exit ("Solo usuarios registrados, <a href='javascript:history.back(-1)'>Volver</a>"); } } ?>
- Ya tenemos nuestro archivo de conexión con la base de datos entonces continuamos con el archivo "registro.php" que como su nombre lo indica se encargara de almacenar los usuarios en la base de datos.
Hasta aquí nuestro sistema de registro ya funciona y va perfectamente.Código: Seleccionar todo
<?php include("conexion.php"); //Sistema de registro --HiperAcme.net-- if(isset($_POST['registro']))//Vallidamos que el formulario fue enviado { /*Validamos que todos los campos esten llenos correctamente*/ if(($_POST['nick'] != '') && ($_POST['mail'] != '') && ($_POST['pass'] != '') && ($_POST['conf_pass'] != '')) { if($_POST['pass'] != $_POST['conf_pass']) { echo '<br />Las contraseñas no coinciden'; } else { $date= time(); $nick= limpiar($_POST['nick']); $mail= limpiar($_POST['mail']); $pass= md5(md5(limpiar($_POST['pass']))); $ipuser= $_SERVER['REMOTE_ADDR']; $b_user= mysql_query("SELECT nick FROM usuarios WHERE nick='$nick'"); if($user=@mysql_fetch_array($b_user)) { echo '<br />El nombre de usuario o el email ya esta registrado.'; mysql_free_result($b_user); //liberamos la memoria del query a la db } else { if(validar_email($_POST['mail'])) { mysql_query("INSERT INTO usuarios (fecha,nick,mail,pass,ip) values ('$date','$nick','$mail','$pass','$ipuser')"); echo '<br />Te has registrado Correctamente, ahora podras iniciar sesión como usuario registrado.'; } else { echo '<br />El email no es valido.'; } } } } else { echo '<br />Deberas llenar todos los campos.'; } } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>Registro de Usuarios</title> </head> <body> <h2>Sistema de Registro</h2> <div align="center"> <form name="registrar" action="registro.php" method="post" onsubmit="return validar()" /> <dt><label>Nick:</label></dt> <input type='text' name='nick' /><br /><br /> <dt><label>E-mail:</label></dt> <input type='text' name='mail' /><br /><br /> <dt><label>Contraseña:</label></dt> <input type="password" name='pass' /><br /><br /> <dt><label>Confirmar Contraseña:</label></dt> <input type="password" name='conf_pass' /><br /><br /><br /><br /> <input type="submit" name="registro" style="width:100px;" tabindex="6" value="Registrar" /> <input type="reset" name="Limpiar" style="width:100px;" tabindex="6" value="Limpiar" /> </form> <a href="login.php">Identificarse</a> </div> </body> </html>
- Ahora procedemos a crear el archivo de conexión de los usuarios , el "login.php".
Este archivos es el encargado de guardar la sesión se los usuarios para que el sistema los reconozca como usuarios registrados y logueados.
Aquí no solo tenemos el encargado de iniciar la sesión de los usuarios, sino que también se cumplen dos funciones mas:Código: Seleccionar todo
<?php include("conexion.php"); if(isset($_POST['login'])) { $nick= $_POST['nick']; $pass= md5(md5($_POST['pass'])); $b_user=mysql_query("SELECT * FROM usuarios WHERE nick='$nick'"); $ses = @mysql_fetch_assoc($b_user) ; if(@mysql_num_rows($b_user)) { if($ses['pass'] == $pass) { $_SESSION['id']= $ses["id"]; $_SESSION['fecha']= $ses["fecha"]; $_SESSION['nick']= $ses["nick"]; $_SESSION['mail']= $ses["mail"]; $_SESSION['ip']= $ses["ip"]; } else { echo 'Nombre de usuario o Contraseña incorrecta.'; } } else { echo 'Nombre de Usuario o contraseña incorrecta.'; } } if(isset($_GET['modo']) == 'desconectar') { session_destroy(); echo '<meta http-equiv="Refresh" content="2;url=login.php"> '; exit ('Te has desconectado del sistema.'); } if(isset($_SESSION['id'])) { echo 'Bienvenido <b>' . $_SESSION['nick'] . '</b><br /><br />'; echo '<b>Fecha registro:</b> ' . date("d-m-Y - H:i", $_SESSION['fecha']) . '<br />'; echo '<b>Email:</b> ' . $_SESSION['mail'] . '<br />'; echo '<b>IP:</b> ' . $_SESSION['ip'] . '<br /><br />'; echo '<a href="login.php?modo=desconectar">Salir</a>'; } else { ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>Login</title> </head> <body> <h2>Conetarse - Desconectarse</h2> <div align="center"> <form name="login_user" action="login.php" method="post" /> <dt><label>Nick:</label></dt> <input type='text' name='nick' /><br /><br /> <dt><label>Contraseña:</label></dt> <input type="password" name='pass' /><br /><br /> <input type="submit" name="login" style="width:100px;" tabindex="6" value="Entrar" /> <input type="reset" name="Limpiar" style="width:100px;" tabindex="6" value="Limpiar" /> </form> <a href="registro.php">Registrarse</a> </div> <?php } ?> </body> </html>
- Mostrar algunas opciones del perfil del usuario luego de verificar que esta logueado.
- Terminar la sesión de usuario [Desconectarse].
Hasta este momento, ya tienes todo el registro el logueo de usuarios totalmente funcional, así que hasta aquí ya tienes tenemos completo nuestro sistema de información. - El ultimo de nuestros archivos, simplemente es un archivo de ejemplo para mostrar como proteger nuestra paginas de invitados que solo sena accesibles para usuarios registrados, en este caso crearemos el archivo "perfil.php".
La función user_login() (que pueden encontrar en el archivo conexion.php) es la encargada de verificar que el usuario este logueado, de lo contrario le mostrara un aviso diciéndole que no lo esta y no le dejara ver el contenido de la pagina que esta visitando.Código: Seleccionar todo
<?php include("conexion.php"); user_login(); echo '<h2>Pagina solo para usuarios registrados</h2><br />'; echo '<b>Nombre de Usuario:</b> ' . $_SESSION['nick'] . '<br />'; echo '<b>Fecha de registro:</b> ' . date("d-m-Y - H:i", $_SESSION['fecha']) . '<br />'; echo '<b>Email de registro:</b> ' . $_SESSION['mail'] . '<br />'; echo '<b>IP:</b> ' . $_SESSION['ip'] . '<br /><br />'; echo '<a href="login.php?modo=desconectar">Salir</a>'; ?>
Así que las paginas que quieran proteger deberán agregarle la linea:
Al principio luego de incluir el archivo de conexión.Código: Seleccionar todo
user_login();
Cualquier duda me la pueden preguntar y estaré dispuesto a ayudarles, el archivo con todo el script lo pueden descargar desde aquí: Descarga Script Completo
Y lo pueden ver funcionando en http://www.hiperacme.net/foro/dev/registro/