Está en la página 1de 12

Base Para registrar Usuarios

En el siguiente post muestro como crear un simple formulario de registro de usuarios con PHP y
MySQL. El password sera convertido en un "Hash" con la función password_hash(); para hacer la
aplicación mas segura.
Luego que termines con este post, te recomiendo el post titulado Login de usuarios y creacion de
sesiones con PHP y MySQL el cual es la continuación de este post y muestra como hacer un login con
los usuarios que ya están registrados y establecer una sesión para controlar o restringir el acceso no
autorizado a las paginas de la aplicación web.
Este ejemplo supone que ya tienes la base de datos creada con por lo menos una columna llamada
nombre_usuario y otra llamada password. Trata de usar los nombres que utilizamos en este ejemplo
para que te funcione bien.

Primero:
 Crea un directorio llamado "phpLogin"
 Crea una pagina HTML llamada "index.html"
 Crea una pagina PHP llamada "registrar-usuario.php"
index.html
1 <!DOCTYPE html>
2
3 <html lang="en">
4
5 <head>
6 <title>Registrar Usuario</title>
<meta charset = "utf-
7
8">
8 </head>
9
10 <body>
11
12 <header>
13 <h1>Registrate en nuestro fabuloso website:</h1>
14 </header>
15
16 <form action="registrar-usuario.php" method="post">
17
18 <hr />
19 <h3>Crea una cuenta</h3>
20
21 <!--Nombre Usuario-->
22 <label for="nombre">Nombre de Usuario:</label><br>
<input type="text" name="username" maxlength="32"
23
required>
24 <br/><br/>
25
26 <!--Password-->
27 <label for="pass">Password:</label><br>
<input type="password" name="password" maxlength="8"
28
required>
29
30 <br/><br/>
<input type="submit" name="submit"
31
value="Registrarme">
<input type="reset" name="clear"
32
value="Borrar">
33
34 </form>
35
<hr
36
/><br />
37
38 <footer>
&copy;2016 <a
39
href="http://www.VelozityWeb.com">www.VelozityWeb.com</a>
40 </footer>
41
42 </body>
43 </html>
Note que el campo username y password tienen un maxlength = 32 y 8 respectivamente, esto es una
buena practica de programación ya que evita que los usuarios creen nombres muy largos y ayuda
mejorar la seguridad de la de la Aplicación Web.

Codigo PHP
Este es el código PHP el cual verifica primero, si el nombre de usuario entrado ya existe en la base de
datos.
Si el nombre de usuario ya existe, se muestra un mensaje diciéndole al usuario que ese nombre ya
existe y también muestra un enlace para que el usuario vuelva al formulario y entre otro nombre.
Si el usuario no existe, el nombre de usuario y password son enviados a la base de datos y y el
password es guardado en formato de "Hash".

registrar-usuario.php
1 <?php
2
3 $host_db = "localhost";
4 $user_db = "root";
5 $pass_db = "";
6 $db_name = "basedatosmaster";
7 $tbl_name = "Usuarios";
8
9 $form_pass = $_POST['password'];
10
11 $hash = password_hash($form_pass, PASSWORD_BCRYPT);
12
$conexion = new mysqli($host_db, $user_db, $pass_db,
13
$db_name);
14
15 if ($conexion->connect_error) {
16 die("La conexion falló: " . $conexion->connect_error);
17 }
18
19 $buscarUsuario = "SELECT * FROM $tbl_name
20 WHERE nombre_usuario = '$_POST[username]' ";
21
22 $result = $conexion->query($buscarUsuario);
23
24 $count = mysqli_num_rows($result);
25
if ($count == 1)
26
{
echo "<br />". "El Nombre de Usuario ya a sido tomado." . "<br
27
/>";
28
29 echo "<a href='index.html'>Por favor escoga otro Nombre</a>";
30 }
31 else{
32
33 $query = "INSERT INTO Usuarios (nombre_usuario, password)
34 VALUES ('$_POST[username]', '$hash')";
35
36 if ($conexion->query($query) === TRUE) {
37
echo "<br />" . "<h2>" . "Usuario Creado Exitosamente!" .
38
"</h2>";
echo "<h4>" . "Bienvenido: " . $_POST['username'] . "</h4>" .
39
"\n\n";
echo "<h5>" . "Hacer Login: " . "<a
40
href='login.html'>Login</a>" . "</h5>";
41 }
42
43 else {
echo "Error al crear el usuario." . $query . "<br>" . $conexion-
44
>error;
45 }
46 }
47 mysqli_close($conexion);
48 ?>
La variable $form_pass almacena el password entrado en el formulario.

