16 noviembre, 2024
Crear un login con Php y Mysql
Para programar un login con sesiones en PHP y MySQL con niveles de acceso (por ejemplo, Admin y User), necesitamos seguir algunos pasos adicionales para gestionar los roles y permisos de los usuarios. Aquí te guiaré paso a paso para crear este sistema.

Suscríbete a nuestro canal en Youtube
SuscríbirsePara programar un login con sesiones en PHP y MySQL con niveles de acceso (por ejemplo, Admin y User), necesitamos seguir algunos pasos adicionales para gestionar los roles y permisos de los usuarios. Aquí te guiaré paso a paso para crear este sistema.
Creación de la base de datos
Primero, creamos una base de datos con una tabla de usuarios que incluya el campo role
para asignar diferentes niveles de acceso.
CREATE DATABASE my_database;
USE my_database;
CREATE TABLE users (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL,
role ENUM('admin', 'user') DEFAULT 'user' NOT NULL
);
role
: Es un campo de tipoENUM
que define el nivel de acceso del usuario (admin
ouser
).
Conexión a la base de datos (db.php)
Creamos un archivo db.php
para gestionar la conexión a la base de datos:
<?php
$servername = "localhost";
$username = "root"; // Cambia por tu usuario
$password = ""; // Cambia por tu contraseña
$dbname = "my_database"; // Nombre de la base de datos
try {
$pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
Registro de usuario (register.php)
A continuación, un formulario para registrar a los usuarios, donde asignamos un role
por defecto (en este caso, user
):
<?php
include('db.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$role = $_POST['role']; // Si quieres permitir que el admin lo elija
// Hash de la contraseña
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
// Insertar en la base de datos
$sql = "INSERT INTO users (username, password, email, role) VALUES (?, ?, ?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$username, $hashed_password, $email, $role]);
echo "Usuario registrado con éxito.";
}
?>
<form method="post">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<input type="email" name="email" placeholder="Email" required>
<select name="role">
<option value="user">Usuario</option>
<option value="admin">Administrador</option>
</select>
<button type="submit">Register</button>
</form>
Autenticación de usuario con roles (login.php)
En el archivo login.php
, verificamos si el usuario existe y si la contraseña es correcta. Además, asignamos el rol al inicio de sesión para determinar el nivel de acceso:
<?php
session_start();
include('db.php');
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
// Verificar si el usuario existe
$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$username]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user && password_verify($password, $user['password'])) {
// Inicio de sesión exitoso
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
$_SESSION['role'] = $user['role']; // Guardamos el rol
// Redirigir a la página correspondiente según el rol
if ($user['role'] == 'admin') {
header("Location: admin_dashboard.php");
} else {
header("Location: user_dashboard.php");
}
exit;
} else {
// Credenciales incorrectas
echo "Usuario o contraseña incorrectos.";
}
}
?>
<form method="post">
<input type="text" name="username" placeholder="Username" required>
<input type="password" name="password" placeholder="Password" required>
<button type="submit">Login</button>
</form>
Protección de páginas con roles (admin_dashboard.php y user_dashboard.php)
Dependiendo del rol, el usuario será redirigido a diferentes paneles. Asegúrate de que las páginas estén protegidas por el nivel de acceso.
Para el panel del admin (admin_dashboard.php
):
<?php
session_start();
// Verificar si el usuario está autenticado y es admin
if (!isset($_SESSION['user_id']) || $_SESSION['role'] != 'admin') {
header("Location: login.php");
exit;
}
echo "Bienvenido, Admin " . $_SESSION['username'];
?>
<a href="logout.php">Cerrar sesión</a>
Para el panel de usuario (user_dashboard.php
):
<?php
session_start();
// Verificar si el usuario está autenticado y es user
if (!isset($_SESSION['user_id']) || $_SESSION['role'] != 'user') {
header("Location: login.php");
exit;
}
echo "Bienvenido, Usuario " . $_SESSION['username'];
?>
<a href="logout.php">Cerrar sesión</a>
Cerrar sesión (logout.php)
Cerramos la sesión con el archivo logout.php
:
<?php
session_start();
session_unset();
session_destroy();
header("Location: login.php");
exit;
?>
Resumen del flujo de trabajo
- Registro de usuarios: Los usuarios pueden registrarse con un formulario, donde pueden elegir entre el rol
admin
ouser
. - Inicio de sesión: Cuando un usuario se loguea, se verifica si las credenciales son correctas y se asigna el rol de usuario a la sesión.
- Protección de páginas: Se verifica el rol del usuario en las páginas protegidas (como los paneles de administración y usuario).
- Cierre de sesión: Los usuarios pueden cerrar sesión en cualquier momento, lo que destruye la sesión y los redirige al formulario de login.
Leido 25507 veces | 17 usuarios
Descarga del código fuente PHP de Crear un login con Php y Mysql
Accede al código fuente esencial de nuestra aplicación en formato ZIP ó TXT. Ideal para desarrolladores que desean personalizar o integrar nuestra solución.
Opciones de descarga
- Usuarios Registrados: Inicia sesión para descarga inmediata.
- Nuevos Usuarios: Regístrate y descarga.