Como

Como Hacer un Sistema de Registro de Usuarios en PHP con MySQL

  • Tutorial de: PHP
  • Dificultad: Intermedio
  • Tiempo: 45 Minutos

En este tutorial desarrollaremos y explicaremos un sistema de registro de usuarios, este tutorial es una continuación de este otro donde vimos como crear un sistema de login de usuarios.

1. Crear la tabla en MySQL

Vamos a comenzar preparando una tabla en nuestra base de datos, la cual almacenara la información de los usuarios, para crear la tabla simplemente copia y ejecuta la siguiente consulta SQL:

CREATE TABLE `usuarios` (
  `idusuario` INT(11) NOT NULL AUTO_INCREMENT,
  `usuario` VARCHAR(20) NOT NULL,
  `password` VARCHAR(10) NOT NULL,
  PRIMARY KEY  (`idusuario`)
)

2. Conectando a MySQL en PHP

Ya una vez que tengamos la estructura de nuestra tabla, creamos un archivo llamado conexion.php.


<?php
// datos para la coneccion a mysql
define('DB_SERVER','localhost');
define('DB_NAME','TU_BASE_DE_DATOS');
define('DB_USER','TU_USUARIO');
define('DB_PASS','TU_CLAVE');

La funcion define como su nombre lo dice, se usa para definir una constante nominada, que nos permite almacenar valores escalares(string, integer, float, boolean y nulos).

$con = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_select_db(DB_NAME,$con);
?>

La función de mysql_connect nos servira para abrir una conexión al servidor de MySQL usando los 3 parámetros que declaramos anteriormente. Luego mysql_select_db selecciona la base de datos usando 2 parámetros, el nombre de la base de datos y la conexión a usar.

Código completo

<?php
// datos para la conexion a mysql
define('DB_SERVER','localhost');
define('DB_NAME','TU_BASE_DE_DATOS');
define('DB_USER','TU_USUARIO');
define('DB_PASS','TU_CLAVE');
$con = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_select_db(DB_NAME,$con);
?>

4. index.php

Ahora pasamos el archivo index.php, el cual contendrá el formulario de registro y al mismo tiempo el mensaje de “fue registrado correctamente” o “faltan llenar campos”.


<?php
session_start();
include_once "conexion.php";

session_start() crea una sesión para ser usada mediante una petición GET o POST, o pasado por una cookie y la sentencia include_once es la usaremos para incluir el archivo de conexión a la base de datos que creamos anteriormente.

Creamos el formulario con el campo de Usuario que se llamara $_POST['usuario'] y 2 campos para la clave y uno mas para confirmar si escribió bien la clave, se llamaran $_POST['password'] y $_POST['repassword'] respectivamente, procedemos a escribir el codigo que procesara y validara lo que el usuario ingrese:

if(isset($_POST['enviar']))
{
	if($_POST['usuario'] == '' or $_POST['password'] == '' or $_POST['repassword'] == '')
	{
		echo 'Por favor llene todos los campos.';
	}
	else
	{	
		$sql = 'SELECT * FROM usuarios';
		$rec = mysql_query($sql);
		$verificar_usuario = 0;
			 
		while($result = mysql_fetch_object($rec))
		{
			if($result->usuario == $_POST['usuario'])
			{
				$verificar_usuario = 1;
			}
		}

		if($verificar_usuario == 0)
		{
			if($_POST['password'] == $_POST['repassword'])
			{
				$usuario = $_POST['usuario'];
				$password = $_POST['password'];
				$sql = "INSERT INTO usuarios (usuario,password) VALUES ('$usuario','$password')";
				mysql_query($sql);
						
				echo 'Usted se ha registrado correctamente.';	
			}
			else
			{
				echo 'Las claves no son iguales, intente nuevamente.';	
			}
		}
		else
		{
			echo 'Este usuario ya ha sido registrado anteriormente.';	
		}
	}
}
  • Linea 1: La primera condición es para saber cuando el formulario haya sido enviado.
  • Linea 3: Si los campos están vacíos muestra el siguiente mensaje, caso contrario sigue el siguiente bloque de código.
  • Linea 11, 15 y 21: Creamos la variable $verificar_usuario que empieza con un valor de 0, pero si la condición de la linea 15 resulta verdadera, entonces la variable toma el valor de 1 que quiere decir que ese nombre de usuario ya existe por lo tanto no se puede registrar.
  • Linea 23: Si los campos son iguales, continua el registro o caso contrario saldrá un mensaje de error.
  • Linea 27: Se insertan los datos a la base de datos, el usuario es registrado con exito y sale el mensaje correspondiente.

