Sei sulla pagina 1di 10

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 favorcomentenlo en el Foro o visiten http://www.php.net ahi podran buscar lo que significa cada sentencia, bueno los dejo con esto que les prepare. El tutorial ha sido actualizado! se recibieron mejoras departe del equipo Xombra, evitando asi inyeccciones SQL y mejorando el codigo en gran medida un saludo para ellos por haberlo mejorado!!

Si ya te la sabes, de una vez bajatelo!

Sistema de Usuarios Actualizado

Paso 1 Crear una base de datos, desde tu panel de administracin, asignarle un usuario y un password.

Paso 2 Ingresar 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. Ver codigo en Texto - Recomendable

MySQL: 1. 2. 3. 4. 5. 6. 7. 8. CREATE TABLE usuarios( `id` INT( 4 ) NOT NULL AUTO_INCREMENT , `nombre` TEXT, `apaterno` TEXT, `amaterno` TEXT, `login` VARCHAR( 40 ) NOT NULL , `password` VARCHAR( 80 ) NOT NULL , `email` TEXT,

9. UNIQUE KEY ( id ) 10. );

** La imagen acontinuacion varia ya que han sido actualizado algunos valores

Paso 3 Una 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 Ver codigo en Texto - Recomendable

HTML: 1. <form action="crea_usuarios.php" method="post"> Login(nick): 2. 3. <input name="login" type="text" /></form> <form action="crea_usuari os.php" method="post">Password: 4. 5. <input name="pass1" type="password" /></form> <form action="crea_us uarios.php" method="post">Repite Password: 6. 7. <input name="pass2" type="password" />Nombre: 8. 9. <input name="nombre" type="text" />Apellido Paterno: 10. 11. <input name="apaterno" type="text" />Apellido Materno: 12. 13. <input name="amaterno" type="text" />E-mail: 14. 15. <input name="email" type="text" /> <input name="Crear" type=" submit" /> </form>

Paso 4 Configurar 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 contrasea y el server que casi siempre es localhost. Ver codigo en Texto - Recomendable

PHP: 1. 2. 3. 4. 5. &lt;? $server="localhost"; /* Nuestro server mysql */ $database="fu000207_pruebas"; /* Nuestra base de datos */ $dbpass="password"; /*Nuestro password mysql */ $dbuser="fu000207_usuario"; /* Nuestro user mysql */ ?&gt;

Paso 5 Es 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 aade 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 decisin: 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($pas s1), 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 nmero 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 Ver codigo en Texto - Recomendable

PHP: 1. &lt;?php 2. // modificacion de codigo Xombra (www.xombra.com) 21/03/2009 para sectorweb.net 3. 4. include("config.php"); /*Traemos el archivo config*/ 5. 6. /*Recibimos las variables por el metodo POST*/ 7. 8. $login = htmlspecialchars(trim($_POST['login'])); 9. 10. $pass1 = trim($_POST['pass1']); 11. 12. $pass2 = trim($_POST['pass2']); 13. 14. $nombre= htmlspecialchars(trim($_POST['nombre'])); 15. 16. $apaterno= htmlspecialchars(trim($_POST['apaterno'])); 17. 18. $amaterno= htmlspecialchars(trim($_POST['amaterno'])); 19. 20. $email = htmlspecialchars(trim($_POST['email'])); 21. 22. /*Hacemos la consulta */ 23. 24. // $query="SELECT * FROM usuarios WHERE login='$login'"; //ANTES 25. 26. $link=mysql_connect($server,$dbuser,$dbpass); 27. 28. $query = sprintf("SELECT login FROM usuarios WHERE usuarios.login='%s'", // Ahora 29. mysql_real_escape_string($login)); 30.

31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58.

