Header Ads

Header ADS

Como hacer un sistema de usuarios con PHP y MySQL

Desde hace ya un buen tiempo queria hacer un tutorial de php y mysql pero la falta de tiempo y algunos imprevistos me lo habian impedido, en este tutorial aprenderan algunas cosas basicas y no tan basicas de lo que es php y mySQL, jugaran con html y php, aprenderan a usar las tablas y bases de datos, todo en este tutorial, espero no haber hecho mal jijiji de todos modos cualquier duda o problema por favor comentenlo en el blog o visiten http://www.php.net ahi podran buscar lo que significa cada sentencia, bueno los dejo con esto que les prepare.





DESCARGAR SISTEMA DE USUARIOS



Crear una base de datos, desde tu panel de administración, asignarle un usuario y un password.
Paso 2Ingresar a phpMyAdmin, seleccionar la base de datos que creamos ir al menu superios SQL y ejecutar la siguiente consulta o el .sql que viene en la carpeta, para crear la tabla usuarios.
MySQL:
  1. CREATE TABLE usuarios(
  2. `id` INT( 4 ) NOT NULL AUTO_INCREMENT ,
  3. `nombre` TEXT,
  4. `apaterno` TEXT,
  5. `amaterno` TEXT,
  6. `login` VARCHAR( 40 ) NOT NULL ,
  7. `password` VARCHAR( 80 ) NOT NULL ,
  8. `email` TEXT,
  9. UNIQUE KEY ( id )
  10. );
** La imagen acontinuacion varia ya que han sido actualizado algunos valores
Paso 3Una ves creada la tabla, creamos nuestro archivo de registro el cual llamaremos form.html, tendra un formulario con los siguientes campos y este se encargara de enviar todas las variables por el metodo POST al archivo crea_usuarios.php (las variables son el parametro que tiene nane= en cada input). El metodo POST es usado para pasar variables sin que nadie las vea hagan de cuenta que las pasa por debajo y el metodo GET las pasa por medio de la URL ejemplo: http://www.sectorweb.net/post.php?action=edit&post=73
HTML:
  1. <form action="crea_usuarios.php" method="post"> Login(nick):
  2. <input name="login" type="text" /></form> <form action="crea_usuarios.php" method="post">Password:
  3. <input name="pass1" type="password" /></form> <form action="crea_usuarios.php" method="post">Repite Password:
  4. <input name="pass2" type="password" />Nombre:
  5. <input name="nombre" type="text" />Apellido Paterno:
  6. <input name="apaterno" type="text" />Apellido Materno:
  7. <input name="amaterno" type="text" />E-mail:
  8. <input name="email" type="text" /> <input name="Crear" type="submit" /> </form>
Paso 4Configurar nuestro archivo config.php el cual contiene todos los datos de autentificacion de nuestra base de datos, solo hay que asignarle a las variables los datos de la base de datos el usuario y la contraseña y el server que casi siempre es localhost.
PHP:
  1. &lt;? $server="localhost"/* Nuestro server mysql */
  2. $database="fu000207_pruebas"/* Nuestra base de datos */
  3. $dbpass="password"/*Nuestro password mysql */
  4. $dbuser="fu000207_usuario"/* Nuestro user mysql */
  5. ?&gt;
Paso 5Es hora de crear el archivo crea_usuarios.php. El formulario nos avento las variables ahora solo hay que cacharlas, bueno para atraparlas utilizaremos la veriable de servidor $_POST una ves atrapado se lo asignamos a una nueva variable, algo asi $login = htmlspecialchars(trim($_POST['login'])); eliminamos espacios con trim y caracteres especiales con htmlspecialshars, aqui ya tenemos el valor del nick dentro de la variable $login, una ves hecho eso con todas las varibles asiganmos a la variable $query la siguiente consulta: $query = sprintf("SELECT login FROM usuarios WHERE usuarios.login='%s'",mysql_real_escape_string($login)); la cual nos dice:  Selecciona el campo login de la tabla usuarios donde el campo login sea igual al valor de nuestra variable login(se le añade la funcion mysql_real_escape_string() esta escapa cualquier tipo de caracter con el que se pueda hacer una inyeccion SQL o que afecte la integridad de nuestros datos), hacemos nuestra conexion y se la asiganmos a la variable $link ahora detonamos la consulta y la almacenamos en $result hecho esto hacemos la siguiente decisión: if(mysql_num_rows($result)) la cual nos devolvera un valor boleano (verdadero o falso) si es verdadero significa que encontro al menos un elemento en la base de datos que coincide con nuestra variable $login, esto significa que ya hay un usuario con ese nick entonces envia un mensaje pidiendo cambiar el nick, si no existe nadie en la base de datos entonces hay que comparar si las variables del password coinciden o no, si no coinciden envia un mensaje de alerta y si si son iguales encripta el password con la funcion MD5 ahora introduciremos los valores de las variables en la base de datos, la instruccion es : $query  =  sprintf("INSERT INTO usuarios (login, nombre, apaterno, amaterno, password, email) VALUES ('%s','%s','%s', '%s','%s','%s')",mysql_real_escape_string($login),mysql_real_escape_string($nombre),
mysql_real_escape_string($apaterno),mysql_real_escape_string($amaterno),mysql_real_escape_string($pass1),   mysql_real_escape_string($email));
 y se la asignamos a la variable $query, la cual nos dice Insertar en la tabla usuarios en el campo login,nombre,apaterno,amaterno,password,email los valores de las variables $login,$nombre,$apaterno, $amaterno,$pass1,$email, cabe mencionar que hay que revisar el orden que tienen y que coincidan los campos con las variables, comunmente no inserta por ese detalle, ahora ejecutamos esa instruccion y la almacenamos en $result ahora hacemos la siguiente decision: if(mysql_affected_rows()) el cual nos devuelvera el número de filas afectadas en la ultima sentencia INSERT si es mayor a 0 entonces devolvera true, y enviara el mensaje que se introducieron y si no enviara que hubo error.