Decoración opcional con CSS

Esta parte es algo de CSS opcional ya que no influye en nada en el funcionamiento del sistema, es unicamente decorativa:

		*{
			font-size: 14px;
			font-family: sans-serif;
		}
		form.registro{
		    background: none repeat scroll 0 0 #F1F1F1;
		    border: 1px solid #DDDDDD;
		    margin: 0 auto;
		    padding: 20px;
		    width: 278px;
		}
		form.registro div {
		    margin-bottom: 15px;
		    overflow: hidden;
		}
		form.registro div label {
		    display: block;
		    float: left;
		    line-height: 25px;
		}
		form.registro div input[type="text"], form.registro div input[type="password"] {
		    border: 1px solid #DCDCDC;
		    float: right;
		    padding: 4px;
		}
		form.registro div input[type="submit"] {
		    background: none repeat scroll 0 0 #DEDEDE;
		    border: 1px solid #C6C6C6;
		    float: right;
		    font-weight: bold;
		    padding: 4px 20px;
		}
		.error{
			color: red;
		    font-weight: bold;
		    margin: 10px;
		    text-align: center;
		}

Y con esto terminamos el nuestro sistema de registro en PHP, recuerda que puedes probar el resultado final en esta dirección o bajarte el código fuente desde aqui.


  • http://franklinroldan.com Franklin

    Voy a ponerlo en practica y te comento como me va con esto.. Saludos y gracias por el aporte.

  • Aramando

    Excelente, me encantan tu blog ademas son muy buenas las aportaciones para los que nos iniciamos Saludos. me encantaria si tubieras oportunidad de poner un poco más de pos de jquery y algunas de sus proncipales aplicaciones . gracias :)

  • http://www.interfazdigital.com Carlos Andrés Restrepo

    Yo no usaría un while para saber si el usuario existe en la base de datos dado que tiene que recorrer toda la tabla consume muchos recursos mejor valido la existencia del usuario en el proprio query y si el query devuelve algo es porque existe y lo traigo en un arreglo

  • Nicolás Maldonado

    Carlos, para los que no tienen tan claro el SQL, podrías bajar a tierra tu idea?

  • Raul

    ¿Podrías indicarnos como modificar el código para encriptar las contraseñas?
    Gracias

    • http://www.edwindpineda.com Edwind Pineda

      si, php ya tiene una funcion que hace eso:

      $clave= md5($clave);

      saludos

    • Juan Esteban

      o lo podes hacer desde la sentencia de mysql

      quedando de la sgte manera;
      $sql = “INSERT INTO usuarios (usuario, password) VALUES (‘$usuario’,SHA(‘$password’))”;

      saludos;

      • Neo

        No puedo hacer login, ya que en el index.php me da error y no reconoce la contraseña.

        He puesto tu sentencia SQL en registro.php, hay que añadir algo al index.php ?

        gracias

  • http://www.interfazdigital.com Carlos Andrés Restrepo

    es lo siguiente si voy a verficar la exstencia de un usuario en la base de datos mando el query completo asi $sql = ‘SELECT usuario, clave FROM usuarios where usuario=”$_POST['usuario']” and clave=$_POST['password']‘; de esa forma el mismo query me devuelve la existencia del usuario y no tengo que leer toda la tabla, lo que develve el query es un arreglo de datos y entonces se puede leear asi $result[0] seria la posicion del usuario y $result[1] seria la clave estas posiciones se indican en el select de la sentencia sql de esa manera el while sobra solo queda el if asi

    if($result[0]->usuario == $_POST['usuario'])
    {
    $verificar_usuario = 1;
    }

    espero haber sido claro

    • Ivan

      Tu query esta mal, ya que si la contraseña es distinta, tampoco devolverá un valor, por ende insertarían nuevamente el mismo usuario pero con diferente contraseña

      $sql = “SELECT idusuario FROM usuarios WHERE usuario = ‘”.$_POST['usuario'].”‘”;
      $rec = mysql_query($sql);
      $verificar_usuario = 0;
      if(mysql_num_fields($rec) > 0)
      {
      $verificar_usuario = 1;
      }

      esta es una manera sencilla, contamos cuantos usuarios existen en la tabla con el nombre ingresado por el formulario, devolvera las tuplas en la tabla que su usuario sea el contenido de $_POST['usuario'], en este caso utilize el idusuario para que no sea tanto traspaso de informacion innecesaria, ya que hacer un SELECT * es mover mucha informacion y al motor le podria doler con el tiempo

      ahora, contamos cuantas tuplas devolvio la consulta, si es + de 0, quiere decir que ya existe un usuario y zas, no se deberia registrar, lo otro es casi lo mismo B:

  • fran

    Todos hacen lo mismo copian y pegan y no saben si sirve o no… He hecho todos los formularios que estan en internet y ninguno sirven o le falta algo o la base de datos no sirve o algo parecido pero ninguno sirven, y si me dedico a criticar porque antes de postear algo que no sirve deberian probarlo primero, y lo segundo y se esto sirve deberian ser mas detallista a la hora de publicar algo para los que no saben como es mi caso.

    Cree todos los archivos y del formulario no pasa, dicha sea de paso que el formulario esta mal explicado no se sabe que se hace con el cuadro largo que esta debajo de los form, donde va, si es un archivo aparte, con que se come eso… ademas creo que falta uno llamado registrar.php aunque no se porque desconozco solo por referencias de otros logging que he visto, y cuando estoy emocionado ninguno han corrido, ya molesta. solo por postear algo o ganar puntos.

    • http://www.interfazdigital.com Carlos Andrés Restrepo

      @fran el codigo donde se almacena en la base de datos si aparece en el index.php en la siguiente linea
      $sql = “INSERT INTO usuarios (usuario,password) VALUES (‘$usuario’,'$password’)”;
      allí registra al usuario. Pero probe el demo y siempre me dice “Usted se ha registrado correctamente.” aun que registre el mismo usuario

      • http://www.josueochoa.com Josue Ochoa

        Por motivos de seguridad, el demo no esta conectado a una base de datos, es solo una demostracion de como funcionaria.

    • http://www.josueochoa.com Josue Ochoa

      “He hecho todos los formularios que estan en internet y ninguno sirven”
      Tal vez el problema no radique en ellos, sino en ti, no generalices.

      “para los que no saben como es mi caso.”
      No se si te has dado cuenta pero al inicio del tutorial dice muy claramente “Dificultad: Intermedio”, si no tienes ese nivel de conocimiento ¿que haces aca?

      “dicha sea de paso que el formulario esta mal explicado no”
      665 palabras y esta mal explicado…

      Antes de comentar algo piensa en lo que vas a decir, para que no quedes en ridiculo.

  • Aramando

    Hola Josué me gusta mucho tu página, me ayuda saber cómo se integra el php con el front end , ¿me gustaría saber si has manejado en algún proyecto con Json? , ¿Cuáles son sus las ventajas y desventajas de usarlo?, (agradecería mucho un ejemplo práctico =P) he escuchado mucho sobre ello, pero la verdad no veo muy claro el por qué usarlo, en mi pequeños proyectos el manejo de datos lo hago desde peticiones a la base de datos con php como en los tutoriales que realizas saludos.

    • http://www.josueochoa.com Josue Ochoa

      He escuchado de JSON pero nunca me he adentrado mucho en ello, tengo entendido que tiene que ver con el intercambio de datos del lado del servidor (JavaScript) de forma avanzada.

  • Juan Esteban

    Gracias por el gran aporte, te cuento todo me ha salido a la perfeccion solo que no me esta funcionando la comprobacion cuando el usuario ya existe simplemente me lo inserta en la base de datos y me actualiza el password .. en q puedo esta fallando?

    • http://edwindpineda.com Edwind Pineda

      debes haber seguido mal los pasos, eso no debe de ocurrir

      • Juan Esteban

        yo estoy acomodando el formulario a un software q tengo las tablas son … UID q es donde se almacena el usuario y password para las claves…. ya hice los cambios para q me inserte los usuarios pero no me funciona la validacion cuando un usuario ya existe…. q podria estar haciendo mal?

      • Juan Esteban

        Ya me funciono sorry por el momento noob…….. Muchas gracias por el codigo

  • http://estebansequeira.com/ Esteban Sequeira

    Gracias por el tutorial, me ha sido de mucha útilidad.

    • http://edwindpineda.com Edwind Pineda

      me da mucho gusto saberlo

  • http://Iriart juan

    muy buen sistema, pero no uses while para ver el tema de los usuarios, directamente pregunta si el usuario y la contraseña existen y si se corresponden nada mas. Y esta muy bien el tutorial como para empezar pero te falta la parte de seguridad, por ejemplo mysql_real_escape_string($_POST['usuario'])… pero la verdad, excelentemente explicado… muy claro.

  • http://www.nukeko.com.ve Alfredo

    saludos se que no viene al tema pero alguien sabe como editar un archivo php mediante un formulario con esta estructura

    <?php
    // datos para la conexion a mysql
    define('DB_SERVER','localhost');
    define('DB_NAME','TU_BASE_DE_DATOS');
    define('DB_USER','TU_USUARIO');
    define('DB_PASS','TU_CLAVE');

  • edgar

    En que parte se inserta el codigo CSS ??

  • Ensei

    edgar debes crear un archivo .css, por ejemplo “estilo.css” y enlazarlo desde el index.php adentro de las etiquetas , tambien puedes puedes ponerlo dentro de la misma pagina index, pero para mi gusto eso no se ve muy bien…… por otra parte buena la explicación y el ejemplo del registro de usuarios.

  • Ensei

    adentro de las etiquetas HEAD, saludos

  • http://www.alertafluor.cl Psico

    ¿hay que configurar MySQL del hosting para resivir datos de un formulario?

  • iltse

    Tengo una duda como puedo condicionar un campo para que se oculte con un hidden mientras no se cumpla la condicion???

    • http://www.edwindpineda.com Edwind Pineda

      ahi tienes que usar ajax, tenemos un tutorial por ahi.

  • http://www.indiefr.xtrweb.com/ Gerardo Salazar

    que hay estoy creando una pagina web ala cual le metere un sistema de resgistro de usuario el problema es que cuando sigo este tuto para inicializarme en eso, sale todo bien conecta y todo pero al darle registrar sale un error SQL y es el siguiente:

    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\PhpProject1\registro.php on line 71

    y no me registra nada en la BD checando con queryBrowser… ¿cual es el error?

    • http://www.edwindpineda.com Edwind Pineda

      Estas usando mal las sintaxis del mysql seguro.

  • http://Manzanarez Lavinia

    Me gusta mucho tu pagina, estoy empezando en esto del desarrollo web y he encontrado muy buenas cosas aqui, me quiero poner las pilas con css y javaScript!
    Felicidades y no te voy a decir que sigas así más bien que mejores aún más! :D

    • http://www.edwindpineda.com Edwind Pineda

      Muchas Gracias!

  • http://www.tuwebnet.com Liberto

    Hola,

    He creado una BD de usuarios, en esa BD se van creando usuarios q se registran en un formulario de registro, como hago para que cada vez que alguien se registra correctamente me llegue un email de nuevo usuario o nuevo registro, gracias.

    • http://www.edwindpineda.com Edwind Pineda

      usando la funcion mail de php, en la parte donde se estan ingresando los datos a la BD y sale el mensaje de “Usted se ha registrado correctamente.”
      Saludos

  • david

    hola amigo tenga un muy cordial saludo me estoy iniciando en lo que es diseño y desarrollo web y tus tutoriales me han sido de mucha utilidad me preguntaba si no tendrás un tutorial de búsquedas dinámicas para una base de datos en mysql.

  • Marta Daniela

    Hola amigos,

    Podrían poner un ejemplo para el envio de un mail desde php? Les estaria muy agradecida.

  • Pingback: Como hacer un Sistema de Registro de usuarios en PHP con MySQL | WebTursos | Celia Pérez

  • ander

    Me pueden ayudar no me funciona me sale esto abajo del formulario de registro y no funiona
    usuario == $_POST['usuario']) { $verificar_usuario = 1; } } if($verificar_usuario == 0) { if($_POST['password'] == $_POST['repassword']) { $usuario = $_POST['usuario']; $password = $_POST['password']; $sql = “INSERT INTO usuarios (usuario,password) VALUES (‘$usuario’,'$password’)”; mysql_query($sql); echo ‘Usted se ha registrado correctamente.’; } else { echo ‘Las claves no son iguales, intente nuevamente.’; } } else { echo ‘Este usuario ya ha sido registrado anteriormente.’; } } }

  • Pingback: Como hacer un Sistema de Login de usuarios en PHP con MySQL | WebTursos

  • http://cubafit.de pedro

    como puedo hago para que ciertas webs de mi pagina no tengan el acceso sin Registrarse ????

    • http://edwindpineda.com Edwind Pineda

      no le pongas que busque si existe la variable de session.

  • Fernando

    Me da un error “Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /public_html/Usuarios/registro/index.php on line 71” que hago mal ?

    Linea 71 “while($result = mysql_fetch_object($rec))”

    • http://edwindpineda.com Edwind Pineda

      que estas poniendo en la variable $sql?

      • Fernando

        Ah, ps no se como decirte pero soy nuevo en esto y no edite esa variable. Que debería poner ?

        • http://edwindpineda.com Edwind Pineda

          derrepente tu base datos o tu tabla no se llama igual como el que puse en el tutorial o no estan ingresando bien los datos de las variables para hacer las consultas.

          • Fernando

            No entiendo porque no me anda, hice descarga y cree la base de datos con tu código sql, no se cual es el error.

          • Fernando

            No se como pero ya me anda. Pero aun no me funciona me sale una par de lineas bajo el formulario y muestran esto.

            usuario == $_POST['usuario']) { $verificar_usuario = 1; } } if($verificar_usuario == 0) { if($_POST['password'] == $_POST['repassword']) { $usuario = $_POST['usuario']; $password = $_POST['password']; $sql = “INSERT INTO usuarios (usuario,password) VALUES (‘$usuario’,'$password’)”; mysql_query($sql); echo ‘Usted se ha registrado correctamente.’; } else { echo ‘Las claves no son iguales, intente nuevamente.’; } } else { echo ‘Este usuario ya ha sido registrado anteriormente.’; } } }

            Que pasaria ?

          • http://edwindpineda.com Edwind Pineda

            modificaste los datos de la conexión al mysql?

          • Fernando

            No lo modifique

          • Fernando

            Aah! que diga si puse los datos de mi usuario y esas cosas pero no modifique $sql

  • Emilio

    Hola! He encontrado tu web y me parece fantástica.
    Sin embargo, tengo una duda en este tutorial: no sé hacer el primer paso pues nunca he usado MySQL y lo único que he conseguido es tener una cuenta en la base de datos, pero no tengo ni idea de cómo implementar el código para la tabla…
    Gracias por la atención
    Y uso 000webhost por si ayuda :D

  • samuel

    hola edwind, soy nuevo en esta página y ya tengo un año programando en php pero nunca e sabido para que sirve la flecha en php “->” disculpa mi ignorancia pero por lo que veo en la linea 15 del codigo php ($result->usuario) podría pensar que es para seleccionar el elemento de arreglo. espero me lo puedas explicar o facilitar algún tutorial o manual donde pueda comprender su funcionamiento. Gracias de antemano

    • http://edwindpineda.com Edwind Pineda

      cuando usas mysql_fetch_object se usan esas flechas para llamar al campo de la tabla en la base de datos

  • Fernando

    Bajo el formulario me aparece esto..

    usuario == $_POST['usuario']) { $verificar_usuario = 1; } } if($verificar_usuario == 0) { if($_POST['password'] == $_POST['repassword']) { $usuario = $_POST['usuario']; $password = $_POST['password']; $sql = “INSERT INTO usuarios (usuario,password) VALUES (‘$usuario’,'$password’)”; mysql_query($sql); echo ‘Usted se ha registrado correctamente.’; } else { echo ‘Las claves no son iguales, intente nuevamente.’; } } else { echo ‘Este usuario ya ha sido registrado anteriormente.’; } } }

  • Cristian

    hey men sube los archivos de nuevo por favor que trate de bajarlos y están caídos, gracias….. y el demo también esta caído….