$result=mysql_db_query($database,$query,$link); if(mysql_num_rows($result)){ echo "El usuario ya existe en la BD"; } else { mysql_free_result($result); /* Ahora comprovamos que los dos pass coinciden */ if($pass1!=$pass2) { echo "Los passwords deben coincidir"; echo 'Click &lt;a volver al formulario'; } else { /* Encriptamos "Ciframos" el password // $pass1=crypt($pass2, "semilla"); // ANTES */ $pass1=sha1(md5($pass1)); // Ahora /* $query="INSERT INTO usuarios (login, nombre, apaterno, amaterno, password, email) VALUES ('$login','$nombre','$apaterno', '$amaterno','$pass1','$email')"; */ // Antes href="form.html"&gt;aqu&lt;/a&gt; para

59. 60.

$query = sprintf("INSERT INTO usuarios (login, nombre, apaterno, amaterno, password, email) VALUES ('%s','%s','%s', '%s','%s','%s')", // Ahora 61. mysql_real_escape_string($login), mysql_real_escape_string( $nombre), 62. mysql_real_escape_string($apaterno),mysql_real_escape_string( $amaterno), 63. mysql_real_escape_string($pass1), mysql_real_escape_string( $email)); 64. 65. 66. $result=mysql_db_query($database,$query,$link); 67. 68. if(mysql_affected_rows()){ 69. 70. echo "Usuario introducido correctamente"; 71. 72. } else { 73. 74. echo "Error introduciendo el usuario"; 75. 76. } /* Cierre del else */

77. 78. 79. 80.

} /* Cierre del if(mysql_affected_rows.....) */

else

que

corresponde

} /* Cierre del else que corresponde a if(mysql_num_rows...) */

81. 82.

?&gt;

Paso 6 Parece 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 7 Vamos a hacer nuestra pagina de login.php, primero verificamos si ya esta iniciada la sesin, si si entonces redirecciona a la pagina user.php que acontinuacion crearemos, si no se a iniciado la sesin 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. Ver codigo en Texto - Recomendable

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 cmodo as que metiendo echo's */ 6. ?&gt;</p>

7. 8. <h1>Identificacin</h1> 9. <form class="miform" action="comprueba.php" method="post"> Login: 10. 11. <input name="login" type="text" />Password: 12. 13. <input name="pass" type="password" /> <input class="boton" type="submit" value="Entrar" /> </form>} /* Y cerramos el else */ 14. ?&gt;

Paso 8 Crear 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 FROM usuarios =

usuarios.login,usuarios.nombre,usuarios.apaterno,usuarios.amaterno,usuarios.email 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 Ver codigo en Texto - Recomendable

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. 5. $login = htmlspecialchars(trim($_POST['login'])); 6. 7. $pass = sha1(md5(trim($_POST['pass']))); // encriptamos en MD5 para despues comprar (Modificado)

8. 9. // $query="SELECT * FROM usuarios WHERE login='$login'"; Antes 10. 11. $link=mysql_connect($server,$dbuser,$dbpass); 12. 13. $query = sprintf("SELECT usuarios.login, 14. usuarios.nombre, 15. usuarios.apaterno, 16. usuarios.amaterno, 17. usuarios.email 18. FROM usuarios WHERE usuarios.login='%s' &amp;&amp; usuarios.password = '%s'", // Ahora 19. mysql_real_escape_string($login),mysql_real_escape_string($pa ss)); 20. 21. $result=mysql_db_query($database,$query,$link); 22. 23. // if(mysql_num_rows($result)==0){ // antes 24. 25. if(mysql_num_rows($result)){ // nos devuelve 1 si encontro el usuario y el password 26. 27. $array=mysql_fetch_array($result); 28. 29. // if($array["password"]==crypt($pass,"semilla") ){ // Antes 30. 31. /* 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. */ 32. 33. $_SESSION["login"]=$array["login"]; 34. 35. $_SESSION["nombre"]=$array["nombre"]; 36. 37. $_SESSION["apaterno"]=$array["apaterno"]; 38. 39. $_SESSION["amaterno"]=$array["amaterno"]; 40. 41. $_SESSION["email"]=$array["email"]; // Agrgado Nuevo 42. 43. header("Location:user.php"); 44. 45. } else { 46. 47. echo "Login o Password Incorrectos"); // Ahora 48. 49. } 50. 51. ?&gt;

Paso 8 Crear 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 Ver codigo en Texto - Recomendable

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 sesin, pulsa: <a href="http://www.sectorweb.net/logout.php">Aqui</a>"; 16. echo ""; 17. } 18. ?&gt;

Paso 9 Crear la pagina de logout.php este se encargara de cerrar la sesion Ver codigo en Texto - Recomendable

PHP: 1. 2. 3. 4. 5. 6. 7. 8. 9. &lt;? session_start(); if(!isset($_SESSION)){ header("location:login.php"); } else { session_unset(); session_destroy(); echo " <h1>SectorWeb.net</h1> ";

10.

echo "Las variables de sesin han sido eliminadas, y la sesin se ha dado por finalizada correctamente da click <a href="http://www.sectorweb.net/%5C%22login.php%5C%22">aqui para loguearte</a>"; 11. } 12. ?&gt;

Con JavaScript,un Captcha y envio de mails puedes hacer esto...pero eso es otra historia! Espero que hayan aprendido un poco de php y mySQL jejeje , dudas y problemas en el foro porfavor!
Espero que te haya gustado este Post! Muchas veces el tiempo me impide responder todos los comentarios, unete al Foro seguro ahi respondemos tus dudas, unete y se parte de esta comunidad.

Potrebbero piacerti anche