Registro de Usuarios con PHP y MySQL

Conocimiento es poder!

Registro de Usuarios con PHP y MySQL

Actualizado: Marzo 06 2019

En este post muestro como crear un simple formulario de registro de usuarios con PHP, MySQL, y password hash.

Si estas buscando un sistema de login mas avanzado te recomiendo este post;

Login de usuarios y creacion de sesiones con PHP y MySQL

El sistema tiene formulario de registro, login, manejo de sesiones, password hash y recuperación de password.

En el siguiente ejemplo supone que ya tienes la BD creada con una columna llamada nombre_usuario y otra password.

Trata de usar los nombres que utilizamos en este ejemplo para que te funcione bien.

Primero crea

  • un directorio llamado “phpLogin
  • una pagina HTML llamada “index.html
  • y 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>

<footer>
 ©2016 <a href="http://www.VelozityWeb.com">www.VelozityWeb.com</a>
</footer> 

 </body>
</html>

Codigo PHP

registrar-usuario.php

<?php

 $host_db = "localhost";
 $user_db = "root";
 $pass_db = "";
 $db_name = "basedatosmaster";
 $tbl_name = "Usuarios";
 
 $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{

 $form_pass = $_POST['password'];
 
 $hash = password_hash($form_pass, PASSWORD_BCRYPT);

 $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);
?>

Como funciona el codigo PHP

Primer el programa busca si el usuario ya existe en la BD, si existe la variable $count sera igual a 1 y se mostrara un mensaje.

Si el usuario no existe, el programa continua con la consulta INSERT INTO para insertar el usuario y el password hash en la BD.

La variable $form_pass es la que almacena el password entrado en el formulario.

$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, la variable $hash sera igual al hash proporcionado por la encriptacion y sera enviado a la BD con la consulta INSERT INTO.

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.

Tags: , , , ,

21 Responses

  1. Hernán. says:

    Muchas Gracias. Sería genial, espero no sea mucho pedir, que expliquen, más o menos, cómo llevar a cabo un sistema de comentarios/respuestas.
    De nuevo gracias.

  2. Name* says:

    Hola. Hice todos los pasos y me da error 500. Como podria solucionarlo

  3. Hierro59 says:

    Excelente! Muchisimas gracias, estpy usando tu codigo. Ahora solo falta como hacer el login jejejeje sigo buscando

  4. ya se cual era el problema, tenia que actualizar el php…

  5. gran código Velozity, lo implemente en un minuto y resulto excelente, le agregue campos de mi interés y quedo de pelo.
    estoy creando una web, cuando la active te paso la url, gracias por tu aporte.

  6. Mil gracias Velozity !!!
    Funcionó de maravilla, incluso realicé algunos cambios y también funcionó sin problemas !!!

  7. 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!!!

  8. Jose says:

    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 says:

      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

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

    • velozity says:

      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

  10. Santiago says:

    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.

  11. jose says:

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

    • velozity says:

      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.

  12. João says:

    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.

  13. isaias says:

    gracias por el aporte

  14. luis says:

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

  15. luis antonio says:

    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

Deja tus comentarios o preguntas!

This site uses Akismet to reduce spam. Learn how your comment data is processed.