User Management System with PHP and MySQL: A Step-by-Step Guide, Exercises of International relations

A comprehensive guide to building a user management system using php and mysql. It covers the essential components, including database configuration, model creation, user controllers, authentication, and view implementation. Code examples and explanations for each step, making it suitable for beginners and experienced developers alike.

Typology: Exercises

2023/2024

Uploaded on 03/14/2025

rogel-avila
rogel-avila ๐Ÿ‡บ๐Ÿ‡ธ

1 document

1 / 8

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Estructura del Proyecto
arduino
proyecto_control_usuarios/
โ”‚
โ”œโ”€โ”€ config/
โ”‚ โ”œโ”€โ”€ database.php
โ”‚ โ””โ”€โ”€ config.php
โ”‚
โ”œโ”€โ”€ controllers/
โ”‚ โ”œโ”€โ”€ UsuarioController.php
โ”‚ โ””โ”€โ”€ AuthController.php
โ”‚
โ”œโ”€โ”€ models/
โ”‚ โ””โ”€โ”€ Usuario.php
โ”‚
โ”œโ”€โ”€ views/
โ”‚ โ”œโ”€โ”€ usuarios/
โ”‚ โ”‚ โ”œโ”€โ”€ crear.php
โ”‚ โ”‚ โ”œโ”€โ”€ editar.php
โ”‚ โ”‚ โ””โ”€โ”€ listar.php
โ”‚ โ”‚
โ”‚ โ””โ”€โ”€ auth/
โ”‚ โ”œโ”€โ”€ login.php
โ”‚ โ””โ”€โ”€ registro.php
โ”‚
โ”œโ”€โ”€ public/
โ”‚ โ”œโ”€โ”€ css/
โ”‚ โ”œโ”€โ”€ js/
โ”‚ โ””โ”€โ”€ index.php
โ”‚
โ””โ”€โ”€ helpers/
โ”œโ”€โ”€ validacion.php
โ””โ”€โ”€ autenticacion.php
1. Configuraciรณn de la Base de Datos
Archivo:๎˜config/database.php
php
<?php
class Database {
private $host = 'localhost';
private $usuario = 'root';
private $password = '';
private $db_name = 'sistema_usuarios';
private $conexion;
public function conectar(): PDO {
try {
$this->conexion = new PDO("mysql:host={$this->host};dbname={$this-
>db_name}", $this->usuario, $this->password);
pf3
pf4
pf5
pf8

Partial preview of the text

Download User Management System with PHP and MySQL: A Step-by-Step Guide and more Exercises International relations in PDF only on Docsity!

Estructura del Proyecto

arduino

proyecto_control_usuarios/ โ”‚ โ”œโ”€โ”€ config/ โ”‚ โ”œโ”€โ”€ database.php โ”‚ โ””โ”€โ”€ config.php โ”‚ โ”œโ”€โ”€ controllers/ โ”‚ โ”œโ”€โ”€ UsuarioController.php โ”‚ โ””โ”€โ”€ AuthController.php โ”‚ โ”œโ”€โ”€ models/ โ”‚ โ””โ”€โ”€ Usuario.php โ”‚ โ”œโ”€โ”€ views/ โ”‚ โ”œโ”€โ”€ usuarios/ โ”‚ โ”‚ โ”œโ”€โ”€ crear.php โ”‚ โ”‚ โ”œโ”€โ”€ editar.php โ”‚ โ”‚ โ””โ”€โ”€ listar.php โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ auth/ โ”‚ โ”œโ”€โ”€ login.php โ”‚ โ””โ”€โ”€ registro.php โ”‚ โ”œโ”€โ”€ public/ โ”‚ โ”œโ”€โ”€ css/ โ”‚ โ”œโ”€โ”€ js/ โ”‚ โ””โ”€โ”€ index.php โ”‚ โ””โ”€โ”€ helpers/ โ”œโ”€โ”€ validacion.php โ””โ”€โ”€ autenticacion.php

1. Configuraciรณn de la Base de Datos

Archivo: config/database.php

php

conexion = new PDO("mysql:host={$this->host};dbname={$this- >db_name}", $this->usuario, $this->password);

$this->conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $this->conexion; } catch (PDOException $e) { die("Error de conexiรณn: ". $e->getMessage()); } } }

