File "diagnostico.php"
Full Path: C:/wamp64/www/Asistencia_Capacitacion/diagnostico.php
File size: 6.78 KB
MIME-type: text/x-php
Charset: utf-8
<?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>";
?>