Curso de PHP y MySQL 19: Registro de Usuarios

Este es el capitulo 19 del Curso de PHP y MySQL. En este capitulo y los 2 próximos pondremos a prueba nuestro conocimiento obtenido a lo largo del Curso, creando un Sistema de Usuarios en PHP y MySQL.

Requisitos:

  • Servidor Web, PHP (5.5 o superior) y MySQL. Ver Capitulo 1
  • Librerías: PHPMailer y reCaptcha
  • Bootstrap

En la descarga al final del post incluimos los formularios con librerías, hojas de estilo, javascripts y archivo sql con la base de datos, la estructura de carpetas es la siguiente:

Para iniciar necesitamos crear una Base de Datos con el nombre login y la siguiente estructura:

--
-- Base de datos: `login`
--
CREATE DATABASE IF NOT EXISTS `login` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `login`;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `tipo_usuario`
--

CREATE TABLE IF NOT EXISTS `tipo_usuario` (
  `id` int(11) NOT NULL,
  `tipo` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `usuarios`
--

CREATE TABLE IF NOT EXISTS `usuarios` (
  `id` int(11) NOT NULL,
  `usuario` varchar(30) NOT NULL,
  `password` varchar(130) NOT NULL,
  `nombre` varchar(100) NOT NULL,
  `correo` varchar(80) NOT NULL,
  `last_session` datetime DEFAULT NULL,
  `activacion` int(11) NOT NULL DEFAULT '0',
  `token` varchar(40) NOT NULL,
  `token_password` varchar(100) DEFAULT NULL,
  `password_request` int(11) DEFAULT '0',
  `id_tipo` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Indices de la tabla `tipo_usuario`
--
ALTER TABLE `tipo_usuario`
  ADD PRIMARY KEY (`id`);

--
-- Indices de la tabla `usuarios`
--
ALTER TABLE `usuarios`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT de la tabla `tipo_usuario`
--
ALTER TABLE `tipo_usuario`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT de la tabla `usuarios`
--
ALTER TABLE `usuarios`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

Ahora en la carpeta de funcs editamos el script conexion.php con nuestros datos de conexión a MySQL (Mas información):

<?php
	$mysqli=new mysqli("localhost","root","password","login"); //servidor, usuario de base de datos, contraseña del usuario, nombre de base de datos
	
	if(mysqli_connect_errno()){
		echo 'Conexion Fallida : ', mysqli_connect_error();
		exit();
	}
?>

También editaremos el script de funcs.php que esta en la carpeta de funcs, en este script solo modificaremos los valores de la función envialEmail() con nuestros datos del correo electrónico desde donde enviaremos los email para activación y recuperación de contraseña (Mas información):

function enviarEmail($email, $nombre, $asunto, $cuerpo){
		
		require_once 'PHPMailer/PHPMailerAutoload.php';
		
		$mail = new PHPMailer();
		$mail->isSMTP();
		$mail->SMTPAuth = true;
		$mail->SMTPSecure = 'tipo de seguridad'; //Modificar
		$mail->Host = 'dominio'; //Modificar
		$mail->Port = puerto; //Modificar
		
		$mail->Username = 'correo emisor'; //Modificar
		$mail->Password = 'password de correo emisor'; //Modificar
		
		$mail->setFrom('correo emisor', 'nombre de correo emisor'); //Modificar
		$mail->addAddress($email, $nombre);
		
		$mail->Subject = $asunto;
		$mail->Body    = $cuerpo;
		$mail->IsHTML(true);
		
		if($mail->send())
		return true;
		else
		return false;
	}

En el script de registro.php debemos modificar la variable $secret con la clave secreta de nuestro reCaptcha así como el data-sitekey del elemento g-recaptcha del formulario con nuestra clave de reCaptcha (Mas Información).

Al enviar el formulario validara que los campos no estén vacíos, que el usuario y correo electrónico no existan en la base de datos, que el correo electrónico sea valido, que las contraseñas coincidan y que el usuario haya completado el sistema de Captcha, si tiene algún dato mal mostrara los mensajes en la parte inferior del formulario:

Al enviar el formulario y los datos estén correctamente nos enviara un pequeño mensaje:

El resultado es el siguiente:

El mensaje puede variar dependiendo de las validaciones:

  • La cuenta ya se activo anteriormente.
  • Cuenta activada.
  • Error al Activar Cuenta
  • No existe el registro para activar.

Nota: Para la generación de password_hash en necesario tener la versión de PHP 5.5 o superior. En caso de tener problemas con el envío de Correo Electrónico y/o reCaptcha verificar el capítulo 14 y 17 donde se habla del tema.

Recuerda suscribirte a nuestro canal de YouTube, ¡¡¡Es Gratis!!!
Tutorial en Vídeo: