Vous êtes sur la page 1sur 7

Tutorial] Sistema de Usuarios con PHP y MySQL

Twittear

En esta oportunidad les voy a dejar un tutorial bsico para desarrollar un sistema de usuarios conPHP y MySQL, en el cual haremos uso de sesiones, tratar de ser lo ms entendible posible, pero si tienen alguna duda, pueden decirla comentando en esta entrada. Para empezar, crearemos nuestra tabla de usuarios con los siguientes campos:
CREATE TABLE `usuarios` ( `usuario_id` int(4) NOT NULL AUTO_INCREMENT, `usuario_nombre` varchar(15) NOT NULL DEFAULT '', `usuario_clave` varchar(32) NOT NULL DEFAULT '', `usuario_email` varchar(50) NOT NULL DEFAULT '', `usuario_freg` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`usuario_id`) ) Como podrn notar, el campo usuario_clave tiene una longitud de 32 caracteres, ya que la contrasea de los usuarios registrados las encriptaremos en md5(). Ahora pasamos a crear nuestro scripts PHP.

Creacin de archivo de configuracin de acceso a MySQL: A este archivo lo llamaremos acceso_db.php y va a contener los datos de acceso a nuestra Base de Datos.
<?php $host_db = ""; // Host de la BD $usuario_db = ""; // Usuario de la BD $clave_db = ""; // Contrasea de la BD $nombre_db = ""; // Nombre de la BD //conectamos y seleccionamos db mysql_connect($host_db, $usuario_db, $clave_db); mysql_select_db($nombre_db); ?>

Formulario de Registro: Ahora procederemos a crear nuestro formulario de registro, al cual llamaremos registro.php
<?php include('acceso_db.php'); // incluimos el archivo de conexin a la Base de Datos if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos desde el formulario

// creamos una funcin que nos parmita validar el email function valida_email($correo) { if (preg_match('/^[A-Za-z0-9-_.+%]+@[A-Za-z0-9-.]+\.[A-Za-z]{2,4}$/', $correo)) return true; else return false; } // Procedemos a comprobar que los campos del formulario no estn vacos $sin_espacios = count_chars($_POST['usuario_nombre'], 1); if(!empty($sin_espacios[32])) { // comprobamos que el campo usuario_nombre no tenga espacios en blanco echo "El campo <em>usuario_nombre</em> no debe contener espacios en blanco. <a href='javascript:history.back ();'>Reintentar</a>"; }elseif(empty($_POST['usuario_nombre'])) { // comprobamos que el campo usuario_nombre no est vaco echo "No haz ingresado tu usuario. <a href='javascript:history.back();'>Reintentar</a>"; }elseif(empty($_POST['usuario_clave'])) { // comprobamos que el campo usuario_clave no est vaco echo "No haz ingresado contrasea. <a href='javascript:history.back();'>Reintentar</a>"; }elseif($_POST['usuario_clave'] != $_POST['usuario_clave_conf']) { // comprobamos que las contraseas ingresadas coincidan echo "Las contraseas ingresadas no coinciden. <a href='javascript:history.back();'>Reintentar</a>"; }elseif(!valida_email($_POST['usuario_email'])) { // validamos que el email ingresado sea correcto echo "El email ingresado no es vlido. <a href='javascript:history.back();'>Reintentar</a>"; }else { // "limpiamos" los campos del formulario de posibles cdigos maliciosos $usuario_nombre = mysql_real_escape_string($_POST['usuario_nombre']); $usuario_clave = mysql_real_escape_string($_POST['usuario_clave']); $usuario_email = mysql_real_escape_string($_POST['usuario_email']); // comprobamos que el usuario ingresado no haya sido registrado antes $sql = mysql_query("SELECT usuario_nombre FROM usuarios WHERE usuario_nombre='".$usuario_nombre."'" ); if(mysql_num_rows($sql) > 0) { echo "El nombre usuario elegido ya ha sido registrado anteriormente. <a href='javascript:history.back();'>Reinte ntar</a>"; }else { $usuario_clave = md5($usuario_clave); // encriptamos la contrasea ingresada con md5 // ingresamos los datos a la BD $reg = mysql_query("INSERT INTO usuarios (usuario_nombre, usuario_clave, usuario_email, usuario_freg) V ALUES ('".$usuario_nombre."', '".$usuario_clave."', '".$usuario_email."', NOW())"); if($reg) { echo "Datos ingresados correctamente."; }else { echo "ha ocurrido un error y no se registraron los datos."; } } } }else { ?> <form action="<?=$_SERVER['PHP_SELF']?>" method="post"> <label>Usuario:</label><br /> <input type="text" name="usuario_nombre" maxlength="15" /><br /> <label>Contrasea:</label><br /> <input type="password" name="usuario_clave" maxlength="15" /><br /> <label>Confirmar Contrasea:</label><br /> <input type="password" name="usuario_clave_conf" maxlength="15" /><br />

