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 Foro o visiten http://www.php.net ahi podran buscar lo que significa cada sentencia, bueno los dejo con esto que les prepare.
Si ya te la sabes, de una vez bajatelo ñaja!
Sistema de Usuarios
Paso 1Crear 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.
-
CREATE TABLE usuarios (
-
`id` TINYINT(4) AUTO_INCREMENT,
-
`nombre` TEXT,
-
`apaterno` TEXT,
-
`amaterno` TEXT,
-
`login` CHAR(40),
-
`password` CHAR(20),
-
`email` TEXT,
-
UNIQUE (id) );

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

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.
-
<? $server="localhost"; /* Nuestro server mysql */
-
$database="fu000207_pruebas"; /* Nuestra base de datos */
-
$dbpass="password"; /*Nuestro password mysql */
-
$dbuser="fu000207_usuario"; /* Nuestro user mysql */
-
?>
Paso 5Es hora de crear el archivo crea_usuarios.php. El formulario nos avento las variables ahora solo hay que cacharlas jajaja, bueno para atraparlas utilizaremos la veriable de servidor $_POST una ves atrapado se lo asignamos a una nueva variable, algo asi $login = $_POST['login']; 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: SELECT * FROM usuarios WHERE login='$login' la cual nos dice: Selecciona todos los campos(*) de la tabla usuarios donde el campo login sea igual al valor de nuestra variable login, 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 en funcion de la palabra "semilla" ahora introduciremos los valores de las variables en la base de datos, la instruccion es : INSERT INTO usuarios (login, nombre, apaterno, amaterno, password, email) VALUES ('$login','$nombre','$apaterno', '$amaterno','$pass1','$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($link)) 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.
-
<? include("config.php"); /*Traemos el archivo config*/
-
/*Recibimos las variables por el metodo POST*/
-
$login = $_POST['login'];
-
$pass1 = $_POST['pass1'];
-
$pass2 = $_POST['pass2'];
-
$nombre= $_POST['nombre'];
-
$apaterno= $_POST['apaterno'];
-
$amaterno= $_POST['amaterno'];
-
$email = $_POST['email'];
-
/*Hacemos la consulta */
-
$query="SELECT * FROM usuarios WHERE login='$login'";
-
echo "El usuario ya existe en la BD";
-
} else {
-
/* Ahora comprovamos que los dos pass coinciden */
-
if($pass1!=$pass2) {
-
echo "Los passwords deben coincidir
-
";
-
echo 'Clica <a href="http://www.sectorweb.net/form.html">aquí</a> para volver al formulario';
-
} else {
-
/* Encripatmos el password, con la clave "semilla" */
-
$query="INSERT INTO usuarios (login, nombre, apaterno, amaterno, password, email) VALUES ('$login','$nombre','$apaterno', '$amaterno','$pass1','$email')";
-
echo "Usuario introducido correctamente";
-
} else {
-
echo "Error introduciendo el usuario";
-
} /* Cierre del else */
-
} /* Cierre del else que corresponde a if(mysql_affected_rows.....) */
-
} /* Cierre del else que corresponde a if(mysql_num_rows...) */
-
?>
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.
-
} else {
-
/* Cerramos la parte de codigo PHP porque vamos a escribir bastante HTML y nos será mas cómodo así que metiendo echo's */
-
?>
-
-
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-
<h1>Identificación</h1>
-
<form action="comprueba.php" method="post" class="miform"> Login:
-
<input name="login" type="text" />Password:
-
<input name="pass" type="password" /> <input value="Entrar" class="boton" type="submit" /> </form>} /* Y cerramos el else */
-
?>

Paso 8Crear el archivo comprueba.php este recibira las dos variables por el metodo POST, hara la consulta y si devuelve un valor igual a 0 osea ningun usuario enviara un mensaje diciendo que no existe ese usuario y si no comprueba si el password encriptado con la palabra semilla es igual con el que esta en la base de datos si si 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 y si el password no es correcto envia un mensaje de password incorrecto .
-
include("config.php");
-
$login = $_POST['login'];
-
$pass = $_POST['pass'];
-
$query="SELECT * FROM usuarios WHERE login='$login'";
-
echo "No existe el login introducido";
-
} else {
-
/* 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. */
-
$_SESSION["login"]=$login;
-
$_SESSION["nombre"]=$array["nombre"];
-
$_SESSION["apaterno"]=$array["apaterno"];
-
$_SESSION["amaterno"]=$array["amaterno"];
-
-
} else {
-
echo "Password incorrecto!";
-
} /* Cerramos este ultimo else */
-
} /* Cerramos el else que corresponde a la comprobación de que el login existe */
-
-
?>
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

Paso 9Crear la pagina de logout.php este se encargara de cerrar la sesion
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!
Foro seguro ahi respondemos tus dudas, unete y se parte de esta comunidad.


