Anda di halaman 1dari 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.

?>

Anda mungkin juga menyukai