<label>Email:</label><br /> <input type="text" name="usuario_email" maxlength="50" /><br /> <input type="submit" name="enviar" value="Registrar" /> <input type="reset" value="Borrar" /> </form> <?php } ?> Formulario de acceso: Ahora pasaremos a crear nuestro formulario de acceso o Login, a este archivo lo llamaremos acceso.php <?php session_start(); include('acceso_db.php'); if(empty($_SESSION['usuario_nombre'])) { // comprobamos que las variables de sesin estn vacas ?> <form action="comprobar.php" method="post"> <label>Usuario:</label><br /> <input type="text" name="usuario_nombre" /><br /> <label>Contrasea:</label><br /> <input type="password" name="usuario_clave" /><br /> <input type="submit" name="enviar" value="Ingresar" /> </form> <?php }else { ?> <p>Hola <strong><?=$_SESSION['usuario_nombre']?></strong> | <a href="logout.php">Salir</a></p> <?php } ?> Este es el archivo que comprueba los datos ingresados en el formulario de login, lo llamaremos comprobar.php <?php session_start(); include('acceso_db.php'); if(isset($_POST['enviar'])) { // comprobamos que se hayan enviado los datos del formulario // comprobamos que los campos usuarios_nombre y usuario_clave no estn vacos if(empty($_POST['usuario_nombre']) || empty($_POST['usuario_clave'])) { echo "El usuario o la contrasea no han sido ingresados. <a href='javascript:history.back();'>Reintentar</a>"; }else { // "limpiamos" los campos del formulario de posibles cdigos maliciosos $usuario_nombre = mysql_real_escape_string($_POST['usuario_nombre']); $usuario_clave = mysql_real_escape_string($_POST['usuario_clave']); $usuario_clave = md5($usuario_clave); // comprobamos que los datos ingresados en el formulario coincidan con los de la BD $sql = mysql_query("SELECT usuario_id, usuario_nombre, usuario_clave FROM usuarios WHERE usuario_nom bre='".$usuario_nombre."' AND usuario_clave='".$usuario_clave."'"); if($row = mysql_fetch_array($sql)) { $_SESSION['usuario_id'] = $row['usuario_id']; // creamos la sesion "usuario_id" y le asignamos como valor el c ampo usuario_id $_SESSION['usuario_nombre'] = $row["usuario_nombre"]; // creamos la sesion "usuario_nombre" y le asignam

os como valor el campo usuario_nombre header("Location: acceso.php"); }else { ?> Error, <a href="acceso.php">Reintentar</a> <?php } } }else { header("Location: acceso.php"); } ?> Agregando mensaje de bienvenida con enlace hacia el perfil personal y un enlace para cerrar sesin, en cualquier pgina: Ahora lo que haremos ser agregar un mensaje de bienvenida al usuario logueado, adems de un enlace para que ste mismo cierre su sesin:

Al inicio de todo el documento HTML de nuestras pginas agregamos lo siguiente:


<?php session_start(); include('acceso_db.php'); ?> Y en cualquier zona de nuestras pginas insertamos el siguiente cdigo: <?php if(isset($_SESSION['usuario_nombre'])) { ?> Bienvenido: <a href="perfil.php?id=<?=$_SESSION['usuario_id']?>"><strong><?=$_SESSION['usuario_nombre']? ></strong></a><br /> <a href="logout.php">Cerrar Sesin</a> <?php } ?> Cerrando la sesin del usuario: Con este pequeo script cerramos la sesin del usuario, a este archivo lo llamamos logout.php <?php session_start(); include('acceso_db.php'); // inclumos los datos de acceso a la BD // comprobamos que se haya iniciado la sesin if(isset($_SESSION['usuario_nombre'])) { session_destroy(); header("Location: index.php"); }else { echo "Operacin incorrecta."; } ?> Pgina Personal de Usuarios: Ahora pasaremos a crear una pgina personal para cada usuario registrado en el sistema, para ello, mostraremos el perfil de usuario, segn su ID. Creamos un archivo llamado perfil.php