Luego la variable $hash almacena la función password_hash(); la cual utiliza como parámetros la
variable $form_pass y el algoritmo de encriptacion CRYPT_BLOWFISH.
Luego de esto, la variable $hash sera igual al hash proporcionado por la encriptacion y el cual sera
usado luego en la consulta INSERT.
La variable $buscarUsuario almacena la consulta SQL que busca o verifica si el Nombre de Usuario
ya existe en la base de datos.
Si el usuario ya existe, la variable $count sera igual a 1 y mostrara un mensaje diciendo que el 'El
Nombre de Usuario ya Existe en nuestra Base de Datos!'.
Si el usuario no existe, el programa continua con la consulta INSERT INTO para registrar o insertar el
usuario y el password (hash) en la base de datos.
Si al momento de insertar la data hay algún problema con la basa de datos MySQL se mostrara un
mensaje de error diciendo "Error al crear el usuario.".
Si todo sale bien, se mostrara un mensaje diciendo "Usuario creado exitosamente." y un mensaje de
bienvenida con el nombre del usuario.

**************************************************************************
Continuación
**************************************************************************

Login y creacion de sesiones con PHP y MySQL


 Home
 All
 Login y creacion de sesiones con PHP y MySQL
Actualizado: Junio 9 2016

Login y creación de sesiones con PHP y MySQL es la continuación del post titulado Formulario de
Registro de Usuarios con PHP y MySQL
Recuerda que los usuarios primero se deben registrar antes de hacer login.
El código de los ejemplos aquí mostrados han sido actualizados y mejorados para beneficio de ustedes.
Si has leído este post anteriormente notaras que es un poco diferente al anterior.
Por ejemplo; ahora el password es convertido en un hash (cifrado) y se usan las funciones mejoradas
de PHP como: mysqli();
También fueron removidos los comentarios para hacer mas claro y legible el código. Pero al final doy
una breve explicación de como funciona todo.
En el post anterior habías creado un directorio llamado phpLogin con un archivo llamado index.html
y otro llamado registrar-usuario.php.

Ahora
 Crea una pagina llamada login.html
 Crea una pagina llamada checklogin.php
 Crea una pagina llamada panel-control.php
 Crea una pagina llamada logout.php
 y colócalos dentro del directoro phpLogin.
En total vamos a tener 6 paginas, estas 4 mas las 2 del post Registro de Usuarios con PHP y MySQL
Código HTML:
login.html
1 <!DOCTYPE html>
2
3 <html lang="en">
4
5 <head>
6 <title>Login</title>
7
<meta charset = "utf-
8
8">
9 </head>
10
11 <body>
12
13 <h1>Login de Usuarios</h1>
14 <hr />
15
<form action="checklogin.php" method="post"
16
>
17
18 <label>Nombre Usuario:</label><br>
<input name="username" type="text" id="username"
19
required>
20 <br><br>
21
22 <label>Password:</label><br>
<input name="password" type="password" id="password"
23
required>
24 <br><br>
25
<input type="submit" name="Submit"
26
value="LOGIN">
27
28 </form>
29 <hr />
30
31 <footer>
&copy;2016 <a
32
href="http://www.VelozityWeb.com">www.VelozityWeb.com</a>
33 </footer>
34
35 </body>
36 </html>

Codigo PHP:
checklogin.php
1 <?php
2 session_start();
3 ?>
4
5 <?php
6
7 $host_db = "localhost";
8 $user_db = "root";
9 $pass_db = "";
10 $db_name = "basedatosmaster";
11 $tbl_name = "Usuarios";
12
$conexion = new mysqli($host_db, $user_db, $pass_db,
13
$db_name);
14
15 if ($conexion->connect_error) {
16 die("La conexion falló: " . $conexion->connect_error);
17 }
18
19 $username = $_POST['username'];
20 $password = $_POST['password'];
21
$sql = "SELECT * FROM $tbl_name WHERE nombre_usuario =
22
'$username'";
23
24 $result = $conexion->query($sql);
25
26
27 if ($result->num_rows > 0) {
28 }
29 $row = $result->fetch_array(MYSQLI_ASSOC);
30 if (password_verify($password, $row['password'])) {
31
32 $_SESSION['loggedin'] = true;
33 $_SESSION['username'] = $username;
34 $_SESSION['start'] = time();
35 $_SESSION['expire'] = $_SESSION['start'] + (5 * 60);
36
echo "Bienvenido! " .
37
$_SESSION['username'];
38 echo "<br><br><a href=panel-control.php>Panel de Control</a>";
39
40 } else {
41 echo "Username o Password estan incorrectos.";
42
43 echo "<br><a href='login.html'>Volver a Intentarlo</a>";
44 }
45 mysqli_close($conexion);
46 ?>

