Skip to content

Conversation

@Thomas465xd
Copy link

Mejoras en el Router y Página de Error 404
Descripción
Esta PR introduce varias mejoras importantes en nuestra aplicación:

Mejora del Método whereArray:

Actualizamos el método whereArray para utilizar implode(), lo cual hace que la construcción de la consulta SQL sea más legible y robusta.
Escapamos adecuadamente los valores para prevenir inyecciones SQL, mejorando así la seguridad de nuestra aplicación.
Página de Error 404 Personalizada:

Añadimos una página personalizada de error 404 (404.php) para proporcionar una mejor experiencia de usuario cuando se ingresa a una URL que no existe.
La página de error 404 incluye un enlace para regresar a la página principal.
Mejoras en el Router:

Actualizamos el archivo Router.php para redirigir automáticamente a los usuarios a la página de error 404 si intentan acceder a una URL no válida.
Optimizamos el enrutador para mejorar el SEO, asegurando que los motores de búsqueda manejen adecuadamente las páginas no encontradas.
Detalles de Implementación
Método whereArray

`public static function whereArray($array = []) {
$query = "SELECT * FROM " . static::$tabla . " WHERE ";
$conditions = [];

foreach($array as $key => $value) {
    $conditions[] = "${key} = '" . self::$db->real_escape_string($value) . "'";
}

$query .= implode(" AND ", $conditions);

$resultado = self::consultarSQL($query);
return array_shift($resultado);

}
`

Pagina de error 404 (404.php)

`

<title>404 Not Found</title> <style> body { font-family: Arial, sans-serif; background-color: #f0f0f0; text-align: center; padding: 50px; } h1 { font-size: 3rem; color: #333; } p { font-size: 1.2rem; color: #666; } a { color: #007bff; text-decoration: none; } a:hover { text-decoration: underline; } </style>

404 - Página No Encontrada :(

La página que está buscando podría haber sido eliminada, cambiar de nombre o estar temporalmente fuera de servicio.

Volver a Inicio o contactar soporte si cree que esto es un error.

`

Cambios en Router.php

`<?php

namespace MVC;

class Router
{
public array $getRoutes = [];
public array $postRoutes = [];

public function get($url, $fn)
{
    $this->getRoutes[$url] = $fn;
}

public function post($url, $fn)
{
    $this->postRoutes[$url] = $fn;
}

public function comprobarRutas()
{
    $currentUrl = $_SERVER['PATH_INFO'] ?? '/';
    $method = $_SERVER['REQUEST_METHOD'];

    if ($method === 'GET') {
        $fn = $this->getRoutes[$currentUrl] ?? null;
    } else {
        $fn = $this->postRoutes[$currentUrl] ?? null;
    }


    //if ( $fn ) {
    //    // Call user fn va a llamar una función cuando no sabemos cual sera
    //    call_user_func($fn, $this); // This es para pasar argumentos
    //} else {
    //    echo "Página No Encontrada o Ruta no válida";
    //}

    if (!$fn) {
        http_response_code(404);
        include_once __DIR__ . '/views/404.php';
        return;
    }

    // If route is found, call the associated function
    call_user_func($fn, $this);
}

public function render($view, $datos = [])
{
    foreach ($datos as $key => $value) {
        $$key = $value; 
    }

    ob_start(); 

    include_once __DIR__ . "/views/$view.php";

    $contenido = ob_get_clean(); // Limpia el Buffer

    // Utilizar el layout de acuerdo a la URL
    $currentUrl = $_SERVER['PATH_INFO'] ?? '/';

    if(str_contains($currentUrl, 'admin')) {
        include_once __DIR__ . '/views/admin-layout.php';
    } else {
        include_once __DIR__ . '/views/layout.php';
    }
}

}`

Impacto en el SEO
La nueva página de error 404 está optimizada con meta etiquetas adecuadas para mejorar el SEO.
Las redirecciones automáticas a la página de error 404 aseguran que los motores de búsqueda manejen correctamente las URLs no válidas, evitando así posibles penalizaciones.
Pruebas
Se probaron todas las rutas existentes para asegurarse de que redirigen correctamente a la nueva página de error 404 cuando se ingresan URLs inválidas.
Se verificó que el método whereArray construye y ejecuta correctamente las consultas SQL.
Por favor, revisa estos cambios y apruébalos si todo está en orden.

Cambie la funcion whereArray($array = []) por una version mas robusta y mejorada que evita la inyeccion SQL y admas previene los errores de sintaxis. 

Ventajas: 

Legibilidad Mejorada:

El uso de implode() hace que el propósito del código sea más claro y directo: construir una cadena de condiciones separadas por AND.
El código es más fácil de leer y entender sin tener que seguir la lógica de concatenación dentro del bucle foreach.
Mantenimiento Simplificado:

Es más fácil agregar o modificar condiciones en el array $conditions que manipular la lógica de concatenación dentro del bucle.
Eliminar la lógica condicional dentro del bucle (if($key == array_key_last($array))) reduce la complejidad y hace que el código sea menos propenso a errores.
Evita Problemas de Sintaxis:

Al utilizar implode(), no hay riesgo de olvidar quitar el último AND de la cadena resultante, lo cual es un problema común en la construcción manual de cadenas de condiciones.
Escapado de Valores:

En el código mejorado, los valores son escapados utilizando self::$db->real_escape_string($value), lo cual mejora la seguridad y previene inyecciones SQL.
Agrega una pagina de 404 personalizada para que si el usuario ingresa a una URL que ya no existe o que esta rota, no se le muestre la tipica pagina de 404, sino una personalizada con un boton para volver a la página principal.
Ahora el router tiene un performance mas organizado y maneja las solicitudes para cuando un usuario llega a una URL deprecada, rota o que fue cambiada y lo redirecciona a la pagina de error personalizada 404.php para que pueda volver a la página principal. Además esto mejora el SEO de la página
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant