Subir archivos a "clases"

This commit is contained in:
2026-09-24 11:02:48 +02:00
parent ee781cb1e7
commit d1c381d7ac
2 changed files with 190 additions and 103 deletions
+81 -46
View File
@@ -3,21 +3,18 @@ require_once '../includes/conexionBD.php';
// Definición de la clase Usuario que representará a los usuarios del sistema
class Usuario {
private ?int $id_usuario;
private string $nombre_usuario;
private string $contrasena;
private string $email;
private PDO $db; // Se mantiene para realizar las consultas dentro de la clase
// ATRIBUTOS (Propiedades privadas para proteger los datos de accesos directos externos)
private ?int $id_usuario; // El ID del usuario (puede ser null si aún no se ha guardado en la base de datos)
private string $nombre_usuario; // El nombre de usuario en texto
private string $contrasena; // La contraseña (normalmente encriptada)
private string $email; // El correo electrónico del usuario
// CONSTRUCTOR: Se ejecuta automáticamente al crear un nuevo objeto (ya no pide base de datos por parámetro)
public function __construct(string $nombre_usuario = "", string $contrasena = "", string $email = "", ?int $id_usuario = null) {
// Hacemos referencia a la variable global $db que se creó en conexion.php
global $db;
$this->db = $db;
$this->id_usuario = $id_usuario;
$this->nombre_usuario = $nombre_usuario;
$this->contrasena = $contrasena;
$this->email = $email;
$this->id_usuario = $id_usuario; // Asigna el ID (por defecto es null si es un registro nuevo)
$this->nombre_usuario = $nombre_usuario; // Asigna el nombre de usuario recibido
$this->contrasena = $contrasena; // Asigna la contraseña recibida
$this->email = $email; // Asigna el email recibido
}
// --- GETTERS Y SETTERS (Métodos públicos para acceder y modificar los datos privados de forma segura) ---
@@ -60,45 +57,83 @@ class Usuario {
// --- MÉTODOS DE BASE DE DATOS (Lógica de negocio e interacción con SQL) ---
// Método para registrar/insertar el usuario actual en la base de datos
public function registrar(): bool {
// Preparamos la consulta SQL usando marcadores (:nombre, :pass, :email) para evitar inyecciones SQL
$sql = "INSERT INTO usuario (nombre_usuario, contrasena, email) VALUES (:nombre, :pass, :email)";
$stmt = $this->db->prepare($sql); // Prepara la consulta en el servidor de la base de datos
// Encriptamos la contraseña con el algoritmo BCRYPT antes de guardarla por seguridad
$passHash = password_hash($this->contrasena, PASSWORD_BCRYPT);
public function registrar() {
// Obtenemos la conexión llamando a tu función unificada del proyecto
$conexion = conexionBD();
// Ejecutamos la consulta pasando los valores reales que sustituirán a los marcadores
$resultado = $stmt->execute([
':nombre' => $this->nombre_usuario,
':pass' => $passHash, // Guardamos la contraseña ya encriptada
':email' => $this->email
]);
// Si la inserción fue exitosa, recuperamos el ID generado por la base de datos y lo asignamos al objeto
if ($resultado) {
$this->id_usuario = (int)$this->db->lastInsertId();
return true; // Devuelve verdadero indicando que se registró correctamente
// Si devuelve un array significa que ocurrió un error controlado al conectar
if (is_array($conexion)) {
return $conexion;
}
try {
// Preparamos la consulta SQL usando marcadores (:nombre, :pass, :email) para evitar inyecciones SQL
$sql = "INSERT INTO usuario (nombre_usuario, contrasena, email) VALUES (:nombre, :pass, :email)";
$stmt = $conexion->prepare($sql); // Prepara la consulta en el servidor de la base de datos
// Encriptamos la contraseña con el algoritmo BCRYPT antes de guardarla por seguridad
$passHash = password_hash($this->contrasena, PASSWORD_BCRYPT);
// Ejecutamos la consulta pasando los valores reales que sustituirán a los marcadores
$stmt->execute([
':nombre' => $this->nombre_usuario,
':pass' => $passHash, // Guardamos la contraseña ya encriptada
':email' => $this->email
]);
// Si la inserción fue exitosa, recuperamos el ID generado por la base de datos y lo asignamos al objeto
$this->id_usuario = (int)$conexion->lastInsertId();
// Devolvemos una respuesta de éxito idéntica al formato del resto de tus clases
return [
'exito' => 'Usuario registrado correctamente',
'exito_tecnico' => $this->id_usuario
];
} catch (PDOException $error) {
// Si ocurre algún fallo en la consulta, capturamos el error y devolvemos la respuesta controlada
return [
'error' => 'Ocurrió un error al registrar el usuario.',
'error_tecnico' => $error->getMessage()
];
}
return false; // Devuelve falso si hubo algún error en la inserción
}
// Método estático para buscar un usuario por su ID sin necesidad de instanciar el objeto previamente
public static function buscarPorId(PDO $db, int $id): ?Usuario {
// Preparamos la consulta SQL filtrando por el ID recibido
$sql = "SELECT * FROM usuario WHERE id_usuario = :id";
$stmt = $db->prepare($sql);
$stmt->execute([':id' => $id]); // Ejecutamos la consulta
// Obtenemos el registro en forma de array asociativo
$datos = $stmt->fetch(PDO::FETCH_ASSOC);
public static function buscarPorId($id) {
// Obtenemos la conexión llamando a tu función unificada del proyecto
$conexion = conexionBD();
// Si el usuario existe en la base de datos, creamos y devolvemos un nuevo objeto Usuario con sus datos
if ($datos) {
return new Usuario($db, $datos['nombre_usuario'], $datos['contrasena'], $datos['email'], $datos['id_usuario']);
// Si devuelve un array significa que ocurrió un error controlado al conectar
if (is_array($conexion)) {
return $conexion;
}
try {
// Preparamos la consulta SQL filtrando por el ID recibido
$sql = "SELECT * FROM usuario WHERE id_usuario = :id";
$stmt = $conexion->prepare($sql);
$stmt->execute([':id' => $id]); // Ejecutamos la consulta
// Obtenemos el registro en forma de array asociativo
$datos = $stmt->fetch(PDO::FETCH_ASSOC);
// Si el usuario existe en la base de datos, creamos y devolvemos un nuevo objeto Usuario con sus datos
if ($datos) {
return new Usuario($datos['nombre_usuario'], $datos['contrasena'], $datos['email'], $datos['id_usuario']);
}
// Si la consulta termina pero no encuentra filas, devolvemos un aviso de error controlado
return [
'error' => 'No se encontró ningún usuario con ese ID.'
];
} catch (PDOException $error) {
// Si ocurre algún fallo en la consulta SQL, capturamos el error
return [
'error' => 'Ocurrió un error al buscar el usuario.',
'error_tecnico' => $error->getMessage()
];
}
return null; // Si no se encuentra el usuario, devolvemos null
}
}
<?php