Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/LVHJ-8/Proyecto_mecanica/llms.txt

Use this file to discover all available pages before exploring further.

Toda la configuración de LUVEN Taller & Repuestos está centralizada en un único archivo: adisionales/conexion.php. No existe ningún archivo .env ni constantes dispersas en el proyecto: cualquier cambio de entorno (puerto, contraseña, nombre de base de datos) se realiza editando directamente ese archivo antes de la primera ejecución. Esta sección describe cada variable disponible, las opciones PDO activas y los pasos para garantizar que las subidas de imágenes funcionen correctamente.

Archivo de conexión: adisionales/conexion.php

El archivo crea una instancia PDO global ($pdo) que todos los demás scripts del proyecto incluyen mediante require_once. Su contenido completo es:
<?php
$host     = 'localhost';
$port     = '3307'; // Puerto predeterminado de XAMPP
$db       = 'mecanica';
$user     = 'root';
$password = ''; // Vacío si no configuraste contraseña en XAMPP
$charset  = 'utf8mb4';

$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

$dsn = "mysql:host=$host;port=$port;dbname=$db;charset=$charset";

try {
    $pdo = new PDO($dsn, $user, $password, $options);
} catch (\PDOException $e) {
    die("Error crítico de conexión: " . $e->getMessage());
}

Variables de configuración

VariableValor por defectoDescripción
$hostlocalhostHostname del servidor MySQL. Cambia a la IP del servidor en producción.
$port3307Puerto MySQL. XAMPP usa 3307 por defecto; la mayoría de servidores usan 3306.
$dbmecanicaNombre de la base de datos. Debe coincidir con la base creada en phpMyAdmin.
$userrootUsuario MySQL. En producción, usa un usuario con privilegios limitados.
$password''Contraseña MySQL. Vacío en instalaciones XAMPP sin contraseña configurada.
$charsetutf8mb4Codificación de caracteres. No cambies este valor para mantener soporte de tildes.

Opciones PDO activas

Las tres opciones configuradas en el array $options afectan el comportamiento de todas las consultas del sistema:
Opción PDOValorEfecto
ATTR_ERRMODEERRMODE_EXCEPTIONLos errores SQL lanzan una excepción PDOException en lugar de devolver false silenciosamente.
ATTR_DEFAULT_FETCH_MODEFETCH_ASSOCLos resultados de fetch() y fetchAll() devuelven arrays asociativos (claves = nombres de columna).
ATTR_EMULATE_PREPARESfalseLas sentencias preparadas son ejecutadas directamente por el driver MySQL nativo, sin emulación PHP.

Gestión de sesiones

Las sesiones PHP se inician en cada script mediante la siguiente verificación, que evita el error “headers already sent” cuando un archivo es incluido más de una vez:
<?php
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}
El sistema almacena tres variables en $_SESSION al hacer login:
Clave de sesiónContenidoUso
$_SESSION['usuario_id']id del usuario en tabla usuariosAsociar citas y acciones al usuario autenticado
$_SESSION['nombre']Nombre completo del usuarioMostrar saludo en vistas
$_SESSION['rol']'admin' o 'cliente'Controlar acceso al panel ADMIN y redirección post-login
La redirección inteligente en adisionales/auth.php envía al usuario a ADMIN/admin.php si su rol es admin, o a index.html si es cliente.

Rutas de subida de imágenes

El panel de administración permite subir imágenes para tres tipos de entidades. Cada tipo usa un subdirectorio específico dentro de assets/img/:
EntidadDirectorio de destinoScript que realiza la subida
Productosassets/img/productos/ADMIN/productos/procesar_producto.php
Marcas de vehículosassets/img/marcas/ADMIN/marcas/procesar_marca.php
Modelos de vehículosassets/img/modelos/ADMIN/modelos_De_veiculos/procesar_modelo.php
Estos tres directorios deben existir y ser escribibles por el proceso de Apache antes de intentar subir cualquier imagen. En Windows con XAMPP esto ocurre automáticamente. En Linux:
mkdir -p assets/img/productos assets/img/marcas assets/img/modelos
chmod 755 assets/img/productos assets/img/marcas assets/img/modelos

Errores comunes y soluciones

Este error significa que PHP no puede establecer conexión con el servidor MySQL. Las causas más frecuentes son:
  • MySQL no está en ejecución: abre el XAMPP Control Panel y verifica que el módulo MySQL muestre fondo verde. Si no arranca, revisa el log de XAMPP para detectar conflictos de puerto.
  • Puerto incorrecto: si MySQL arrancó en el puerto 3306 pero conexion.php tiene $port = '3307', la conexión fallará. Ajusta el valor de $port para que coincida con el puerto real que muestra XAMPP.
  • Host incorrecto en producción: en servidores compartidos el host no suele ser localhost sino el nombre del servidor de base de datos que indica el panel de hosting. Actualiza $host con ese valor.
MySQL rechaza las credenciales enviadas. Esto ocurre cuando:
  • Configuraste una contraseña para el usuario root en XAMPP pero $password sigue vacío en conexion.php. Edita el archivo y coloca la contraseña correcta:
    $password = 'tu_contraseña_real';
    
  • En servidores de producción el usuario root suele estar desactivado para conexiones remotas. Crea un usuario dedicado en phpMyAdmin con permisos solo sobre la base de datos mecanica y actualiza $user y $password en conexion.php.
El panel de administración comprueba que $_SESSION['rol'] === 'admin' al inicio de cada archivo PHP en ADMIN/. Si ves una redirección inmediata al login, puede deberse a:
  • El usuario existe pero tiene rol cliente: accede a phpMyAdmin, abre la tabla usuarios, localiza tu usuario y cambia la columna rol de cliente a admin.
    UPDATE usuarios SET rol = 'admin' WHERE correo = '[email protected]';
    
  • La sesión expiró: el tiempo de vida de sesión de PHP por defecto es 24 minutos de inactividad. Simplemente vuelve a iniciar sesión.
  • Cookies bloqueadas: si el navegador bloquea cookies de terceros o está en modo incógnito con cookies desactivadas, las sesiones PHP no persisten. Usa una ventana normal del navegador.
El sistema guarda solo el nombre del archivo en la base de datos y construye la ruta relativa en el HTML. Si las imágenes no se muestran, verifica:
  • Los directorios no existen: comprueba que assets/img/productos/, assets/img/marcas/ y assets/img/modelos/ estén creados dentro de la carpeta del proyecto. Si no existen, PHP no puede guardar el archivo y registra el nombre en la base de datos apuntando a un archivo inexistente.
  • Permisos de escritura insuficientes (Linux/macOS): Apache debe poder escribir en esos directorios. Ejecuta chmod 755 sobre cada subdirectorio o asigna el propietario correcto con chown www-data.
  • Extensión de archivo no permitida: los formularios de subida aceptan imágenes estándar (jpg, jpeg, png, gif, webp). Archivos con extensiones distintas no serán movidos al directorio de destino.

Build docs developers (and LLMs) love