104 lines
4.3 KiB
PHP
104 lines
4.3 KiB
PHP
<?php
|
|
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
|
|
|
|
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;
|
|
}
|
|
|
|
// --- GETTERS Y SETTERS (Métodos públicos para acceder y modificar los datos privados de forma segura) ---
|
|
|
|
// Getter para obtener el ID del usuario (es de solo lectura, no tiene setter)
|
|
public function getIdUsuario(): ?int {
|
|
return $this->id_usuario;
|
|
}
|
|
|
|
// Getter para obtener el nombre de usuario
|
|
public function getNombreUsuario(): string {
|
|
return $this->nombre_usuario;
|
|
}
|
|
|
|
// Setter para cambiar el nombre de usuario desde fuera de la clase
|
|
public function setNombreUsuario(string $nombre_usuario): void {
|
|
$this->nombre_usuario = $nombre_usuario;
|
|
}
|
|
|
|
// Getter para obtener la contraseña
|
|
public function getContrasena(): string {
|
|
return $this->contrasena;
|
|
}
|
|
|
|
// Setter para cambiar la contraseña desde fuera de la clase
|
|
public function setContrasena(string $contrasena): void {
|
|
$this->contrasena = $contrasena;
|
|
}
|
|
|
|
// Getter para obtener el correo electrónico
|
|
public function getEmail(): string {
|
|
return $this->email;
|
|
}
|
|
|
|
// Setter para cambiar el correo electrónico desde fuera de la clase
|
|
public function setEmail(string $email): void {
|
|
$this->email = $email;
|
|
}
|
|
|
|
// --- 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);
|
|
|
|
// 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
|
|
}
|
|
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);
|
|
|
|
// 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']);
|
|
}
|
|
return null; // Si no se encuentra el usuario, devolvemos null
|
|
}
|
|
}
|
|
|
|
<?php |