Está en la página 1de 18

http://ayuda.fotopex.

com/programacion/php/hacer-login-de-usuarios-con-
php-y-mysql/

Hacer login de usuarios con PHP y MySQL

Debemos de crear una tabla que vamos a utilizar en la base de datos


MySQL.

MySQL:

1.

CREATE TABLE `usuarios` (

2.

`id` INT(11) NOT NULL AUTO_INCREMENT,

3.

`usuario` VARCHAR(20) NOT NULL,

4.

`password` VARCHAR(10) NOT NULL,

5.

`descripcion` TEXT character SET utf8 collate utf8_spanish_ci,

6.

`email` VARCHAR(45) character SET utf8 collate utf8_spanish_ci


DEFAULT NULL,

7.

`fecha` DATE NOT NULL,

8.

PRIMARY KEY (`id`)

9.

)
Ya tenemos la estructura de nuestra tabla de usuarios.

Ahora una pagina index.php donde colocaremos el siguiente código:

PHP:

1.

<?php session_start();

2.

3.

echo 'Bienvenido, ';

4.

5.

if (isset($_SESSION['k_username'])) {

6.

echo '<b>'.$_SESSION['k_username'].'</b>.';

7.

echo '<p><a href="logout.php">Logout</a></p>';

8.

}else{

9.

echo '<p><a href="login.php">Login</a></p>

10.

<p><a href="registrar.php">Registrar</a></p>';

11.

}
12.

?>

Ahora el formulario para hacer login.php

HTML:

1.

<form action="validar_usuario.php" method="post">

2.

Usuario:<input type="text" name="usuario" size="20" maxlength="20"


/>

3.

<br />

4.

Password:<input type="password" name="password" size="10"


maxlength="10" />

5.

<br />

6.

<input type="submit" value="Ingresar" />

7.

</form>

Seguimos con el archivo validar_usuario.php el cual verificará los datos del


archivo login.php
PHP:

1.

<?php session_start();

2.

3.

//datos para establecer la conexion con la base de mysql.

4.

