<?php // File: diagnostico.php (colocar en la raíz del proyecto) // Este archivo es TEMPORAL para diagnosticar el problema session_start(); require_once 'Modelos/Database.php'; require_once 'Modelos/MenuModel.php'; echo "<h1>Diagnóstico del Sistema de Asistencias</h1>"; echo "<style> body { font-family: Arial; padding: 20px; background: #f5f5f5; } h2 { color: #ff8c00; border-bottom: 2px solid #ff8c00; padding-bottom: 5px; } pre { background: white; padding: 15px; border-radius: 5px; overflow-x: auto; } .success { color: green; font-weight: bold; } .error { color: red; font-weight: bold; } table { width: 100%; border-collapse: collapse; background: white; margin: 10px 0; } th, td { padding: 10px; border: 1px solid #ddd; text-align: left; } th { background: #ff8c00; color: white; } </style>"; try { $db = Database::getInstance()->getConnection(); echo "<p class='success'>✓ Conexión a base de datos exitosa</p>"; // 1. Verificar total de registros echo "<h2>1. Total de registros en la tabla 'asistencia'</h2>"; $stmt = $db->query("SELECT COUNT(*) as total FROM asistencia"); $total = $stmt->fetch(PDO::FETCH_ASSOC); echo "<p>Total de registros: <strong>" . $total['total'] . "</strong></p>"; // 2. Verificar estructura de la tabla echo "<h2>2. Estructura de la tabla 'asistencia'</h2>"; $stmt = $db->query("DESCRIBE asistencia"); $estructura = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "<table>"; echo "<tr><th>Campo</th><th>Tipo</th><th>Nulo</th><th>Clave</th><th>Default</th></tr>"; foreach ($estructura as $col) { echo "<tr>"; echo "<td>" . $col['Field'] . "</td>"; echo "<td>" . $col['Type'] . "</td>"; echo "<td>" . $col['Null'] . "</td>"; echo "<td>" . $col['Key'] . "</td>"; echo "<td>" . ($col['Default'] ?? 'NULL') . "</td>"; echo "</tr>"; } echo "</table>"; // 3. Verificar fechas disponibles echo "<h2>3. Fechas disponibles en la tabla</h2>"; $stmt = $db->query(" SELECT DATE(fecha) as fecha, COUNT(*) as registros FROM asistencia WHERE fecha IS NOT NULL AND fecha != '0000-00-00' GROUP BY DATE(fecha) ORDER BY fecha DESC LIMIT 10 "); $fechas = $stmt->fetchAll(PDO::FETCH_ASSOC); if (empty($fechas)) { echo "<p class='error'>⚠ No se encontraron fechas válidas</p>"; } else { echo "<table>"; echo "<tr><th>Fecha</th><th>Registros</th></tr>"; foreach ($fechas as $f) { echo "<tr><td>" . $f['fecha'] . "</td><td>" . $f['registros'] . "</td></tr>"; } echo "</table>"; } // 4. Verificar registros de HOY echo "<h2>4. Registros de HOY (" . date('Y-m-d') . ")</h2>"; $stmt = $db->prepare(" SELECT COUNT(*) as total, SUM(CASE WHEN hora IS NOT NULL AND hora != '' THEN 1 ELSE 0 END) as con_hora, SUM(CASE WHEN horaSalida IS NOT NULL AND horaSalida != '' THEN 1 ELSE 0 END) as con_salida FROM asistencia WHERE DATE(fecha) = CURDATE() "); $stmt->execute(); $hoy = $stmt->fetch(PDO::FETCH_ASSOC); echo "<ul>"; echo "<li>Total registros hoy: <strong>" . ($hoy['total'] ?? 0) . "</strong></li>"; echo "<li>Con hora de entrada: <strong>" . ($hoy['con_hora'] ?? 0) . "</strong></li>"; echo "<li>Con hora de salida: <strong>" . ($hoy['con_salida'] ?? 0) . "</strong></li>"; echo "</ul>"; // 5. Muestra de datos recientes echo "<h2>5. Últimos 5 registros en la tabla</h2>"; $stmt = $db->query("SELECT * FROM asistencia ORDER BY fecha DESC, hora DESC LIMIT 5"); $muestra = $stmt->fetchAll(PDO::FETCH_ASSOC); if (empty($muestra)) { echo "<p class='error'>⚠ No hay registros en la tabla</p>"; } else { echo "<table>"; echo "<tr><th>ID</th><th>Nombre</th><th>Fecha</th><th>Hora</th><th>Hora Salida</th><th>Capacitación</th></tr>"; foreach ($muestra as $reg) { echo "<tr>"; echo "<td>" . ($reg['id'] ?? 'N/A') . "</td>"; echo "<td>" . ($reg['nombre'] ?? 'N/A') . "</td>"; echo "<td>" . ($reg['fecha'] ?? 'N/A') . "</td>"; echo "<td>" . ($reg['hora'] ?? 'N/A') . "</td>"; echo "<td>" . ($reg['horaSalida'] ?? 'N/A') . "</td>"; echo "<td>" . ($reg['capacitacion'] ?? 'N/A') . "</td>"; echo "</tr>"; } echo "</table>"; } // 6. Probar el MenuModel echo "<h2>6. Prueba del MenuModel</h2>"; $menuModel = new MenuModel(); // Obtener la fecha más reciente con datos $stmt = $db->query("SELECT DATE(fecha) as fecha FROM asistencia WHERE fecha IS NOT NULL ORDER BY fecha DESC LIMIT 1"); $fechaReciente = $stmt->fetch(PDO::FETCH_ASSOC); if ($fechaReciente) { $fechaPrueba = $fechaReciente['fecha']; echo "<p>Probando con la fecha más reciente: <strong>" . $fechaPrueba . "</strong></p>"; $datos = $menuModel->getDashboardData($fechaPrueba); echo "<pre>"; print_r($datos); echo "</pre>"; } else { echo "<p class='error'>⚠ No se encontró ninguna fecha para probar</p>"; } // 7. Verificar tipos de datos en fecha y hora echo "<h2>7. Análisis de tipos de datos</h2>"; $stmt = $db->query(" SELECT fecha, hora, horaSalida, TYPEOF(fecha) as tipo_fecha, TYPEOF(hora) as tipo_hora FROM asistencia WHERE fecha IS NOT NULL LIMIT 3 "); echo "<p>Nota: MySQL/MariaDB no tiene TYPEOF, pero vamos a ver los valores:</p>"; $stmt = $db->query("SELECT fecha, hora, horaSalida FROM asistencia WHERE fecha IS NOT NULL LIMIT 3"); $tipos = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "<table>"; echo "<tr><th>Fecha (valor)</th><th>Hora (valor)</th><th>Hora Salida (valor)</th></tr>"; foreach ($tipos as $t) { echo "<tr>"; echo "<td>" . var_export($t['fecha'], true) . "</td>"; echo "<td>" . var_export($t['hora'], true) . "</td>"; echo "<td>" . var_export($t['horaSalida'], true) . "</td>"; echo "</tr>"; } echo "</table>"; } catch (Exception $e) { echo "<p class='error'>✗ Error: " . $e->getMessage() . "</p>"; echo "<pre>" . $e->getTraceAsString() . "</pre>"; } echo "<hr>"; echo "<p><strong>Instrucciones:</strong></p>"; echo "<ol>"; echo "<li>Revisa los resultados de arriba</li>"; echo "<li>Verifica que la columna 'fecha' tenga datos válidos</li>"; echo "<li>Verifica que la columna 'hora' tenga datos</li>"; echo "<li>Copia toda esta información y compártela si sigues teniendo problemas</li>"; echo "<li><strong>IMPORTANTE:</strong> Elimina este archivo después de diagnosticar por seguridad</li>"; echo "</ol>"; ?>