Subir archivos a "clases"
This commit is contained in:
+77
-74
@@ -1,97 +1,98 @@
|
||||
<?php
|
||||
require_once '../includes/conexionBD.php';
|
||||
|
||||
// Definición de la clase Usuario que representará a los usuarios del sistema
|
||||
class Usuario {
|
||||
// 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
|
||||
private ?int $idUsuario;
|
||||
private string $nombreUsuario;
|
||||
private string $contrasena;
|
||||
private string $email;
|
||||
private ?string $avatar;
|
||||
private ?string $cookie;
|
||||
private int $aciertos;
|
||||
private int $victorias;
|
||||
private int $derrotas;
|
||||
|
||||
// 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) {
|
||||
$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
|
||||
public function __construct(
|
||||
string $nombreUsuario = "",
|
||||
string $contrasena = "",
|
||||
string $email = "",
|
||||
?string $avatar = null,
|
||||
?string $cookie = null,
|
||||
int $aciertos = 0,
|
||||
int $victorias = 0,
|
||||
int $derrotas = 0,
|
||||
?int $idUsuario = null
|
||||
) {
|
||||
$this->idUsuario = $idUsuario;
|
||||
$this->nombreUsuario = $nombreUsuario;
|
||||
$this->contrasena = $contrasena;
|
||||
$this->email = $email;
|
||||
$this->avatar = $avatar;
|
||||
$this->cookie = $cookie;
|
||||
$this->aciertos = $aciertos;
|
||||
$this->victorias = $victorias;
|
||||
$this->derrotas = $derrotas;
|
||||
}
|
||||
|
||||
// --- 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;
|
||||
}
|
||||
public function getIdUsuario(): ?int { return $this->idUsuario; }
|
||||
|
||||
// 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;
|
||||
}
|
||||
public function getNombreUsuario(): string { return $this->nombreUsuario; }
|
||||
public function setNombreUsuario(string $nombreUsuario): void { $this->nombreUsuario = $nombreUsuario; }
|
||||
|
||||
// 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;
|
||||
}
|
||||
public function getContrasena(): string { return $this->contrasena; }
|
||||
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;
|
||||
}
|
||||
public function getEmail(): string { return $this->email; }
|
||||
public function setEmail(string $email): void { $this->email = $email; }
|
||||
|
||||
// --- MÉTODOS DE BASE DE DATOS (Lógica de negocio e interacción con SQL) ---
|
||||
public function getAvatar(): ?string { return $this->avatar; }
|
||||
public function setAvatar(?string $avatar): void { $this->avatar = $avatar; }
|
||||
|
||||
public function getCookie(): ?string { return $this->cookie; }
|
||||
public function setCookie(?string $cookie): void { $this->cookie = $cookie; }
|
||||
|
||||
public function getAciertos(): int { return $this->aciertos; }
|
||||
public function setAciertos(int $aciertos): void { $this->aciertos = $aciertos; }
|
||||
|
||||
public function getVictorias(): int { return $this->victorias; }
|
||||
public function setVictorias(int $victorias): void { $this->victorias = $victorias; }
|
||||
|
||||
public function getDerrotas(): int { return $this->derrotas; }
|
||||
public function setDerrotas(int $derrotas): void { $this->derrotas = $derrotas; }
|
||||
|
||||
// Método para registrar/insertar el usuario actual en la base de datos
|
||||
public function registrar() {
|
||||
// Obtenemos la conexión llamando a tu función unificada del proyecto
|
||||
$conexion = conexionBD();
|
||||
|
||||
// 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
|
||||
$sql = "INSERT INTO usuario (nombreUsuario, contrasena, email, avatar, cookie, aciertos, victorias, derrotas)
|
||||
VALUES (:nombre, :pass, :email, :avatar, :cookie, :aciertos, :victorias, :derrotas)";
|
||||
$stmt = $conexion->prepare($sql);
|
||||
|
||||
// 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
|
||||
':nombre' => $this->nombreUsuario,
|
||||
':pass' => $passHash,
|
||||
':email' => $this->email,
|
||||
':avatar' => $this->avatar,
|
||||
':cookie' => $this->cookie,
|
||||
':aciertos' => $this->aciertos,
|
||||
':victorias' => $this->victorias,
|
||||
':derrotas' => $this->derrotas
|
||||
]);
|
||||
|
||||
// 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();
|
||||
$this->idUsuario = (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
|
||||
'exito_tecnico' => $this->idUsuario
|
||||
];
|
||||
|
||||
} 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()
|
||||
@@ -99,41 +100,43 @@ class Usuario {
|
||||
}
|
||||
}
|
||||
|
||||
// Método estático para buscar un usuario por su ID sin necesidad de instanciar el objeto previamente
|
||||
public static function buscarPorId($id) {
|
||||
// Obtenemos la conexión llamando a tu función unificada del proyecto
|
||||
$conexion = conexionBD();
|
||||
|
||||
// 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";
|
||||
$sql = "SELECT * FROM usuario WHERE idUsuario = :id";
|
||||
$stmt = $conexion->prepare($sql);
|
||||
$stmt->execute([':id' => $id]); // Ejecutamos la consulta
|
||||
$stmt->execute([':id' => $id]);
|
||||
|
||||
// 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']);
|
||||
return new Usuario(
|
||||
$datos['nombreUsuario'],
|
||||
$datos['contrasena'],
|
||||
$datos['email'],
|
||||
$datos['avatar'],
|
||||
$datos['cookie'],
|
||||
(int)$datos['aciertos'],
|
||||
(int)$datos['victorias'],
|
||||
(int)$datos['derrotas'],
|
||||
(int)$datos['idUsuario']
|
||||
);
|
||||
}
|
||||
|
||||
// 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()
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user