mysql_connect('localhost','usuario','password')or die ('Ha fallado la


conexi&oacute;n: '.mysql_error());

5.

mysql_select_db('mi_base')or die ('Error al seleccionar la Base de Datos:


'.mysql_error());

6.

7.

function quitar($mensaje)

8.

9.

$nopermitidos = array("'",'\\','<','>',"\"");

10.

$mensaje = str_replace($nopermitidos, "", $mensaje);

11.

return $mensaje;

12.

}
13.

14.

if(trim($HTTP_POST_VARS["usuario"]) != "" &&


trim($HTTP_POST_VARS["password"]) != "")

15.

16.

// Puedes utilizar la funcion para eliminar algun caracter en especifico

17.

//$usuario = strtolower(quitar($HTTP_POST_VARS["usuario"]));

18.

//$password = $HTTP_POST_VARS["password"];

19.

20.

// o puedes convertir los a su entidad HTML aplicable con htmlentities

21.

$usuario = strtolower(htmlentities($HTTP_POST_VARS["usuario"],
ENT_QUOTES));

22.

$password = $HTTP_POST_VARS["password"];

23.

24.

25.

$result = mysql_query('SELECT password, usuario FROM usuarios


WHERE usuario=\''.$usuario.'\'');

26.
if($row = mysql_fetch_array($result)){

27.

if($row["password"] == $password){

28.

29.

$_SESSION["k_username"] = $row['usuario'];

30.

31.

echo 'Has sido logueado correctamente '.


$_SESSION['k_username'].' <p>';

32.

echo '<a href="index.php">Index</a></p>';

33.

34.

//Elimina el siguiente comentario si quieres que re-dirigir


autom&aacute;ticamente a index.php

35.

36.

/*Ingreso exitoso, ahora sera dirigido a la pagina principal.

37.

<SCRIPT LANGUAGE="javascript">

38.

location.href = "index.php";

39.

</SCRIPT>*/
40.

41.

}else{

42.

echo 'Password incorrecto';

43.

44.

}else{

45.

echo 'Usuario no existente en la base de datos';

46.

47.

mysql_free_result($result);

48.

}else{

49.

echo 'Debe especificar un usuario y password';

50.

51.

mysql_close();

52.

?>

El archivo registrar.php, ahí crearemos un usuario nuevo.

PHP:
1.

<?php session_start();

2.

3.

//datos para establecer la conexion con la base de mysql.

4.

mysql_connect('localhost','usuario','password')or die ('Ha fallado la


conexi&oacute;n: '.mysql_error());

5.

mysql_select_db('mi_base')or die ('Error al seleccionar la Base de Datos:


'.mysql_error());

6.

7.

function formRegistro(){

8.

?>

9.

<form action="registrar.php" method="post">

10.

Usuario (max 20):

11.

<input type="text" name="username" size="20" maxlength="20"


/><br />

12.

Password (max 10):

13.
<input type="password" name="password" size="10"
maxlength="10" />

14.

Confirma: <input type="password" name="password2" size="10"


maxlength="10" /><br />

15.

Email (max 40):

16.

<input type="text" name="email" size="20" maxlength="40" /><br />

17.

<input type="submit" value="Registrar" />

18.

</form>

19.

<?php

20.

21.

22.

// verificamos si se han enviado ya las variables necesarias.

23.

if (isset($_POST["username"])) {

24.

$username = $_POST["username"];

25.

$password = $_POST["password"];

26.

$password2 = $_POST["password2"];
27.

$email = $_POST["email"];

28.

// Hay campos en blanco

29.

if($username==NULL|$password==NULL|$password2==NULL|
$email==NULL) {

30.

echo "un campo est&aacute; vacio.";

31.

formRegistro();

32.

}else{

33.

// ¿Coinciden las contrase&ntilde;as?

34.

if($password!=$password2) {

35.

echo "Las contrase&ntilde;as no coinciden";

36.

formRegistro();

37.

}else{

38.

// Comprobamos si el nombre de usuario o la cuenta de correo


ya exist&iacute;an

39.

$checkuser = mysql_query("SELECT usuario FROM usuarios


WHERE usuario='$username'");

40.
$username_exist = mysql_num_rows($checkuser);

41.

42.

$checkemail = mysql_query("SELECT email FROM usuarios


WHERE email='$email'");

43.

$email_exist = mysql_num_rows($checkemail);

44.

45.

if ($email_exist>0|$username_exist>0) {

46.

echo "El nombre de usuario o la cuenta de correo estan ya en


uso";

47.

formRegistro();

48.

}else{

49.

$query = 'INSERT INTO usuarios (usuario, password, email,


fecha)

50.

VALUES (\''.$username.'\',\''.$password.'\',\''.
$email.'\',\''.date("Y-m-d").'\')';

51.

52.

mysql_query($query) or die(mysql_error());

53.
echo 'El usuario '.$username.' ha sido registrado de manera
satisfactoria.<br />';

54.

echo 'Ahora puede entrar ingresando su usuario y su


password <br />';

55.

?>

56.

<FORM ACTION="validar_usuario.php" METHOD="post">

57.

Usuario : <INPUT TYPE="text" NAME="usuario" SIZE=20


MAXLENGTH=20><br />

58.

Password: <INPUT TYPE="password" NAME="password"


SIZE=10 MAXLENGTH=20><br />

59.

<INPUT TYPE="submit" VALUE="Ingresar">

60.

</FORM>

61.

<?php

62.

63.

64.

65.

66.
}else{

67.

formRegistro();

68.

69.

?>

Finalmente el archivo logout.php, ahí cerraremos la sesión.

El sistema creado es sencillo para que sea fácil de entender, Y no olvides


dejar tus comentarios.

floppy.jpg

Clic para descargar el archivo

Actualización: debido a los problemas que hay al momento de hacer


copy/paste se anexan los archivos del ejemplo. Recuerda que es solo el
principio, falta:

Encriptar las claves antes de enviarlas, hacer la conexión como función y


todo lo que se te ocurra o puedas aportar.

Actualización.

A los amigos que me han sobre las medidas de seguridad que debemos de
procurar, algunas son:

La encriptación de la clave mediante MD5 o SHA1

Utilización de htmlentities y html_entity_decode


Cuando el usuario mete algún campo erróneo o deja algo en blanco se
llama a la función formRegistro(); y borra todos los campos aunque estén
correctos, ¿cómo puedo mantener los campos ya rellenados? para no hacer
al usuario que vuelva a meter los datos.

Puedes utilizar algo asi :

value="<?php if(isset($_post['campo']) echo $_post['campo']; ?>"

y recuerda utilizar htmlentities y html_entity_decode para evitar la inyección


de código.

Y para los amigos que me han preguntado como podemos bloquear las
paginas si no hace login, les comento que yo tengo un sistema basado en
niveles y que más adelante la publicaré, mientras tanto podemos hacer una
interpretación más ligera y sería algo más o menos asi:

Agregamos una tabla de nombre autorizaciones, y 3 campos:

id - autonumérico

pagina - varchar (en este campo vamos a ingresar las secciones o página
donde necesitan hace login para poder verlas)

usuario - texto largo (los nombres de los usuarios con autorización para ver
esta pagina separados por comas)

Vamos a crear una pagina con el nombre de funciones.php con el siguiente


código:
PHP:

1.

<?php session_start();

2.

function conectar(){

3.

//datos para establecer la conexion con la base de mysql.

4.

mysql_connect('localhost','usuario','password')or die ('Ha fallado la


conexión: '.mysql_error());

5.

mysql_select_db('mi_base')or die ('Error al seleccionar la Base de


Datos: '.mysql_error());

6.

7.

8.

function puede_ver($pagina=''){

9.

$usuario = strtoupper($_SESSION['k_username']);

10.

$result = mysql_query('SELECT usuario FROM autorizaciones WHERE


pagina=\''.$pagina.'\' ');

11.

if($row = mysql_fetch_array($result)){

12.

$usuarios=$row['usuario']; // obtenemos los nombres de los


usuarios
13.

$array_usuarios= array(); // creamos un arrar

14.

$array_usuarios=explode(',',$usuarios); // y los metemos pos la


separación de la coma

15.

$total=count($array_usuarios); // cuantos tenemos ?

16.

if (in_array($usuario, $array_usuarios)) { // si encontramos al


ganador ok

17.

return true;

18.

}else{ // si no pues un false como respuesta

19.

return false;

20.

21.

22.

23.

?>

Olvidandonos un poco de la página index.php vamos a crear nuestra primer


página restringida con el nombre visita_fotopex.php, con este método no
solo puedes restringir el acceso a una pagina, lo puedes hacer por
secciones, por ejemplo para restringir a una página completa el código de
visita_fotopex.php seria así:

PHP:
1.

<?php session_start();

2.

// no olvidemos incluir nuestras funciones

3.

include("funciones.php");

4.

conectar();

5.

if (puede_ver('pagina')==false){

6.

die('<br /><br />No tiene permiso para esta &aacute;rea, consulte a


<a href="http://ayuda.fotopex.com">www.ayuda.fotopex.com</a><br
/><br /><br />');

7.

8.

?>

y para restringir una sección simplemente lo inviertes

PHP:

1.

<?php session_start();

2.

// no olvidemos incluir nuestras funciones


3.

include("funciones.php");

4.

conectar();

5.

if (puede_ver('seccion_a')){

6.

echo '<br /><br />Ahora puedes ver esta sección y sigue visitando
<a href="http://ayuda.fotopex.com">www.ayuda.fotopex.com</a><br
/><br /><br />';

7.

8.

?>