Parte de codigo mejorada por el Team en seguridad informatica Xombra (Y)
PHP:
  1. &lt;?php
  2. // modificacion de codigo Xombra (www.xombra.com) 21/03/2009 para sectorweb.net
  3. include("config.php")/*Traemos el archivo config*/
  4. /*Recibimos las variables por el metodo POST*/
  5. $login = htmlspecialchars(trim($_POST['login']));
  6. $pass1 = trim($_POST['pass1']);
  7. $pass2 = trim($_POST['pass2']);
  8. $nombrehtmlspecialchars(trim($_POST['nombre']));
  9. $apaternohtmlspecialchars(trim($_POST['apaterno']));
  10. $amaternohtmlspecialchars(trim($_POST['amaterno']));
  11. $email = htmlspecialchars(trim($_POST['email']));
  12. /*Hacemos la consulta */
  13. // $query="SELECT * FROM usuarios WHERE login='$login'"; //ANTES
  14. $link=mysql_connect($server,$dbuser,$dbpass);
  15. $query = sprintf("SELECT login FROM usuarios WHERE usuarios.login='%s'",  // Ahora
  16. $result=mysql_db_query($database,$query,$link);
  17. if(mysql_num_rows($result)){
  18. echo "El usuario ya existe en la BD";
  19. } else {
  20. /* Ahora comprovamos que los dos pass coinciden */
  21. if($pass1!=$pass2) {
  22. echo "Los passwords deben coincidir";
  23. echo 'Click &lt;a href="form.html"&gt;aquí&lt;/a&gt; para volver al formulario';
  24. } else {
  25. /* Encriptamos "Ciframos" el password
  26. // $pass1=crypt($pass2, "semilla"); // ANTES */
  27. $pass1=sha1(md5($pass1))// Ahora
  28. /* $query="INSERT INTO usuarios (login, nombre, apaterno, amaterno, password, email) VALUES ('$login','$nombre','$apaterno', '$amaterno','$pass1','$email')"; */  // Antes
  29. $query  =  sprintf("INSERT INTO usuarios (login, nombre, apaterno, amaterno, password, email) VALUES ('%s','%s','%s', '%s','%s','%s')",  // Ahora
  30. $result=mysql_db_query($database,$query,$link);
  31. echo "Usuario introducido correctamente";
  32. } else {
  33. echo "Error introduciendo el usuario";
  34. } /* Cierre del else */
  35. } /* Cierre del else que corresponde a if(mysql_affected_rows.....) */
  36. } /* Cierre del else que corresponde a if(mysql_num_rows...) */
  37. ?&gt;
Paso 6Parece que si ingreso los datos, pero vamos a comprobarlo de todos modos, para eso vamos a phpMyAdmin seleciconamos nuestra base de datos clicleamos en el recuadro que esta junto a la tabla y automaticamente nos trae todos los datos introducidos en esa tabla. Si no hay nada verifica que hiciste bien tu INSERT INTO y que tus variables tengan valores
Paso 7Vamos a hacer nuestra pagina de login.php, primero verificamos si ya esta iniciada la sesión, si si entonces redirecciona a la pagina user.php que acontinuacion crearemos, si no se a iniciado la sesión entonces imprime el formulario el cual enviara todos los datos a comprueba.php el cual se encargara de revisar si esta en la base de datos.
PHP:
  1. &lt;? session_start();
  2. if(isset($SESSION)){
  3. header("location:user.php")/* Si ha iniciado la sesion, vamos a user.php */
  4. } else {
  5. /* Cerramos la parte de codigo PHP porque vamos a escribir bastante HTML y nos será mas cómodo así que metiendo echo's */
  6. ?&gt;</p>
  7. <h1>Identificación</h1>
  8. <form class="miform" action="comprueba.php" method="post"> Login:
  9. <input name="login" type="text" />Password:
  10. <input name="pass" type="password" /> <input class="boton" type="submit" value="Entrar" /> </form>} /* Y cerramos el else */
  11. ?&gt;
Paso 8Crear el archivo comprueba.php este recibira las dos variables por el metodo POST les quitara espacios y caracteres especiales, encriptamos en md5 el password para despues poderlo comparar, ejecutamos la consulta asi:  $query = sprintf("SELECT usuarios.login,usuarios.nombre,usuarios.apaterno,usuarios.amaterno,usuarios.email FROM usuarios WHERE usuarios.login='%s' && usuarios.password = '%s'",mysql_real_escape_string($login),mysql_real_escape_string($pass)); y si devuelve un valor igual a 1 significa que encontro el user y el pass, entonces inica la session y le pasa las variables que ocuparemos a nuestra variable de servidor $_SESSION["nombre"]=$array["nombre"]; $array contiene un arreglo con los campos de ese usuario y hace un redireccionamiento al archivo user.php, si no enviara un mensaje diciendo que no existe ese usuario y si no  y si el password no es correcto envia un mensaje de password incorrecto .
Parte de codigo mejorada por el Equipo en Seguridad Informatica Xombra (Y)
PHP:
  1. &lt;?php session_start();
  2. // modificacion de codigo Xombra (www.xombra.com) 21/03/2009 para sectorweb.net
  3. include("config.php");
  4. $login = htmlspecialchars(trim($_POST['login']));
  5. $pass = sha1(md5(trim($_POST['pass'])))// encriptamos en MD5 para despues comprar (Modificado)
  6. // $query="SELECT * FROM usuarios WHERE login='$login'"; Antes
  7. $link=mysql_connect($server,$dbuser,$dbpass);
  8. $query = sprintf("SELECT usuarios.login,
  9. usuarios.nombre,
  10. usuarios.apaterno,
  11. usuarios.amaterno,
  12. usuarios.email
  13. FROM usuarios WHERE usuarios.login='%s' &amp;&amp; usuarios.password = '%s'",  // Ahora
  14. $result=mysql_db_query($database,$query,$link);
  15. // if(mysql_num_rows($result)==0){ // antes
  16. if(mysql_num_rows($result)){ // nos devuelve 1 si encontro el usuario y el password
  17. $array=mysql_fetch_array($result);
  18. //  if($array["password"]==crypt($pass,"semilla") ){ // Antes
  19. /* Comprobamos que el password encriptado en la BD coincide con el password que nos han dado al encriptarlo. Recuerda usar semilla para encriptar los dos passwords. */
  20. $_SESSION["login"]=$array["login"];
  21. $_SESSION["nombre"]=$array["nombre"];
  22. $_SESSION["apaterno"]=$array["apaterno"];
  23. $_SESSION["amaterno"]=$array["amaterno"];
  24. $_SESSION["email"]=$array["email"]// Agrgado Nuevo
  25. header("Location:user.php");
  26. }  else {
  27. echo "Login o Password Incorrectos");  // Ahora
  28. }
  29. ?&gt;
Paso 8Crear la pagina de user.php este contendra las variables que le pasamos desde el archivo comprueba.php y solo sera visto por usuarios que se hayan identificado correctamente, primero comprueba si se a iniciado sesion si no redirecciona a login y si si imprime el contenido para el usuario
PHP:
  1. &lt;? session_start();
  2. if(!isset($_SESSION)){
  3. header("location:login.php");
  4. } else {
  5. echo "";
  6. echo "
  7. <h1>SectorWeb.net</h1>
  8. ";
  9. echo "Bienvenido al Area de usurios: <strong>";
  10. echo $_SESSION["nombre"]." ".$_SESSION["apaterno"]." ".$_SESSION["amaterno"]." ";
  11. echo "</strong>
  12. Has entrado con el nick: <strong> ";
  13. echo $_SESSION["login"];
  14. echo "</strong>
  15. Para cerrar la sesión, pulsa: <a href="http://www.sectorweb.net/logout.php">Aqui</a>";
  16. echo "";
  17. }
  18. ?&gt;
Paso 9Crear la pagina de logout.php este se encargara de cerrar la sesion
PHP:
  1. &lt;? session_start();
  2. if(!isset($_SESSION)){
  3. header("location:login.php");
  4. } else {
  5. echo "
  6. <h1>SectorWeb.net</h1>
  7. ";
  8. echo "Las variables de sesión han sido eliminadas, y la sesión se ha dado por finalizada correctamente da click <a href="http://www.sectorweb.net/%5C%22login.php%5C%22">aqui para loguearte</a>";
  9. }
  10. ?&gt;

3 comentarios:

Con tecnología de Blogger.