Daniel N
el 25 Ene 2008 a las 0:31 #Buenas amigo, mira me parece excelente tu material. Lo probe y me dio el siguiente error:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Documents and Settings\Daniel\Escritorio\AppServ\www\sesion\crea_usuarios.php on line 16
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\Documents and Settings\Daniel\Escritorio\AppServ\www\sesion\crea_usuarios.php on line 19
Usuario introducido correctamente
No tengo idea xq me sale eso. Si me puedes ayudar, te lo agradezco. Gracias
christian
el 26 Ene 2008 a las 1:24 #exceltne tutorial, muy entendible, gracias.
mas bien un favor, podrias hacer un TUTORIAL DE UN FORMULARIO DE LLENADO? osea que alguien entre a un formulario, llene su nombre, apellido, telefono y que ponga el comentario y qeu ese comentario llegue a un correo x?
SALUDOS
gabriel
el 17 Feb 2008 a las 19:57 #Indigo
el 19 Feb 2008 a las 6:28 #Hola,
acabo de ver tu código, y creo que podrías mejorar una cosa. La cuestión es que diferencias entre login introducido y el password. Así estas dando demasiadas pistas a un posible ataque. Primero se trata de cazar un login y luego a por el password. Yo te recomendaría es que es que mensaje fuera el mismo, tal y como es en casi todos los sitios web donde tienes que autenticarte.
Saludos.
Xombra
el 19 Feb 2008 a las 14:31 #La función mysql_db_query es obsoleta, según el manual de php.net es mejor emplear: mysql_select_db y mysql_query.
además hay que sanitizar los valores que recibes $_POST antes de escribir/leer y/o actualizar usando por ejemplo: htmlentities() y otras funciónes, una buena forma de emplear una sanitización es usando por ejemplo esto en la línea 5 de comprueba.php:
$query = sprintf("SELECT * FROM usuarios WHERE login='%s'",
mysql_real_escape_string($login));
La misma es recomendada para insert-select y delete
También es recomendable usar MD5() en usar de crypt().
Por lo demás está bastante bien
J.F.
el 20 Feb 2008 a las 8:19 #Vaya, lo siento me parece que para ir aprendiendo tu código está bien, pero es bastante poco seguro. Está bien el uso de comillas simple para las variables, pero también hay funciones como mysql_real_escape_string, magicquotes, etc. No estoy seguro, pero creo que es posible realizar inyección SQL. Tampoco te recomiendo que sues el * para realizar SELECTS, simplemente pon los nombres de los campos que vaya a necesitar, si en un futuro amplías la tabla ralentizarías la aplicación. Te recomiendo que le eches un vistazo a éste artículo sobre inyección SQL.
Un saludo.
Rodrigo-Λzul
el 20 Feb 2008 a las 18:53 #Gracias Indigo, Xombra, J.F. me da gusto recibir este tipo de comentarios tan constructivos y de calidad, tener en cuenta el aspecto de la seguridad es muy importante , asi como optimizar la velocidad de las consultas, espero que podamos ser webs amigas, a ver si me pueden agregar para echarnos una platica mi msn es: azul.rejected@gmail.com
Titox
el 28 Feb 2008 a las 23:39 #muchas gracias hermano... veo que estas usando el mismo sistema de bd el cual es el de iespana..... una pregunta.. ¿Tengo que colocarle localhost y subir mis archivo a iespana? o colocarle el link que me de iespana?? Adios..
oswaldo
el 25 Mar 2008 a las 1:07 #Muchas gracias hermano!!!
Me ayudo un buen tu tutorial!!!
Un saludo
blk*
el 07 Abr 2008 a las 11:50 #hola muy bien explicado el tutorial...
pero necesito un favor necesito un TUTORIAL donde pueda llenar un formulario algun usuario... que al momento que entre a el formulario, llene su nombre,telefono,contraseña, etc. y que deje algun comentario y que ese comentario llegue a un correo cualquiera...
gracias y saludos
rosaura
el 11 Abr 2008 a las 17:27 #Hola...
soy nueva y tengo una duda..
tengo un textfield donde teclean el nombre por ejemplo "juan" y en mi base de datos tengo "luis juan" y no me lo toma en cuenta, como puedo hacerle para que me saque una lista de todos los "juan" que encuentre.....
please ....
DArio
el 11 Abr 2008 a las 20:35 #ES MUY BUENO ESTE LOGIN PERO... COMO HAGO PARA QUE OTROS QUE SE LOGUEEN VEAN LOS USUARIOS QUE ESTAN ON LINE ES NA.. MAS PERO LO DEMAS ESTA BACAN,,
JEJJE PORFAAAA MI CORREO ES
SE PUEDE AGREGAR ESA OPCION ==?? PORFA AYUDENME
O_o-_-I@HOTMAIL.COM
Gerar
el 26 Abr 2008 a las 0:19 #Por qué cuando, en el paso 6, intento registrar un usuario para ver si funciona, siempre se traba en "Los passwords deben coincidir..."?
Alguna ayuda?

Gerar
el 26 Abr 2008 a las 0:27 #Ya lo arreglé :P
La línea nº 19 del crea_usuarios.php es:
if($pass1=!$pass2) {
en vez de:
if($pass1!=$pass2) {Gracias por el tutorial, un gran logro para mí, ya que no sé nada de php...
mauricio
el 02 May 2008 a las 21:25 #hola gracias por el tutorial..pero me da el el siguiente error cuando pongo enviar consulta ma aperece la pagina de crea_usuarios y no me aparece enla base de datos nada...porfavor ayuda gracias..
Fernando
el 07 Jun 2008 a las 1:39 #Se podría una vez entrado el usuario rediccionarlo a una página concreta, como a una página personal. Cada usuario a la suya. Estas direcciones podrían estar guardadas en la base de datos pero no sé como acceder a ellas y rediccionar al usuario.
Gracias.
jo
el 15 Jun 2008 a las 23:10 #hjlkhjhnjkhnj
Opinate
el 16 Jun 2008 a las 20:19 #Visiten mi Blog..!!
HTTP://WWW.OPINATE.COM.AR/
AntoniO
el 08 Jul 2008 a las 21:03 #ME PARECE MUY BUENO QUE AYUDES A LOS QUE NO SABEN!!
CHEVERE HERMANO!
QUE VIVA EL SOFTWARE LIBRE!
SALUDOS!