2. Configuraciรณn del Modelo

Archivo: models/Usuario.php

php

conexion = $db->conectar(); } public function crear(array $datos): bool { $query = "INSERT INTO {$this->tabla} (nombre, email, password) VALUES (:nombre, :email, :password)"; $stmt = $this->conexion->prepare($query); $passwordHash = password_hash($datos['password'], PASSWORD_BCRYPT); return $stmt->execute([ ':nombre' => $datos['nombre'], ':email' => $datos['email'], ':password' => $passwordHash, ]); } public function listar(): array { $query = "SELECT * FROM {$this->tabla}"; $stmt = $this->conexion->query($query); return $stmt->fetchAll(PDO::FETCH_ASSOC); } public function obtener(int $id): ?array { $query = "SELECT * FROM {$this->tabla} WHERE id = :id"; $stmt = $this->conexion->prepare($query); $stmt->execute([':id' => $id]); return $stmt->fetch(PDO::FETCH_ASSOC); } public function actualizar(int $id, array $datos): bool { $query = "UPDATE {$this->tabla} SET nombre = :nombre, email = :email WHERE id = :id"; $stmt = $this->conexion->prepare($query); return $stmt->execute([ ':nombre' => $datos['nombre'], ':email' => $datos['email'],

$this->usuarioModel->eliminar($id); header('Location: /usuarios/listar'); } }

4. Controlador de Autenticaciรณn

Archivo: controllers/AuthController.php

php

usuarioModel = $usuario; } public function login() { if ($_SERVER['REQUEST_METHOD'] === 'POST') { $email = $_POST['email']; $password = $_POST['password']; $usuario = $this->usuarioModel->obtenerPorEmail($email); if ($usuario && password_verify($password, $usuario['password'])) { session_start(); $_SESSION['usuario_id'] = $usuario['id']; header('Location: /usuarios/listar'); } else { // Manejar error } } include 'views/auth/login.php'; } public function logout() { session_start(); session_destroy(); header('Location: /login'); } public function registro() { if ($_SERVER['REQUEST_METHOD'] === 'POST') { $datos = [ 'nombre' => $_POST['nombre'], 'email' => $_POST['email'], 'password' => $_POST['password'] ]; $this->usuarioModel->crear($datos); header('Location: /login'); } include 'views/auth/registro.php'; } }

5. Vistas

Vista para Listar Usuarios: views/usuarios/listar.php

php

Lista de Usuarios

Lista de Usuarios Crear Usuario

ID Nombre Email Acciones

Editar Eliminar

Vista para Crear Usuario: views/usuarios/crear.php

php

Crear Usuario

Iniciar Sesiรณn

Email

Contraseรฑa

Ingresar

Vista de Registro: views/auth/registro.php

php

Registro

Registro de Usuario

Nombre

Email

Contraseรฑa

Registrar

6. Rutas

Para que las rutas funcionen adecuadamente, se necesita un front controller en public/index.php. Archivo: public/index.php

php

listar(); break; case '/usuarios/listar': $usuarioController->listar(); break; case '/usuarios/crear': $usuarioController->crear(); break; case (preg_match('/^/usuarios/editar/[0-9]+$/', $request)? true : false): $id = (int)preg_replace('//usuarios/editar//', '', $request); $usuarioController->editar($id); break; case (preg_match('/^/usuarios/eliminar/[0-9]+$/', $request)? true : false): $id = (int)preg_replace('//usuarios/eliminar//', '', $request); $usuarioController->eliminar($id); break; case '/login': $authController->login(); break; case '/registro': $authController->registro(); break; case '/logout': $authController->logout(); break; default: http_response_code(404); echo "404 Not Found"; break; }