<?php session_start(); include('acceso_db.php'); $perfil = mysql_query("SELECT * FROM usuarios WHERE usuario_id='".$_GET['id']."'") or die(mysql_error()); if(mysql_num_rows($perfil)) { // Comprobamos que exista el registro con la ID ingresada $row = mysql_fetch_array($perfil); $id = $row["usuario_id"]; $nick = $row["usuario_nombre"]; $email = $row["usuario_email"]; $freg = $row["usuario_freg"]; ?> <strong>Nick:</strong> <?=$nick?><br /> <strong>Email:</strong> <?=$email?><br /> <strong>Registrado el:</strong> <?=$freg?><br /> <strong>URL del perfil:</strong> <a href="perfil.php?id=<?=$id?>">Click aqu</a> <?php }else { ?> <p>El perfil seleccionado no existe o ha sido eliminado.</p> <?php } ?>

Pginas restringidas: Como en toda web con sistema de usuarios, siempre habrn zonas restringidas a las que slo podrn acceder usuarios registrados, entonces para ello partimos del siguiente cdigo:
<?php session_start(); include('acceso_db.php'); // inclumos los datos de acceso a la BD // comprobamos que se haya iniciado la sesin if(isset($_SESSION['usuario_nombre'])) { ?> <!-- Aqu ponemos todo el cdigo HTML de nuestra pgina restringida, desde <html> a </html>--> <?php }else { echo "Ests accediendo a una pgina restringida, para ver su contenido debes estar registrado.<br /> <a href='acceso.php'>Ingresar</a> / <a href='registro.php'>Regitrarme</a>"; } ?>

Recuperacin de la contrasea: Si el usuario ha olvidado su contrasea, habr que facilitrsela, para ello generaremos una nueva contrasea de forma aleatoria y se la enviaremos a su correo, a este archivo lo llamaremosrecuperar_contrasena.php
<?php include('acceso_db.php'); // inclumos los datos de acceso a la BD if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos del formulario if(empty($_POST['usuario_nombre'])) { echo "No ha ingresado el usuario. <a href='javascript:history.back();'>Reintentar</a>";

}else { $usuario_nombre = mysql_real_escape_string($_POST['usuario_nombre']); $usuario_nombre = trim($usuario_nombre); $sql = mysql_query("SELECT usuario_nombre, usuario_clave, usuario_email FROM usuarios WHERE usuario_n ombre='".$usuario_nombre."'"); if(mysql_num_rows($sql)) { $row = mysql_fetch_assoc($sql); $num_caracteres = "10"; // asignamos el nmero de caracteres que va a tener la nueva contrasea $nueva_clave = substr(md5(rand()),0,$num_caracteres); // generamos una nueva contrasea de forma aleatoria $usuario_nombre = $row['usuario_nombre']; $usuario_clave = $nueva_clave; // la nueva contrasea que se enviar por correo al usuario $usuario_clave2 = md5($usuario_clave); // encriptamos la nueva contrasea para guardarla en la BD $usuario_email = $row['usuario_email']; // actualizamos los datos (contrasea) del usuario que solicit su contrasea mysql_query("UPDATE usuarios SET usuario_clave='".$usuario_clave2."' WHERE usuario_nombre='".$usuari o_nombre."'"); // Enviamos por email la nueva contrasea $remite_nombre = ""; // Tu nombre o el de tu pgina $remite_email = ""; // tu correo $asunto = "Recuperacin de contrasea"; // Asunto (se puede cambiar) $mensaje = "Se ha generado una nueva contrasea para el usuario <strong>".$usuario_nombre."</strong>. La n ueva contrasea es: <strong>".$usuario_clave."</strong>."; $cabeceras = "From: ".$remite_nombre." <".$remite_correo.">rn"; $cabeceras = $cabeceras."Mime-Version: 1.0n"; $cabeceras = $cabeceras."Content-Type: text/html"; $enviar_email = mail($usuario_email,$asunto,$mensaje,$cabeceras); if($enviar_email) { echo "La nueva contrasea ha sido enviada al email asociado al usuario ".$usuario_nombre."."; }else { echo "No se ha podido enviar el email. <a href='javascript:history.back();'>Reintentar</a>"; } }else { echo "El usuario <strong>".$usuario_nombre."</strong> no est registrado. <a href='javascript:history.back();'> Reintentar</a>"; } } }else { ?> <form action="<?=$_SERVER['PHP_SELF']?>" method="post"> <label>Usuario:</label><br /> <input type="text" name="usuario_nombre" /><br /> <input type="submit" name="enviar" value="Enviar" /> </form> <?php } ?> Cambiando la contrasea: Con este script, los usuarios podrn cambiar su contrasea, a este archivo lo llamaremoscambiar_contrasena.php

<?php session_start(); include('acceso_db.php'); // inclumos los datos de conexin a la BD if(isset($_SESSION['usuario_nombre'])) { // comprobamos que la sesin est iniciada if(isset($_POST['enviar'])) { if($_POST['usuario_clave'] != $_POST['usuario_clave_conf']) { echo "Las contraseas ingresadas no coinciden. <a href='javascript:history.back();'>Reintentar</a>"; }else { $usuario_nombre = $_SESSION['usuario_nombre']; $usuario_clave = mysql_real_escape_string($_POST["usuario_clave"]); $usuario_clave = md5($usuario_clave); // encriptamos la nueva contrasea con md5 $sql = mysql_query("UPDATE usuarios SET usuario_clave='".$usuario_clave."' WHERE usuario_nombre='".$ usuario_nombre."'"); if($sql) { echo "Contrasea cambiada correctamente."; }else { echo "Error: No se pudo cambiar la contrasea. <a href='javascript:history.back();'>Reintentar</a>"; } } }else { ?> <form action="<?=$_SERVER['PHP_SELF']?>" method="post"> <label>Nueva contrasea:</label><br /> <input type="password" name="usuario_clave" maxlength="15" /><br /> <label>Confirmar:</label><br /> <input type="password" name="usuario_clave_conf" maxlength="15" /><br /> <input type="submit" name="enviar" value="Enviar" /> </form> <?php } }else { echo "Acceso denegado."; } ?> Eso sera todo, naturalmente, se puede mejorar aadindole ms cosas, pero para comenzar, puede ser til.

Vous aimerez peut-être aussi