1.- Creando la tabla en MySQL
Bien, necesitamos una tabla con los
datos de nuestros usuarios, así que la vamos a crear. Ésta tabla
contiene los siguientes campos:
Código
FIELD | Type | KEY | Extra
----------+-------------+-----+----------------
id | tinyint(4) | PRI | AUTO_INCREMENT
nombre | text | |
apellidos | text | |
login | varchar(40) | |
password | varchar(20) | |
email | text | |
Bien, pues la sentencia SQL que utilizaremos será algo así:
CREATE TABLE usuarios (
id TINYINT(4) AUTO_INCREMENT,
nombre TEXT,
apellidos TEXT,
login VARCHAR(40),
password VARCHAR(20),
email TEXT,
UNIQUE (id) )
2.-Creando un script para introducir usuarios
Necesitamos el formulario, con los campos siguientes:
<form action="crea_user.php" method="POST">
Login: <input type="text" name="login"><br>
Password: <input type="password" name="pass1"><br>
Repite Password: <input type="password" name="pass2"><br>
Nombre: <input type="text" name="nombre"><br>
Apellidos: <input type="text" name="apellidos"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit" name="Crear">
</form>
Y también el script crea_user.php, que sería algo así:
crea_user.php
<?
$server="localhost"; /* Nuestro server mysql */
$database="bd"; /* Nuestra base de datos */
$dbpass="password"; /*Nuestro password mysql */
$dbuser="user"; /* Nuestro user mysql */
/* Primero comprovamos que no existe un usuario con el mismo login ya registrado */
$query="SELECT * FROM usuarios WHERE login='$login'";
$link=mysql_connect($server,$dbuser,$dbpass);
$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<br>";
echo 'Clica <a href="form.php">aquí</a> para volver al formulario';
} else {
$pass1=crypt($pass2, "semilla");
/* Encripatmos el password, con la clave "semilla" que debeis sustituirpor la que mas os guste. Hay otros metodos de encriptacion, mirad en php.net si quereis conocerlos. */
$query="INSERT INTO usuarios (login, nombre, apellidos, password, email) VALUES ('$login','$nombre','$apellidos','$pass1','$email')";
$result=mysql_db_query($database,$query,$link);
if(mysql_affected_rows($link)){
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...) */
?>
Pues como veis, este script es muy
simple. Si no lo entendeis, es porque no conoceis PHP o su método de
acceso a bases de datos mysql. Leeros el prólogo antes de continuar ;-)
Aquí deberíamos comprobar que quien está creando los usuarios está
identificado (en caso de que el registro no sea público).
3.- Creando la página y scripts de login
Ésta parte consiste en dos páginas, la de login, y el script que comprueba los datos. Aquí va la página de login:
login.php
<?
session_start();
if(isset($SESSION)){
header("location: user.php"); /* Si ha iniciado la sesion, vamos a user.php */
} else {
/* Cerramos la parte de codigo PHP porque vamos a escribir bastante HTML y nos será mas cómodo así que metiendo echo's */
?>
<html><head><title>Necesita identificación! </title></head>
<body>
<center><h1>Identificate! :D </h1></center>
<form action="comprueba.php" method="POST">
Login: <input type="text" name="login"><br>
Password: <input type="password" name="pass"><br>
<input type="submit" value="Entrar">
</form>
</body></html>
<?
} /* Y cerramos el else */
?>
Y el que sigue es el script de
comprobación, que comprobará los datos y si son correctos nos manda a
user.php tras iniciar la sesión. Si no, nos dará un mensajito
avisandonos de que no hemos dado el login correcto. Primero os explicaré
las funciones que usaremos.
session_start() se debe usar al principio de cada script en el que vayamos a hacer uso de variables de sesión.
session_register("nombre_variable") se usará para crear una variable de sesión, que luego podremos usar con
el nombre $nombre_variable. Lo
que haremos aquí será primero inicializar las variables como un array, y
luego registrarlas en la sesión.
Ahora el código:
comprueba.php
<?
session_start();
$server="localhost"; /* Nuestro server mysql */
$database="bd"; /* Nuestra base de datos */
$dbpass="password"; /*Nuestro password mysql */
$dbuser="user"; /* Nuestro user mysql */
$query="SELECT * FROM usuarios WHERE login='$login'";
$link=mysql_connect($server,$dbuser,$dbpass);
$result=mysql_db_query($database,$query,$link);
if(mysql_num_rows($result)==0){
echo "No existe el login introducido";
} else {
$array=mysql_fetch_array($result);
if($array["password"]==crypt($pass,"semilla") ){
/* Comprobamos que el password encriptado en la BD coincide con el password que nos han dado al encriptarlo. Recuerda usar la misma semilla para encriptar los dos passwords. */
$SESSION["login"]=$login;
$SESSION["nombre"]=$array["nombre"];
$SESSION["apellidos"]=$array["apellidos"];
session_register("SESSION");
header("location: user.php");
} else {
echo "Password incorrecto!";
} /* Cerramos este ultimo else */
} /* Cerramos el else que corresponde a la comprobación de que el login existe */
?>
4.- Creación de la página de los usuarios
Bien, ésta página la voy a dejar
bastante vacía, solo va a comprobar si el usuario ya se ha
identificado. Si es así, le daremos la bienvenida simplemente, y
pondremos el botón para logout. Si no, le mandaremos a login.php. Ahí va
el código:
user.php
<?
session_start();
if(!isset($SESSION)){
header("location: login.php");
} else {
echo "<html><body>";
echo "Bienvenido ";
echo $SESSION["nombre"];
echo $SESSION["apellidos"]." ";
echo "<br>Has entrado con el nombre de usuario ";
echo $SESSION["login"];
echo "<br>Para cerrar la sesión, pulsa: <a href='logout.php'>logout</a>";
echo "</body></html>";
}
?>
5.- Cerrando la sesión
En el script logout.php simplemente cerraremos la sesión y mostraremos un mensaje indicando que ha
sido cerrada correctamente.
Antes de ésto, comprovaremos que ha sido iniciada la sesión. Si no lo ha
sido, mandaremos al usuario a login.php. Aquí usaremos dos funciones
nuevas:
session_unset() destruye todas las variables de sesión que hemos creado. Debemos llamarla antes de llamar a
session_destroy.
session_destroy() destruye la sesión en sí, pero no destruye las variables.
Ahora sí, aquí os dejo el código:
<?
session_start();
if(!isset($SESSION)){
header("location: login.php");
} else {
session_unset();
session_destroy();
echo "Las variables de sesión han sido eliminadas, y la sesión se ha dado por finalizada correctamente ;-)";
}
?>
Simple verdad? Pues ya tenemos nuestro sistema de usuarios completo!
ALERTA!: En éstos scripts hay algunas cosillas que tendremos que mejorar.
Por ejemplo, hay que mejorar el
manejo de errores de la base de datos. Además, deberíamos incluir
redirecciones hacia login.php tras mostrar los mensajes de logout, de
error al identificarse (tanto de login incorrecto como de password
incorrecto), que lo podríamos hacer con un refresh simple en HTML.
Además de todo ésto, tendríamos
que crear un filtro para los datos introducidos en el login para evitar
la inyección SQL en nuestras páginas. Para el password no sería
necesario, puesto que hemos encriptado la entrada del usuario antes de
pasarsela al MySQL, pero tampoco pasaría nada si, una vez implementado
el filtro, se lo pasamos al password introducido por el usuario.