Hola a
todos!! luego de perderme un tiempo por aquí vengo a dejarles un pack completo
de un sistema de usuarios en PHP con ayuda de MySQL que encontré
navegando para aquellos que estén interesados en crear su página web con
usuarios o para aquellos curiosos como yo que quieran ver como es el
funcionamiento y manejo de los usuarios en las páginas web, weno sin más tiempo
que perder empecemos !!!
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`) )
Archivo de configuracion de acceso a MySQL.
Weno una vez
creada nuestra tabla de usuarios crearemos el archivo acceso_db.php en
el cual estará la configuración de nuestra base de datos.
<?php $host_db = ""; // Host de la BD $usuario_db = ""; // Usuario de la BD $clave_db = ""; // Contraseña 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 crearemos en formulario de registro de usuarios, el cual se llamara registro.php<?php include('acceso_db.php'); // incluimos el archivo de conexión a la Base de Datos if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos desde el formulario // creamos una función 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 estén vacíos $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é vacío 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é vacío echo "No haz ingresado contraseña. <a href='javascript:history.back();'>Reintentar</a>"; }elseif($_POST['usuario_clave'] != $_POST['usuario_clave_conf']) { // comprobamos que las contraseñas ingresadas coincidan echo "Las contraseñas 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 válido. <a href='javascript:history.back();'>Reintentar</a>"; }else { // "limpiamos" los campos del formulario de posibles códigos 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();'>Reintentar</a>"; }else { $usuario_clave = md5($usuario_clave); // encriptamos la contraseña ingresada con md5 // ingresamos los datos a la BD $reg = mysql_query("INSERT INTO usuarios (usuario_nombre, usuario_clave, usuario_email, usuario_freg) VALUES ('".$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>Contraseña:</label><br /> <input type="password" name="usuario_clave" maxlength="15" /><br /> <label>Confirmar Contraseña:</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.
A continuación
crearemos el formulario con el cual los usuarios podrán acceder a sus cuentas,
este archivo lo llamaremos acceso.php
<?php session_start(); include('acceso_db.php'); if(empty($_SESSION['usuario_nombre'])) { // comprobamos que las variables de sesión estén vacías ?> <form action="comprobar.php" method="post"> <label>Usuario:</label><br /> <input type="text" name="usuario_nombre" /><br /> <label>Contraseña:</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 } ?>
Comprobar Acceso
El siguiente archivo se encargara de comprobar y verificar los datos ingresado, 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 estén vacíos if(empty($_POST['usuario_nombre']) || empty($_POST['usuario_clave'])) { echo "El usuario o la contraseña no han sido ingresados. <a href='javascript:history.back();'>Reintentar</a>"; }else { // "limpiamos" los campos del formulario de posibles códigos 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_nombre='".$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 campo usuario_id $_SESSION['usuario_nombre'] = $row["usuario_nombre"]; // creamos la sesion "usuario_nombre" y le asignamos como valor el campo usuario_nombre header("Location: acceso.php"); }else { ?> Error, <a href="acceso.php">Reintentar</a> <?php } } }else { header("Location: acceso.php"); } ?>
Mensaje de Bienvenido y cierre de sesión
Ahora lo que
haremos será crear una pagina de ejemplo en la cual se mostrara un mensaje y la
opción de cerrar sesión solamente si el usuario se ha logeado con una cuenta valida,
caso contrario se mostrar las opciones de registrarse e ingresar , este será
nuestro archivo index.php
<?php session_start(); include('acceso_db.php'); ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?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 Sesión</a> <?php }else { ?> <a href="registro.php">Registrarse</a> | <a href="acceso.php">Ingresar</a> <?php } ?> </body> </html>
Cerrar la sesión del usuario
Este es el
archivo que se encarga de cerrar la sesión del usuario , este archivo se
llamara logout.php
<?php session_start(); include('acceso_db.php'); // incluímos los datos de acceso a la BD // comprobamos que se haya iniciado la sesión if(isset($_SESSION['usuario_nombre'])) { session_destroy(); header("Location: index.php"); }else { echo "Operación incorrecta."; } ?>
Perfil del usuario
Ahora crearemos un archivo llamado perfil.php el cual se encargara de mostrar algunos datos del usuario según su ID.<?php session_start(); include('acceso_db.php'); $ident = mysql_real_escape_string($_GET['id']); $perfil = mysql_query("SELECT * FROM usuarios WHERE usuario_id='".$ident."'") 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 } ?>
Pagina restringida
Como en toda web con sistema de usuarios, siempre habrán zonas en la que sólo podrán acceder usuarios registrados, para ello deberemos agregar el siguiente código :<?php session_start(); include('acceso_db.php'); // incluímos los datos de acceso a la BD // comprobamos que se haya iniciado la sesión if(isset($_SESSION['usuario_nombre'])) { ?> <!-- Aquí ponemos todo el código HTML de nuestra página restringida, desde <html> a </html>--> <?php }else { echo "Estás accediendo a una página restringida, para ver su contenido debes estar registrado.<br /> <a href='acceso.php'>Ingresar</a> / <a href='registro.php'>Regitrarme</a>"; } ?>
Recuperación de Contraseña
Si alguna vez
el usuario olvida su contraseña deberemos poder facilitar una nueva contraseña,
la cual será generada aleatoriamente y enviada al correo con el que el usuario
se registro, a este archivo lo llamaremos recuperar_contrasena.php
<?php include('acceso_db.php'); // incluímos 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_nombre='".$usuario_nombre."'"); if(mysql_num_rows($sql)) { $row = mysql_fetch_assoc($sql); $num_caracteres = "10"; // asignamos el número de caracteres que va a tener la nueva contraseña $nueva_clave = substr(md5(rand()),0,$num_caracteres); // generamos una nueva contraseña de forma aleatoria $usuario_nombre = $row['usuario_nombre']; $usuario_clave = $nueva_clave; // la nueva contraseña que se enviará por correo al usuario $usuario_clave2 = md5($usuario_clave); // encriptamos la nueva contraseña para guardarla en la BD $usuario_email = $row['usuario_email']; // actualizamos los datos (contraseña) del usuario que solicitó su contraseña mysql_query("UPDATE usuarios SET usuario_clave='".$usuario_clave2."' WHERE usuario_nombre='".$usuario_nombre."'"); // Enviamos por email la nueva contraseña $remite_nombre = ""; // Tu nombre o el de tu página $remite_email = ""; // tu correo $asunto = "Recuperación de contraseña"; // Asunto (se puede cambiar) $mensaje = "Se ha generado una nueva contraseña para el usuario <strong>".$usuario_nombre."</strong>. La nueva contraseña es: <strong>".$usuario_clave."</strong>."; $cabeceras = "From: ".$remite_nombre." <".$remite_email.">\r\n"; $cabeceras = $cabeceras."Mime-Version: 1.0\n"; $cabeceras = $cabeceras."Content-Type: text/html"; $enviar_email = mail($usuario_email,$asunto,$mensaje,$cabeceras); if($enviar_email) { echo "La nueva contraseña 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 } ?>
Cambiar Contraseña
Por último
crearemos un archivo llamado cambiar_contrasena.php con el cual
los usuarios podrán cambiar su contraseña cuando lo necesiten.
<?php session_start(); include('acceso_db.php'); // incluímos los datos de conexión a la BD if(isset($_SESSION['usuario_nombre'])) { // comprobamos que la sesión esté iniciada if(isset($_POST['enviar'])) { if($_POST['usuario_clave'] != $_POST['usuario_clave_conf']) { echo "Las contraseñas 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 contraseña con md5 $sql = mysql_query("UPDATE usuarios SET usuario_clave='".$usuario_clave."' WHERE usuario_nombre='".$usuario_nombre."'"); if($sql) { echo "Contraseña cambiada correctamente."; }else { echo "Error: No se pudo cambiar la contraseña. <a href='javascript:history.back();'>Reintentar</a>"; } } }else { ?> <form action="<?=$_SERVER['PHP_SELF']?>" method="post"> <label>Nueva contraseña:</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."; } ?>Para aquellos que quieran el archivo ZIP con todos los archivos que hemos visto aqui se los dejo para que puedan descargarlo.
Hasta aquí
seria todo , espero que de alguna manera les haiga ayudado y ya saben cualquier
problema solo comenten y lo más pronto posible les responderé.
Sígueme en facebook
y ayúdame a llegar a más personas
.
https://www.facebook.com/pages/Espacio-Hacker/393964274047994
https://www.facebook.com/pages/Espacio-Hacker/393964274047994
Fuente
http://www.celulaweb.net/2010/07/07/tutorial-sistema-de-usuarios-con-php-y-mysql/
Gracias amigo me sirvio mucho sigue asi espero mas ejemplos
ResponderEliminargracias muy bueno, saludos...
ResponderEliminareso es un registro para personas que ingresen a mi web les agradeceria sus respuestas
ResponderEliminaresta vacan pero no tendras para multiples usuarios, donde cada usuario tenga una cuenta y restricciones por jerarquias(jefe,gerente,secretaria,etc). donde el administrador pueda enviar mensaje a la secretaria y que solo ella pueda verlo, no cualquier usuario logueado, lo mismo para cada cliente,
ResponderEliminarGracias
Hola PorgramerJunior !!! creo que luis ya te habra dado una idea jeje y ya depende de cada uno mejorar este sistema de usuarios añadiendole mas funciones ;)
Eliminaroye man y por ejemplo ahí solo pones un usuario pero y si fueran 20 y 10 de ellos son administradores se que se separa con el else tipo=1 es administrador y lo mandas a otra location bueno es lo que yo te podría decir que agregues lo demás pues por lo que veo esta bien pero esa condición la deberías agregar por ejemplo usuario=1 administrador si es 2 usuario normal y si es 3 es usuario invitado o no registrado y otra cosa no se escribe haiga XD
ResponderEliminarHola Luis !!! si se podría hacer eso que dices pero mi intención en este tutorial es solamente hacer algo básico para aquellos que recién empiezan. La idea de colocarle tipo según sea el usuario es correcta así he visto yo que lo hacen , yo les di el comienzo depende de ustedes mejorarlo ;) ... a y disculpa mi ortografía lo que pasa es que no soy muy weno escribiendo jejejje
EliminarExcelente, excelente. solo me falta probarlo pero es un buen comienzo. Buen aporto.
ResponderEliminarOye ¿De casualidad tendrás otro sistema de usuario, donde la forma de registrase sea con la huella dactilar o con la iris del ojo?
muy bueno y seguro, evita inyeccion sql, gracias por el aporte.
ResponderEliminarummm eso está poderoso
ResponderEliminarExcelente muy bueno muy bueno
ResponderEliminarcomo se podria asignar un id en la url y mostrar un perfil de cada usuario?
ResponderEliminarwww.ejemplo.com/?id=user00215544
Muy buen aporte.
ResponderEliminarMuchas gracias.
gracias !! :D
ResponderEliminarno me envia el email.. me sale "No se ha podido enviar el email. Reintentar" no encuentro el error en recuperar_contrasena.php -
ResponderEliminaramigo una pregunta, a mi no me funciona con un usuario que tenga correo hotmail... porque sera, en gmail si me funcion
ResponderEliminarte hago una pregunta... yo quiero hacer una web en la cual pondria en distintas paginas html galerias fotografias..
ResponderEliminarla cosa es asi... imaginate que tengo 5 usuarios, pero no quiero que cualquiera vea las fotos del usuario 1.. o sea que cuando un usuario se loguee solo pueda ver su galeria personal... como puedo hacer esto??
en pocas palabras lo que quiero hacer es... se loguea juan, y va a parar a la galeria personal de juan... me explique??
Muy bueno el documento. Muchas gracias!
ResponderEliminarbuenass, estoy intentando registrar el usuario y me da un error:
ResponderEliminarAcceso prohibido!
Usted no tiene permiso de accesar al objeto solicitado. El objeto está protegido contra lectura, o no puede ser leído por el servidor.
no se que puedo hacer si alguien puede ayudarme... gracias
genio! volvé con mas magia!!!
ResponderEliminarPOR QUE ME NIEGA EL ACCESO A:
ResponderEliminarhermano muchisimas gracias por tu ejemplo tan completo.... me ha servido todo menos una cosa....
ResponderEliminary es el cambio de contraseña actual del usuario cuando este lo desee.. aqui te dejare el codigo personalisado a ver si puedes encontrar el fallo,,,,
antes que nada te explico cual es el fallo...
cuando voy a donde dice cambiar contraseña y pongo la contraseña actual del usuario cuando le doy a enviar o cambiar esta me da un abiso diciendo que ya a sido coambiada, pero la verdad e que se ha quedado todo como estaba y no se ha cambiado ninguna contraseña en la base de datos..... espero me ayudes
amigo tendrías uno que tenga un modulo para cada usuario, es decir que al loguearse pueda ver solo él el contenido que se le asigne...
ResponderEliminarExcelente aporte. Muy agradecido por el empuje y por compartir la experiencia. Saludos
ResponderEliminarsaludos gracias por el aporte
ResponderEliminarHola amigos! disculpen por no responder los comentarios pero e estado un largo tiempo perdido por mi blog, sobre los errores que pudieran haber los vere en el transcurso de la semana. Mil disculpas por responder tan tarde pero se los recompensare con nuevos tutoriales. Gracias.
ResponderEliminargracias es justo lo que buscaba
ResponderEliminarMuy Bueno! espero poder adaptarlo a mysqli!
ResponderEliminarmuchas gracias
Sos un grande boludo tanto buscaba este ejemplo y vos son tremendo, gracias por compartir tus conocimientos SOS GRANDE :)
ResponderEliminarHola maestro. muy bueno estos archivos, funciona perfecto todo, menos la pagina de perfil ,,.. que puede estar mal, la verdad esto es demasiado para mi, no entiendo ja. alguien me ayuda?
ResponderEliminarRealmente, una maravilla, hace una semana que pruebo codigos, y este resulto, al menos la parte de insercion en la base de datos de los usuarios, lo unico que no puedo iniciar sesion, pero eso es algo menor, al menos ya puedo registrar gente.... sigo intentando. sos un genio
ResponderEliminarAmigo gracias por tu aporte. Solo quiero hacerte una corrección no se dice ni se escribe haiga esta palabra como tal no existe, la correcta es Haya del verbo haber. Bendiciones y de nuevo muchas gracias y lo animo a que siga compartiendo tus conocimientos.
ResponderEliminarFelicitaciones!!!! el mejor scripts que he visto
ResponderEliminar