• 20 May, 2025

Cómo crear un sistema de Login y Registro con PHP y MySQL explicado paso a paso

Cómo crear un sistema de Login y Registro con PHP y MySQL explicado paso a paso

Crea un sistema de login y registro con PHP y MySQL desde cero, incluyendo validaciones, protección contra SQL Injection y encriptación de contraseñas. Ideal para principiantes.

En este artículo aprenderás cómo crear un sistema de login y registro usando PHP y MySQL, explicado línea por línea. Ideal para principiantes que quieren entender cómo funciona el backend de un sistema de autenticación.


1. Crear la base de datos

Primero, crea una base de datos llamada login_db y dentro de ella la tabla users.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  • username: Será el nombre que el usuario use para iniciar sesión
  • email: También se podrá usar para iniciar sesión
  • password: Se guarda encriptada con password_hash()
  • created_at: Guarda la fecha de creación automáticamente

2. Conexión a la base de datos (db.php)

<?php
$host = "localhost";
$user = "root";
$pass = "";
$dbname = "login_db";

$conn = new mysqli($host, $user, $pass, $dbname);

if ($conn->connect_error) {
    die("Conexión fallida: " . $conn->connect_error);
}
?>
  • $conn: Guarda el objeto de conexión
  • new mysqli: Función de PHP para conectar a MySQL
  • die: Detiene la ejecución si hay error

3. Formulario de registro (register.html)

<form action="register.php" method="POST">
    Nombre de usuario: <input type=text name=username required><br>
    Correo electrónico: <input type=email name=email required><br>
    Contraseña: <input type=password name=password required><br>
    Confirmar contraseña: <input type=password name=confirm_password required><br>
    <input type=submit value="Registrarse">
</form>
  • required: Hace que el campo sea obligatorio
  • method="POST": Envía los datos al archivo PHP para procesarlos

Te puede interesar Como crear un formulario de contacto con HTML y PHP paso a paso

4. Código del registro (register.php)

<?php
include 'db.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = trim($_POST["username"]);
    $email = trim($_POST["email"]);
    $password = $_POST["password"];
    $confirm_password = $_POST["confirm_password"];

    if (empty($username) || empty($email) || empty($password) || empty($confirm_password)) {
        echo "Todos los campos son obligatorios.";
        exit;
    }

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        echo "Correo no válido.";
        exit;
    }

    if ($password !== $confirm_password) {
        echo "Las contraseñas no coinciden.";
        exit;
    }

    $check = $conn->prepare("SELECT id FROM users WHERE username = ? OR email = ?");
    $check->bind_param("ss", $username, $email);
    $check->execute();
    $check->store_result();

    if ($check->num_rows > 0) {
        echo "El usuario o correo ya están registrados.";
        exit;
    }

    $hashed_password = password_hash($password, PASSWORD_DEFAULT);

    $insert = $conn->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
    $insert->bind_param("sss", $username, $email, $hashed_password);

    if ($insert->execute()) {
        echo "Registro exitoso.";
    } else {
        echo "Error al registrar: " . $conn->error;
    }
}
?>
  • trim: Elimina espacios al inicio y final
  • password_hash: Encripta la contraseña
  • prepare/bind_param: Protege contra inyecciones

<form action="login.php" method="POST">
    Usuario o Email: <input type=text name=username_or_email required><br>
    Contraseña: <input type=password name=password required><br>
    <input type=submit value="Iniciar sesión">
</form>

<?php
include 'db.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username_or_email = trim($_POST["username_or_email"]);
    $password = $_POST["password"];

    if (empty($username_or_email) || empty($password)) {
        echo "Todos los campos son obligatorios.";
        exit;
    }

    $stmt = $conn->prepare("SELECT id, username, password FROM users WHERE username = ? OR email = ?");
    $stmt->bind_param("ss", $username_or_email, $username_or_email);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows === 1) {
        $user = $result->fetch_assoc();

        if (password_verify($password, $user["password"])) {
            echo "Bienvenido, " . $user["username"];
        } else {
            echo "Contraseña incorrecta.";
        }
    } else {
        echo "Usuario no encontrado.";
    }
}
?>
  • $result: Resultado de la consulta
  • fetch_assoc: Obtiene los datos en array
  • password_verify: Compara contraseñas

Descargar el archivo zip


Y no tengo más que explicar. Gracias por leer

Ya tienes un sistema funcional de login y registro en PHP con validaciones básicas, protección contra SQL Injection y encriptación de contraseñas.

Te puede interesar como crear un formulario de contacto con HTML y PHP paso a paso

Opcionalmente, puedes mejorar este sistema agregando:

  • session_start() para mantener sesiones iniciadas
  • header("Location: perfil.php") para redirigir después del login
  • Un archivo logout.php para cerrar sesión
  • Diseño visual con CSS o Bootstrap

 

Esgranmore Servicios

Esgranmore Servicios

Publicaciones originales y auténticas de nosotros, brindamos artículos relacionados a nuestros servicios entre otras cosas