Registro de Usuarios con PHP y MySQL

Actualizado: Junio 9 2016

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


<!DOCTYPE html>

<html lang="en">

<head>
 <title>Registrar Usuario</title>
 <meta charset = "utf-8">
</head>

<body>

 <header>
 <h1>Registrate en nuestro fabuloso website:</h1>
 </header> 

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

 <hr />
 <h3>Crea una cuenta</h3>

 <!--Nombre Usuario-->
 <label for="nombre">Nombre de Usuario:</label><br>
 <input type="text" name="username" maxlength="32" required>
 <br/><br/>

 <!--Password-->
 <label for="pass">Password:</label><br>
 <input type="password" name="password" maxlength="8" required>

 <br/><br/>
 <input type="submit" name="submit" value="Registrarme">
 <input type="reset" name="clear" value="Borrar">

 </form>

<hr /><br />

<footer>
 &copy;2016 <a href="http://www.VelozityWeb.com">www.VelozityWeb.com</a>
</footer> 

 </body>
</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


<?php

 $host_db = "localhost";
 $user_db = "root";
 $pass_db = "";
 $db_name = "basedatosmaster";
 $tbl_name = "Usuarios";
 
 $form_pass = $_POST['password'];
 
 $hash = password_hash($form_pass, PASSWORD_BCRYPT); 

 $conexion = new mysqli($host_db, $user_db, $pass_db, $db_name);

 if ($conexion->connect_error) {
 die("La conexion falló: " . $conexion->connect_error);
}

 $buscarUsuario = "SELECT * FROM $tbl_name
 WHERE nombre_usuario = '$_POST[username]' ";

 $result = $conexion->query($buscarUsuario);

 $count = mysqli_num_rows($result);

 if ($count == 1) {
 echo "<br />". "El Nombre de Usuario ya a sido tomado." . "<br />";

 echo "<a href='index.html'>Por favor escoga otro Nombre</a>";
 }
 else{

 $query = "INSERT INTO Usuarios (nombre_usuario, password)
           VALUES ('$_POST[username]', '$hash')";

 if ($conexion->query($query) === TRUE) {
 
 echo "<br />" . "<h2>" . "Usuario Creado Exitosamente!" . "</h2>";
 echo "<h4>" . "Bienvenido: " . $_POST['username'] . "</h4>" . "\n\n";
 echo "<h5>" . "Hacer Login: " . "<a href='login.html'>Login</a>" . "</h5>"; 
 }

 else {
 echo "Error al crear el usuario." . $query . "<br>" . $conexion->error; 
   }
 }
 mysqli_close($conexion);
?>

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.

Ahora que los usuarios se pueden registrar, es momento de que puedan hacer login y crear una sesión.

Espero les sea util. Gracias por leer y compartir.

14 Respuestas

  1. Excelente Aporte!!!
    Mi aplicación web viene funcionando de maravilla. Solo quisiera saber la implementación de “MANTENER SESIÓN ACTIVA” y agregar un campo “REPITA CONTRASEÑA”, validar y también, mostrar una barra que compruebe en tiempo real el nombre de usuario (si existe o no) y la contraseña (si tiene más de 8 caracteres, que evite caracteres especiales, que contenga por lo menos un número y letra mayúscula)… Muchas gracias desde ya!!!

  2. hola tengo el siguiente error:
    Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\AppServ\www\registrar-usuario.php on line 38
    Error:

    • velozity

      Hola gracias por tus comentarios. Yo lo probe varias veces y me funcionaba bien. Pero se puede hacer de otra manera.

      • En la linea 36 cambia el contenido del if por este: $conexion->query($query) === TRUE
      • Ahora dentro del if coloca los mensajes de “Usuario Creado Exitosamente, etc.
      • Y en el else coloca este codigo: echo "Error al crear el usuario." . $query . "
        " . $conexion->error;

      De esa manera te debe funcionar.

      Te debe quedar algo asi…
      Screen Shoot codigo Registro Usuarios PHP MySQL

  3. Fatal error: Call to undefined function password_hash() in /home/hospitxv/public_html/phpLogin/registrar-usuario.php on line 11

    • velozity

      Hola gracias por tus comentarios. Pues de verdad no se que esta pasando porque e visto que mas nadie a tenido problema con el hash. Lo probe varias veces y todo esta bien. Tal vez sea tu version de PHP o algo en la base de datos. Yo estoy usando PHP v5.6.15

      Como puedes ver en la siguiente imagen, yo cree 3 usuarios y con su hash sin problemas.
      phpmyadmin

      Aqui te dejo la estructura (es sencilla) de la tabla usuarios en la base de datos. Espero te ayude en algo.
      phpMyAdmin Estructura tabla usuarios

  4. Gracias por el aporte. Estoy practicando con php y se me hizo muy clara tu explicación.
    Aprovecho para consultarte un inconveniente a la hora de hacer el login ya que no me toma la contraseña.
    Me parece que al encriptar la contraseña en el registro, luego no me toma la contraseña que vuelvo a ingresar en el login.

    • Ya logré encontrar la solución. Cambié la longitud de la columna password a 255 (estaba en 30).

      • velozity

        Hola Gracias a ti por leer. Que bueno que resolviste el problema. El Hash que se crea en la base de datos es de 60 caracteres. Hiciste una buena elección al cambiar la columna a 255 ya que es el recomendado por el propio PHP. Aquí les dejo el link al manual de PHP donde habla sobre eso. Gracias! password_hash()

  5. me parece muy bueno el aporte, solo me gustaría saber en que parte creaste la BD

    • velozity

      Hola y gracias por tus comentarios. Para no hacer el post muy complicado y largo la base de datos la cree previamente con PHPMyAdmin. No la hice con un script de PHP.

  6. Bom dia amigo , rolei o codigo para teste e esta a dar este erro…

    Warning: mysql_connect(): in C:\xampp\htdocs\conecta\conecta.php on line 5

    Warning: mysql_connect(): in C:\xampp\htdocs\conecta\conecta.php on line 5

    Notice: Undefined variable: logar_bd in C:\xampp\htdocs\conecta\conecta.php on line 6

    Warning: mysql_select_db() expects parameter 2 to be resource, boolean given in C:\xampp\htdocs\conecta\conecta.php on line 6
    No se puede seleccionar la base de datos.

  7. gracias por el aporte

  8. ya lo resolví
    if ($count == 1){ lo cambie por if ($count == 0){
    Gracias.

  9. hola, los registros se guardan como Array [cel y Array [nip
    yo cambien el campo usuario por celular y password por nip.
    Gracias.

    Hello, records are saved as Array [Cell Array [nip change the user password field and by nip cell.
    Thank you.

    googletraductor

Agregar comentario