Explicación breve del codigo PHP:


La aplicación PHP comienza con la función session_start(); para comenzar la sesión del usuario.
Esta función debe ser lo primero en ejecutarse y debe comenzar exactamente en la primera linea, si hay
algún código, espacio en blanco o alguna otra cosa antes de esta función se producirá un error.

Desde la linea 7 a la 17 están las variables y funciones típicas de conexión y verificación de error.
En la linea 19 y 20 están las variables que guardan el nombre de usuario y password entrados por el
usuario en el formulario.
En la linea 22 la variable $sql guarda la consulta SQL que verifica si el nombre de usuario ya existe en
la base de datos.
En la linea 24 la variable $result guarda el resultado de la función query() usando como parámetro el
resultado de la variable $sql.
En la linea 27 si (if) $result->num_rows es mayor que 0. La condición se cumple y sigue con la linea
29.
En la linea 29 la variable $row guarda el resultado de la función fetch_array(MYSQLI_ASSOC); la
cual se utiliza para extraer data de la base de datos en forma de arreglo (array). En este caso, solo
extraerá el password.
En la linea 30 si (if) la verificación de la función password_verify(); es exitosa continua con el resto
del programa. De lo contrario (else) quiere decir que el nombre de usuario o password están
incorrectos.
La función password_verify(); lo que hace es descifrar el hash en la base de datos para compararlo
con el password entrado en el formulario y verificar que sean iguales.
De la linea 32 a la 35 se crea la sesión para un usuario en particular. En la linea 35 se establece el
tiempo de duración de la sesión en este caso 5 minutos.
Una vez el usuario hace login con éxito, le muestra un mensaje de bienvenida con un enlace al Panel de
Control.
panel-control.php
1 <?php
2 session_start();
3
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true)
4
{
5
6 } else {
7 echo "Esta pagina es solo para usuarios registrados.<br>";
8 echo "<br><a href='login.html'>Login</a>";
9 echo "<br><br><a href='index.html'>Registrarme</a>";
10
11 exit;
12 }
13
14 $now = time();
15
16 if($now > $_SESSION['expire']) {
17 session_destroy();
18
19 echo "Su sesion a terminado,
20 <a href='login.html'>Necesita Hacer Login</a>";
21 exit;
22 }
23 ?>
24
25 <!DOCTYPE html>
26 <html lang="en">
27
28 <head>
29 <title>Panel de Control</title>
30 </head>
31
32 <body>
33 <h1>Panel de Control</h1>
34 <p>Aqui hirian los enlaces que le permitirian al usuario
35 editar su perfil o cualquier otra cosa que desees.</p>
36
37 <ul>
38 <li>Editar Perfil</li>
39 <li>Editar Preferencias</li>
40 <li>Editar Configuracion</li>
41 <li>etc.</li>
42 </ul>
43
44 <br><br>
45 <a href=logout.php>Cerrar Sesion X </a>
46 </body>
47 </html>

Código para verificar y expirar la sesión cuando esta llegue al


tiempo establecido.
El bloque de código de la linea 1 a la 23, es el código que va en cada una de las paginas que solamente
pueden ver o editar los usuarios registrados.
Por ejemplo: Si creaste una pagina PHP donde los usuarios puedan editar su perfil, tienes que colocar
ese bloque de código al principio de la pagina y antes de cualquier otro código PHP.
Sin este código cualquier usuario podría tener acceso a las paginas con acceso restringido.

Código para cerrar la sesión


logout.php
1 <?php
2
3 session_start();
4 unset ($SESSION['username']);
5 session_destroy();
6
7 header('Location: http://localhost:8079/phpLogin/login.html');
8
9 ?>

Espero les sea de utilidad. Gracias por leer y compartir!


Que sean bendecidos!

También podría gustarte