Log In: Registro de usuarios SQL
Ejemplos y redacción por SoyJoaquin.
Introducción: Este tutorial va dedicado a la creación de un simple Log In de usuarios con SQL para la orientación de aquellos que lo requieran, tratare de hacerlo lo mas explicativo posible para no dejar dudas al respecto.
Pasos a seguir:- Establecer la conexión con el servidor SQL
- Gestionar las tablas SQL que usaremos en el sistema
- Crear el registro del sistema
- Validar datos del Log In
- Desconectar Usuario
Paso #1: Establecer la conexión con el servidor SQLPara empezar nuestro trabajo, tenemos que establecer una conexión con el servidor SQL que usaremos para este sistema, para ello usamos lo siguiente:
mysql_connect(); | | | Es esencial para abrir una conexión SQL, la usaremos con 3 parámetros que son servidor, usuario y contraseña. |
mysql_select_db(); | | | Seleccionara la base de datos especificada asociada al identificador de la conexión establecida. |
Ejemplo de conexión:
<?php
$conectar = mysql_connect('servidor', 'usuario', 'contraseña');
mysql_select_db('nombre_db', $conectar);
?>Nota:
Ademas, podemos usar die(); para mostrar un mensaje de error en caso de que no se pueda establecer la conexión con nuestro servidor.
Paso #2: Gestionar las tablas SQL que usaremos en el sistemaCódigo SQL:CREATE TABLE `usuarios` (
`id` INT auto_increment ,
`usuario` VARCHAR(100) NOT NULL,
`contra` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = MYISAM
Imágenes de procedimiento manual:http://img191.imageshack.us/img191/3471/65160577.pnghttp://img31.imageshack.us/img31/2245/70048404.pnghttp://img813.imageshack.us/img813/9335/37730819.png
Paso #3: Crear el registro del sistemaPara este paso, vamos a montarnos nuestro formulario y validación del registro.
Creación del formulario: Esto es libre, a preferencia de los gustos de cada quien, pero para continuar con la secuencia del tutorial, me adelante a crear una base para tomar como ejemplo en futuros pasos.
Ejemplo del formulario HTML:<form action="" method="post">
<input name="usuario" type="text"><br>
<input name="contra1" type="password"><br>
<input name="contra2" type="password"><br>
<input name="reg" type="submit" value="Registrar">
</form>
Nota: En el formulario pueden notar que agregue 2 campos de contraseña, esto se debe para que el usuario pueda repetir la contraseña escrita para ser validadas después y así de esta forma, se puedan prevenir errores al momento de teclearla.
Validar el registro: En este paso verificaremos los datos enviados por el usuario para ser ingresados a nuestra base de datos.
Para validar el registro tenemos que tener en cuenta los datos que estamos recibiendo, es decir, el
nombre de usuario pasa de alto si no queremos restringir caracteres especiales o realizar una acción especifica,
ambas contraseñas (La contraseña y la validación de la misma) tenemos que comprobar si son iguales, para ello, utilizaremos el operador de comparación "
igual a..." que se representa ==
Ejemplo de operador:$contra1 == $contra2
Nota:
Si son iguales, devuelve TRUE, si son distintas devuelve FALSE.
Otros operadores de comparación que deberías conocer:$a === $b | Identico a... | Si $a es igual a $b y del mismo tipo devuelve TRUE |
$a != $b | Diferente a... | Si $a es diferente a $b devuelve TRUE |
$a !== $b | Distinto a... | Si $a es diferente a $b o no son del mismo tipo devuelve TRUE |
$a < $b | Menor que... | Si $a es menor que $b devuelve TRUE |
$a <= $b | Menor o igual que... | Si $a es menor o igual que $b devuelve TRUE |
$a > $b | Mayor que... | Si $a es mayor que $b devuelve TRUE |
$a >= $b | Mayor o igual que... | Si $a es mayor o igual que $b devuelve TRUE |
SQL:Para el ingreso de los datos es solo cuestión de prestar atención a lo siguiente.
Con lo que nos vamos a manejar por ahora es
SELECT e
INTO.
- SELECT es usado para extraer registros de nuestra conexión activa a la base de datos.
- INTO es usado para ingresar nuevos registros a la tabla seleccionada.
¿Para que usaremos cada una?En la verificación del formulario de registro, usaremos
SELECT para ver si el usuario ya existe, es decir, si ya se encuentra registrado. usamos
INTO para ingresar un nuevo registro con los datos del formulario una vez finalizado el proceso de validación.
¿Como saber si el usuario ya se encuentra registrado?Para saberlo, solo es cuestión de usar
mysql_num_rows(); y comparar con los
operadores de comparación visto anteriormente. Si el resultado que arroja es mayor a 0 es por que ya existe, si el resultado es 0 es por que el nombre de usuario se encuentra disponible.
Nota:
mysql_num_rows(); devuelve el numero de resultados que arrojo la consulta especificada, este lo usaremos junto con SELECT para determinar si el usuario ya existe o no en nuestra base de datos.
Ejemplo de consulta:$query = mysql_query("SELECT * FROM usuarios WHERE usuario='".$usuario_reg."'");
$row = mysql_num_rows($query);
En el ejemplo anterior podrán notar lo siguiente:
- Usamos mysql_query(); para ejecutar la consulta especificada.
- Usamos WHERE para buscar el dato del usuario enviado desde el formulario ($usuario_reg) en el campo usuario ubicado en la tabla usuarios
- Como ya dije, mysql_num_rows(); lo que hará sera devolvernos la cantidad de resultados que arrojo esa consulta.
Es decir, si el valor de
$row es
0, podemos proceder con nuestro registro ya que este usuario o este nombre se encuentra disponible para ser registrado, si
$row es mayor a
0 (
1) quiere decir que ya este nombre de usuario se encuentra en uso, por ende, no podrá continuar el registro y mostraremos un mensaje de error.
Ingresando los datos:Como ya aclare anteriormente, usaremos INTO para introducir un nuevo registro a nuestra tabla
usuarios con los datos del formulario de registro.
Ejemplo para insertar datos:mysql_query("INSERT INTO usuarios (usuario,contra) VALUES ('".$usuario_reg."', '".$contra1_reg."')");
Nota:
Como ya pasamos el proceso para validar si ambas contraseñas son iguales, puedes seleccionar cualquiera de las dos para ser insertada en el campo contra de la tabla usuarios ya que ambas son exactamente iguales.
Consejo importante para la seguridad:
Para evitar las inyecciones SQL puedes usar mysql_real_escape_string(); al momento de asignarle valor a $usuario_reg, $contra1_reg y $contra2_reg
Ejemplo de uso:
$usuario_reg = mysql_real_escape_string($_POST['usuario']);
Recuerda repetirlo con $contra1_reg y $contra2_reg
Ni piensen que les dejare el código hecho, como tutorial que es, la idea es enseñarles por lo tanto si llegan a tener alguna duda o errores en el funcionamiento de su código les invito a que lo comenten en este tema.
Ademas, les dejo este tutorial que escribí ya hace 2 años que quizás pueda servirles de ayuda.
Tutorial mas especifico de referencia: http://www.phperos.net/foro/index.php/topic,5242.0.html
Paso #4: Validar datos del Log InPara la validación de los datos del
Log In ya se deben de estar haciendo una idea después de haber leído lo anterior, ¿cierto?
Si es asi, podran notar que simplemente son
3 pasos:
- Recibir los datos del formulario
- Saber si el usuario existe
- Saber si la contraseña es igual a la almacenada
Para empezar crearemos nuestro
formulario que vendría estando compuesto por un input de tipo texto (
type="text"), otro de tipo contraseña (
type="password") y un botón de tipo envío (
type="submit"), vendría siendo algo así:
<form action="" method="post">
<input name="usuario" type="text"><br>
<input name="contra" type="password"><br>
<input name="log" type="submit" value="Entrar">
</form>
Una ves hecho esto tendrás que hacer lo establecido anteriormente.
Recibir los datos del formularioUsaremos la misma técnica que hicimos usando
mysql_real_escape_string();Saber si el usuario existeHaremos una consulta con
SELECT igual al que hicimos en el registro para validar si el usuario existe usando el dato establecido en el formulario del
Log In y despues usar
mysql_num_rows(); a la consulta.
Ejemplo:$query = mysql_query("SELECT * FROM usuarios WHERE usuario='".$usuario_log."'");
$row = mysql_num_rows($query);
if($row>0) {
// El usuario existe, procedemos a comparar si la contraseña del formulario coincide con la del registro...
} else {
echo "Usuario incorrecto";
// El usuario no existe por lo que detenemos el proceso del Log In con un mensaje indicando "Usuario incorrecto"...
}
Saber si la contraseña es igual a la almacenadaPara esto vamos a mostrarles algo nuevo que es
mysql_fetch_assoc(); la cual devolverá un array asociativo para poder mostrar el valor de dicho campo.
¿Cual es la diferencia entre mysql_fetch_assoc(); y mysql_fetch_array();?La diferencia es que
mysql_fetch_assoc(); devuelve un
array asociativo y
mysql_fetch_array(); devuelve un
array con indices tanto asociativos como numéricos por lo cual esta ultima, se tarda mas en ejecutar que la primera, aunque eso depende del uso que queremos darle.
Para este caso usaremos
mysql_fetch_assoc();Ejemplo de extracción de datos:$query = mysql_query("SELECT * FROM usuarios WHERE usuario='".$usuario_log."'");
$mostrar = mysql_fetch_assoc($query);
// $mostrar['contra'] debería de mostrar la contraseña del usuario...
Si
$mostrar['contra'] nos muestra la contraseña del usuario, esta la podemos comparar usando los
operadores de comparación vistos anteriormente con la contraseña establecida en el formulario, por ende tendremos que usar el operador "
Igual a...", si devuelve
true son iguales, si devuelve
false son diferentes.
Ejemplo:if($mostrar['contra'] == $contra_log) {
// son iguales, continuamos el proceso de log in...
} else {
echo "Contraseña incorrecta";
// son diferentes, detenemos el proceso de log in mostrando un error de "contraseña incorrecta"...
}
Lo que nos queda es hacer que el usuario quede conectado aunque recargue o refresque la pagina, por lo tanto crearemos una
SESSION cuyo valor sera la
ID del usuario.
Nota:
Tener en cuenta que necesitaras colocar session_start(); en la 1era linea de tu código PHP en todas las paginas donde uses esta SESSION.
Ejemplo de session_start:
<?php
session_start();
...
...
...
?>
Al finalizar todo el proceso de Log In, crearemos una session asignándole valor de la misma forma que hacemos con una variable, este valor que le asignaremos, sera la ID de usuario.
Ejemplo:$_SESSION['login'] = $mostrar['id'];
Después hacemos la redirección y recordar que antes de mostrar el formulario del Log In, debemos comprobar si existe la SESSION "login" para no mostrarte el formulario a un usuario ya conectado, para saber si el usuario esta conectado o no usaremos
isset();Ejemplo isset:if(isset($_SESSION['login'])) {
// Esta conectado...
} else {
// No esta conectado...
}
Ya con esto hemos terminado la parte mas importante del Log In.
Paso #5: Desconectar UsuarioPara desconectar el usuario es tan fácil como escribir una función, para ello usaremos
session_destroy();Ejemplo de session_destroy:<?php
session_start();
session_destroy();
?>
Ya con esto, damos por desconectado al usuario.
¡Eso fue todo!
Espero que este tutorial les sea de utilidad tanto como para ampliar sus conocimientos en PHP o como poder aclarar dudas con respecto a la creación de un Log In.Cualquier error notificarlo, dure 2 días escribiendo esto y no he probado absolutamente ninguno de los códigos que he escrito por lo que no dudo que se me haya escapado algún que otro carácter de mas....
Saludos.