majo
This commit is contained in:
parent
224f6b3bc3
commit
c9cbad01c5
173
Estadisticas.php
173
Estadisticas.php
|
@ -1,173 +0,0 @@
|
|||
<?php
|
||||
session_start();
|
||||
if (!isset($_SESSION['admin'])) {
|
||||
header("Location: sesion.php");
|
||||
exit;
|
||||
}
|
||||
?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Centro de Certificación LANIA</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Bootstrap CSS -->
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Font Awesome para íconos -->
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
|
||||
<style>
|
||||
body {
|
||||
display: flex;
|
||||
}
|
||||
.sidebar {
|
||||
min-width: 250px;
|
||||
height: 400vh;
|
||||
background: rgb(19, 61, 213);
|
||||
color: white;
|
||||
}
|
||||
.sidebar a {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="bg-light">
|
||||
|
||||
<!-- Sidebar -->
|
||||
<nav class="sidebar p-3">
|
||||
<h4 class="text-center mb-4">LANIA</h4>
|
||||
<ul class="nav flex-column">
|
||||
<li class="nav-item"><a class="nav-link" href="Estadisticas.php"><i class="fas fa-tachometer-alt"></i> Estadísticas</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="FormularioInicial.php"><i class="fas fa-user"></i> Formulario de Ingreso</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="FormularioSalida.php"><i class="fas fa-user"></i> Formulario de Salida</a></li>
|
||||
|
||||
<div class="logout-btn text-center">
|
||||
<a href="cierre.php" class="btn btn-danger">
|
||||
<i class="fas fa-sign-out-alt"></i> Cerrar Sesión
|
||||
</a>
|
||||
</div>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="text-center mb-4">
|
||||
<h1 class="display-5">Centro de Certificación LANIA</h1>
|
||||
<p class="lead">Centro de estadísticas de ingreso de los usuarios</p>
|
||||
|
||||
<div class="container">
|
||||
<h3 class="my-4">Estadísticas de Usuarios</h3>
|
||||
<canvas id="graficaEmpresas"></canvas>
|
||||
<canvas id="graficaEstados" class="mt-5"></canvas>
|
||||
<canvas id="graficaEdades" class="mt-5"></canvas>
|
||||
<canvas id="graficaSatisfaccion" class="mt-5"></canvas>
|
||||
|
||||
<div class="mt-4">
|
||||
<button class="btn btn-primary" onclick="descargarCSV()">Descargar CSV</button>
|
||||
<button class="btn btn-danger" onclick="descargarPDF()">Descargar PDF</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
|
||||
|
||||
<script>
|
||||
let datosGlobal = [];
|
||||
|
||||
fetch('model/datos_estadisticas.php')
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
datosGlobal = data;
|
||||
generarGraficas(data);
|
||||
});
|
||||
|
||||
function agruparPor(arr, clave) {
|
||||
return arr.reduce((acc, obj) => {
|
||||
const key = obj[clave] || 'No especificado';
|
||||
acc[key] = (acc[key] || 0) + 1;
|
||||
return acc;
|
||||
}, {});
|
||||
}
|
||||
|
||||
function generarGraficas(data) {
|
||||
const empresas = agruparPor(data, 'empresa');
|
||||
const estados = agruparPor(data, 'estado_procedencia');
|
||||
const edades = agruparPor(data, 'edad');
|
||||
|
||||
const satisfaccion = agruparPor(data, 'encuesta_satisfaccion');
|
||||
|
||||
crearGrafica('graficaEmpresas', 'Empresa de origen', empresas);
|
||||
crearGrafica('graficaEstados', 'Estado de la República', estados);
|
||||
crearGrafica('graficaEdades', 'Rango de Edad', edades);
|
||||
crearGrafica('graficaSatisfaccion', 'Satisfacción', satisfaccion);
|
||||
}
|
||||
|
||||
function crearGrafica(idCanvas, titulo, datos) {
|
||||
new Chart(document.getElementById(idCanvas), {
|
||||
type: 'bar',
|
||||
data: {
|
||||
labels: Object.keys(datos),
|
||||
datasets: [{
|
||||
label: titulo,
|
||||
data: Object.values(datos),
|
||||
backgroundColor: 'rgba(19, 61, 213, 0.7)'
|
||||
}]
|
||||
},
|
||||
options: {
|
||||
responsive: true,
|
||||
plugins: {
|
||||
legend: { display: false },
|
||||
title: {
|
||||
display: true,
|
||||
text: titulo
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function descargarCSV() {
|
||||
const encabezados = ['Empresa', 'Estado', 'Edad', 'Satisfacción'];
|
||||
const filas = datosGlobal.map(d => [d.empresa, d.estado_republica, d.edad, d.encuesta_satisfaccion]);
|
||||
|
||||
let csv = encabezados.join(',') + '\n';
|
||||
filas.forEach(fila => csv += fila.join(',') + '\n');
|
||||
|
||||
const blob = new Blob([csv], { type: 'text/csv' });
|
||||
const url = URL.createObjectURL(blob);
|
||||
const a = document.createElement('a');
|
||||
a.href = url;
|
||||
a.download = 'estadisticas.csv';
|
||||
a.click();
|
||||
}
|
||||
|
||||
function descargarPDF() {
|
||||
const { jsPDF } = window.jspdf;
|
||||
const doc = new jsPDF();
|
||||
doc.text("Estadísticas de Usuarios", 10, 10);
|
||||
let y = 20;
|
||||
|
||||
datosGlobal.forEach((d, i) => {
|
||||
doc.text(`${i+1}. Empresa: ${d.empresa}, Estado: ${d.estado_republica}, Edad: ${d.edad}, Satisfacción: ${d.encuesta_satisfaccion}`, 10, y);
|
||||
y += 10;
|
||||
if (y > 270) {
|
||||
doc.addPage();
|
||||
y = 20;
|
||||
}
|
||||
});
|
||||
|
||||
doc.save("estadisticas.pdf");
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -8,183 +8,151 @@ $resultado = $conexion->query($query);
|
|||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Centro de Certificación LANIA</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<!-- Font Awesome para íconos -->
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
|
||||
<<<<<<< HEAD
|
||||
<link href="style/dashboard.css" rel="stylesheet">
|
||||
|
||||
=======
|
||||
<style>
|
||||
body {
|
||||
display: flex;
|
||||
}
|
||||
.sidebar {
|
||||
min-width: 250px;
|
||||
height: 145vh;
|
||||
background: rgb(19, 61, 213);
|
||||
color: white;
|
||||
}
|
||||
.sidebar a {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
.survey img {
|
||||
cursor: pointer;
|
||||
transition: transform .1s;
|
||||
}
|
||||
.survey img:checked + label img,
|
||||
.survey input[type="radio"]:checked + label img {
|
||||
transform: scale(1.2);
|
||||
}
|
||||
</style>
|
||||
>>>>>>> e909e7d2c6185583ff52105c062fd249ed0450b2
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Centro de Certificación LANIA</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
|
||||
<link href="style/dashboard.css" rel="stylesheet">
|
||||
</head>
|
||||
<body class="bg-light">
|
||||
|
||||
<?php include 'sidebar.php'; ?>
|
||||
|
||||
<div class="main-content">
|
||||
<div class="container py-5">
|
||||
<div class="text-center mb-4">
|
||||
<h1 class="display-5">Centro de Certificación LANIA</h1>
|
||||
<p class="lead">Formulario de salida para candidatos de exámenes PEARSON VUE</p>
|
||||
</div>
|
||||
|
||||
<div class="card shadow p-4">
|
||||
<form id="formSalida" method="POST">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<label for="nombre" class="form-label">Nombre del Usuario</label>
|
||||
<select class="form-select" id="nombre" name="id_usuario" required>
|
||||
<option value="">Selecciona tu nombre</option>
|
||||
<?php while ($row = $resultado->fetch_assoc()): ?>
|
||||
<option value="<?= $row['id_usuario'] ?>"><?= htmlspecialchars($row['nombre']) ?></option>
|
||||
<?php endwhile; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="main-content">
|
||||
<div class="container py-5">
|
||||
<div class="text-center mb-4">
|
||||
<h1 class="display-5">Centro de Certificación LANIA</h1>
|
||||
<p class="lead">Formulario de salida para candidatos de exámenes PEARSON VUE</p>
|
||||
</div>
|
||||
|
||||
<div class="card shadow p-4">
|
||||
<form id="formSalida" method="POST">
|
||||
<div class="row g-3">
|
||||
<div class="col-md-6">
|
||||
<label for="nombre" class="form-label">Nombre del Usuario</label>
|
||||
<select class="form-select" id="nombre" name="id_usuario" required>
|
||||
<option value="">Selecciona tu nombre</option>
|
||||
<?php while ($row = $resultado->fetch_assoc()): ?>
|
||||
<option value="<?= $row['id_usuario'] ?>"><?= htmlspecialchars($row['nombre']) ?></option>
|
||||
<?php endwhile; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 survey">
|
||||
<h5>Encuesta de satisfacción</h5>
|
||||
|
||||
<div class="mt-4 survey">
|
||||
<h5>Encuesta de satisfacción</h5>
|
||||
<?php
|
||||
$preguntas = [
|
||||
'atencion_personal' => '¿Cómo calificaría usted la atención proporcionada por el personal de LANIA antes y durante la realización del examen?', // <-- Remove the ; here
|
||||
'equipo_funcionando' => '¿ El equipo de cómputo proporcionado funcionó correctamente durante todo el examen?', // <-- Remove the ; here
|
||||
'ambiente_aula' => '¿Cómo valoraría el ambiente del aula (nivel de ruido, iluminación, temperatura, mobiliario) durante su examen?', // <-- Remove the ; here
|
||||
'calidad_internet' => '¿Qué tan satisfactoria fue la calidad de la conexión a internet mientras realizaba su examen?', // <-- Remove the ; here
|
||||
'instrucciones_claras' => '¿Recibió instrucciones claras sobre el procedimiento del examen y las normas del centro?', // <-- Remove the ; here
|
||||
'respuesta_personal' => 'En caso de surgir dudas o problemas, ¿el personal respondió con rapidez y eficacia? ', // <-- Remove the ; here
|
||||
'recomendacion_lania' => '¿Qué tan probable es que usted recomiende el Centro de Exámenes LANIA a otras personas?' // <-- Remove the ; here (and it's optional for the last element)
|
||||
];
|
||||
foreach ($preguntas as $campo => $texto): ?>
|
||||
<div class="mb-3">
|
||||
<label class="form-label"><?= $texto ?></label>
|
||||
<div>
|
||||
<?php for ($i = 1; $i <= 5; $i++): ?>
|
||||
<input
|
||||
type="radio"
|
||||
name="<?= $campo ?>"
|
||||
id="<?= $campo . '_' . $i ?>"
|
||||
value="<?= $i ?>"
|
||||
style="display: none;"
|
||||
>
|
||||
<label for="<?= $campo . '_' . $i ?>">
|
||||
<img src="assets/face_<?= $i ?>.png" alt="<?= $i ?>" width="30">
|
||||
</label>
|
||||
<?php endfor; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$preguntas = [
|
||||
'atencion_personal' => '¿Cómo calificaría usted la atención proporcionada por el personal de LANIA antes y durante la realización del examen?',
|
||||
'equipo_funcionando' => '¿ El equipo de cómputo proporcionado funcionó correctamente durante todo el examen?',
|
||||
'ambiente_aula' => '¿Cómo valoraría el ambiente del aula (nivel de ruido, iluminación, temperatura, mobiliario) durante su examen?',
|
||||
'calidad_internet' => '¿Qué tan satisfactoria fue la calidad de la conexión a internet mientras realizaba su examen?',
|
||||
'instrucciones_claras' => '¿Recibió instrucciones claras sobre el procedimiento del examen y las normas del centro?',
|
||||
'respuesta_personal' => 'En caso de surgir dudas o problemas, ¿el personal respondió con rapidez y eficacia? ',
|
||||
'recomendacion_lania' => '¿Qué tan probable es que usted recomiende el Centro de Exámenes LANIA a otras personas?'
|
||||
];
|
||||
foreach ($preguntas as $campo => $texto): ?>
|
||||
<div class="mb-3">
|
||||
<label class="form-label"><?= $texto ?></label>
|
||||
<div>
|
||||
<?php for ($i = 1; $i <= 5; $i++): ?>
|
||||
<input
|
||||
type="radio"
|
||||
name="<?= $campo ?>"
|
||||
id="<?= $campo . '_' . $i ?>"
|
||||
value="<?= $i ?>"
|
||||
style="display: none;"
|
||||
>
|
||||
<label for="<?= $campo . '_' . $i ?>">
|
||||
<img src="assets/face_<?= $i ?>.png" alt="<?= $i ?>" width="30">
|
||||
</label>
|
||||
<?php endfor; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<input type="hidden" name="consentimiento" value="no">
|
||||
<div class="form-check mb-4">
|
||||
<input
|
||||
class="form-check-input"
|
||||
type="checkbox"
|
||||
id="consentimiento"
|
||||
name="consentimiento"
|
||||
value="si"
|
||||
checked
|
||||
>
|
||||
<label class="form-check-label" for="consentimiento">
|
||||
Doy mi consentimiento para recibir publicidad
|
||||
</label>
|
||||
</div>
|
||||
<input type="hidden" id="hora_salida_local" name="hora_salida">
|
||||
|
||||
<!-- Consentimiento -->
|
||||
<input type="hidden" name="consentimiento" value="no">
|
||||
<div class="form-check mb-4">
|
||||
<input
|
||||
class="form-check-input"
|
||||
type="checkbox"
|
||||
id="consentimiento"
|
||||
name="consentimiento"
|
||||
value="si"
|
||||
checked
|
||||
>
|
||||
<label class="form-check-label" for="consentimiento">
|
||||
Doy mi consentimiento para recibir publicidad
|
||||
</label>
|
||||
</div>
|
||||
<input type="hidden" id="hora_salida_local" name="hora_salida">
|
||||
<div class="mt-4 text-end">
|
||||
<button type="submit" class="btn btn-primary">Enviar registro</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Botón enviar -->
|
||||
<div class="mt-4 text-end">
|
||||
<button type="submit" class="btn btn-primary">Enviar registro</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="modalGracias" tabindex="-1" aria-labelledby="modalGraciasLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header bg-success text-white">
|
||||
<h5 class="modal-title" id="modalGraciasLabel">¡Salida registrada!</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Cerrar"></button>
|
||||
</div>
|
||||
<div class="modal-body text-center">
|
||||
Gracias por tu asistencia.
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-success" data-bs-dismiss="modal">Aceptar</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal de agradecimiento -->
|
||||
<div class="modal fade" id="modalGracias" tabindex="-1" aria-labelledby="modalGraciasLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header bg-success text-white">
|
||||
<h5 class="modal-title" id="modalGraciasLabel">¡Salida registrada!</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Cerrar"></button>
|
||||
</div>
|
||||
<div class="modal-body text-center">
|
||||
Gracias por tu asistencia.
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-success" data-bs-dismiss="modal">Aceptar</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
document.getElementById("formSalida").addEventListener("submit", function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
<script>
|
||||
document.getElementById("formSalida").addEventListener("submit", function(e) {
|
||||
e.preventDefault();
|
||||
const ahora = new Date();
|
||||
const hora = ahora.toTimeString().slice(0,8); // "HH:MM:SS"
|
||||
document.getElementById("hora_salida_local").value = hora;
|
||||
|
||||
const ahora = new Date();
|
||||
const hora = ahora.toTimeString().slice(0,8); // "HH:MM:SS"
|
||||
document.getElementById("hora_salida_local").value = hora;
|
||||
const form = e.target;
|
||||
const formData = new FormData(form);
|
||||
|
||||
const form = e.target;
|
||||
const formData = new FormData(form);
|
||||
fetch("model/logout.php", {
|
||||
method: "POST",
|
||||
body: formData
|
||||
})
|
||||
.then(response => response.text())
|
||||
.then(data => {
|
||||
const modalGracias = new bootstrap.Modal(document.getElementById('modalGracias'));
|
||||
modalGracias.show();
|
||||
form.reset();
|
||||
})
|
||||
.catch(error => {
|
||||
console.error("Error al enviar:", error);
|
||||
alert("Ocurrió un error al registrar la salida.");
|
||||
});
|
||||
});
|
||||
|
||||
fetch("model/logout.php", {
|
||||
method: "POST",
|
||||
body: formData
|
||||
})
|
||||
.then(response => response.text())
|
||||
.then(data => {
|
||||
const modalGracias = new bootstrap.Modal(document.getElementById('modalGracias'));
|
||||
modalGracias.show();
|
||||
form.reset();
|
||||
})
|
||||
.catch(error => {
|
||||
console.error("Error al enviar:", error);
|
||||
alert("Ocurrió un error al registrar la salida.");
|
||||
});
|
||||
});
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
document.querySelectorAll('.sidebar-menu li').forEach(item => {
|
||||
item.classList.remove('active');
|
||||
});
|
||||
const menuSalida = document.getElementById('menu-salida');
|
||||
if (menuSalida) {
|
||||
menuSalida.classList.add('active');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
document.querySelectorAll('.sidebar-menu li').forEach(item => {
|
||||
item.classList.remove('active');
|
||||
});
|
||||
const menuSalida = document.getElementById('menu-salida');
|
||||
if (menuSalida) {
|
||||
menuSalida.classList.add('active');
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,5 +0,0 @@
|
|||
<?php
|
||||
session_start();
|
||||
session_destroy();
|
||||
header("Location: sesion.php");
|
||||
exit;
|
|
@ -21,16 +21,40 @@
|
|||
position: relative;
|
||||
height: 300px; /* Ajusta esta altura según sea necesario para tus gráficos */
|
||||
width: 100%;
|
||||
/* Aseguramos que el contenido no desborde si el gráfico se vuelve muy pequeño */
|
||||
overflow: hidden;
|
||||
}
|
||||
/* Para que las tarjetas tengan una altura consistente si sus contenidos son diferentes */
|
||||
.card {
|
||||
height: 100%;
|
||||
}
|
||||
/* No es necesario un height fijo si el card-body es flex-column */
|
||||
.card-body {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: calc(100% - 56px); /* Altura del card-header es aproximadamente 56px */
|
||||
flex-direction: column; /* Asegura que los elementos se apilen verticalmente */
|
||||
align-items: center; /* Centra los elementos horizontalmente */
|
||||
padding: 1.5rem; /* Añade un padding general para evitar que el contenido toque los bordes */
|
||||
}
|
||||
|
||||
/* Añadir un ancho máximo a los botones para que no se desborden */
|
||||
.card-body .btn {
|
||||
max-width: 100%; /* Asegura que los botones no excedan el ancho de su contenedor */
|
||||
white-space: normal;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
/* Medias queries para ajustar el tamaño de fuente si es necesario en pantallas muy pequeñas */
|
||||
@media (max-width: 576px) { /* Para pantallas extra pequeñas (celulares) */
|
||||
.card-title {
|
||||
font-size: 1rem; /* Reduce el tamaño del título */
|
||||
}
|
||||
.card-body .btn {
|
||||
font-size: 0.8rem; /* Reduce el tamaño de la fuente de los botones */
|
||||
padding: 0.5rem 0.8rem; /* Ajusta el padding de los botones */
|
||||
}
|
||||
.chart-container {
|
||||
height: 250px; /* Puedes reducir la altura de los gráficos en móviles */
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
|
@ -115,7 +139,8 @@
|
|||
<div class="card-header">
|
||||
<h5 class="card-title">Usuarios por Rango de Fechas</h5>
|
||||
</div>
|
||||
<div class="card-body d-flex flex-column align-items-center"> <div class="mb-3 d-flex flex-column align-items-center">
|
||||
<div class="card-body d-flex flex-column align-items-center">
|
||||
<div class="mb-3 d-flex flex-column align-items-center">
|
||||
<button class="btn btn-outline-secondary mb-2 date-filter-btn" data-period="week" onclick="setQuickDateFilter('week', this)">Última Semana</button>
|
||||
<button class="btn btn-outline-secondary mb-2 date-filter-btn" data-period="last_month_full" onclick="setQuickDateFilter('last_month_full', this)">Último Mes</button>
|
||||
<button class="btn btn-outline-secondary date-filter-btn" data-period="last_year_full" onclick="setQuickDateFilter('last_year_full', this)">Último Año</button>
|
||||
|
|
|
@ -2,11 +2,7 @@
|
|||
|
||||
$host = "localhost";
|
||||
$user = "root";
|
||||
<<<<<<< HEAD
|
||||
$pass = "Arbolito123.";
|
||||
=======
|
||||
$pass = "Starfox19.";
|
||||
>>>>>>> e909e7d2c6185583ff52105c062fd249ed0450b2
|
||||
$db = "lania";
|
||||
|
||||
$conexion = new mysqli($host, $user, $pass, $db);
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
require_once '../database/database.php';
|
||||
|
||||
$datos = [];
|
||||
|
||||
$sql = "SELECT empresa, estado_procedencia, edad FROM entrada";
|
||||
if ($result = $conexion->query($sql)) {
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
$datos[] = $row;
|
||||
}
|
||||
} else {
|
||||
http_response_code(500);
|
||||
echo json_encode(["error" => "Error en la consulta SQL"]);
|
||||
exit;
|
||||
}
|
||||
|
||||
header('Content-Type: application/json');
|
||||
echo json_encode($datos);
|
||||
?>
|
|
@ -1,29 +0,0 @@
|
|||
<?php
|
||||
session_start();
|
||||
$conn = require_once __DIR__ . '/../database/database.php';
|
||||
|
||||
|
||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||
$nombre = $_POST['nombre'];
|
||||
$password = $_POST['password'];
|
||||
|
||||
$stmt = $conn->prepare("SELECT * FROM admin WHERE nombre = ?");
|
||||
$stmt->bind_param("s", $nombre);
|
||||
$stmt->execute();
|
||||
$result = $stmt->get_result();
|
||||
|
||||
if ($admin = $result->fetch_assoc()) {
|
||||
if (password_verify($password, $admin['password'])) {
|
||||
$_SESSION['admin'] = $admin['nombre'];
|
||||
header("Location: Estadisticas.php");
|
||||
exit;
|
||||
} else {
|
||||
$error = "⚠️ Contraseña incorrecta.";
|
||||
}
|
||||
} else {
|
||||
$error = "⚠️ Usuario no encontrado.";
|
||||
}
|
||||
|
||||
$stmt->close();
|
||||
}
|
||||
?>
|
|
@ -1,35 +0,0 @@
|
|||
<?php
|
||||
require '../database/database.php';
|
||||
date_default_timezone_set('America/Mexico_City');
|
||||
|
||||
if ($_SERVER["REQUEST_METHOD"] === "POST") {
|
||||
$nombre = $_POST['nombre'] ?? '';
|
||||
$correo = $_POST['correo'] ?? '';
|
||||
$telefono = $_POST['telefono'] ?? '';
|
||||
$genero = $_POST['genero'] ?? '';
|
||||
$edad = $_POST['edad'] ?? '';
|
||||
$estado_procedencia = $_POST['estado_procedencia'] ?? '';
|
||||
$identificacion = $_POST['identificacion'] ?? '';
|
||||
$empresa = $_POST['empresa'] ?? '';
|
||||
$examen = $_POST['examen'] ?? '';
|
||||
$certificacion = $_POST['certificacion'] ?? '';
|
||||
$hora_entrada = $_POST['h_entrada'] ?: date("H:i:s"); // si no se proporciona, toma hora actual
|
||||
$fecha = $_POST['fecha'] ?: date("Y-m-d"); // si no se proporciona, toma fecha actual
|
||||
|
||||
$sql = "INSERT INTO entrada (nombre, correo, telefono, genero, edad, estado_procedencia, identificacion, empresa, examen, certificacion, h_entrada, fecha)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
|
||||
$stmt = $conexion->prepare($sql);
|
||||
|
||||
$stmt->bind_param("ssssssssssss", $nombre, $correo, $telefono, $genero, $edad, $estado_procedencia, $identificacion, $empresa, $examen, $certificacion, $hora_entrada, $fecha);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
echo "Entrada guardada correctamente.";
|
||||
} else {
|
||||
echo "Error al guardar: " . $stmt->error;
|
||||
}
|
||||
|
||||
$stmt->close();
|
||||
$conexion->close();
|
||||
}
|
||||
?>
|
|
@ -1,55 +0,0 @@
|
|||
<?php
|
||||
require_once '../database/database.php';
|
||||
|
||||
// Sanitizar y obtener valores
|
||||
$id_usuario = $_POST['id_usuario'];
|
||||
$hora_salida = $_POST['hora_salida'];
|
||||
$consentimiento = isset($_POST['consentimiento']) ? $_POST['consentimiento'] : 'no';
|
||||
|
||||
// 1. Insertar la salida
|
||||
$sqlSalida = "INSERT INTO salida (id_usuario, hora_salida, consentimiento) VALUES (?, ?, ?)";
|
||||
$stmtSalida = $conexion->prepare($sqlSalida);
|
||||
$stmtSalida->bind_param("iss", $id_usuario, $hora_salida, $consentimiento);
|
||||
$stmtSalida->execute();
|
||||
|
||||
$id_salida = $stmtSalida->insert_id; // Obtener el ID generado
|
||||
|
||||
// 2. Insertar la encuesta (si se llenó)
|
||||
$campos_encuesta = [
|
||||
'atencion_personal',
|
||||
'equipo_funcionando',
|
||||
'ambiente_aula',
|
||||
'calidad_internet',
|
||||
'instrucciones_claras',
|
||||
'respuesta_personal',
|
||||
'recomendacion_lania'
|
||||
];
|
||||
|
||||
$valores_encuesta = [];
|
||||
foreach ($campos_encuesta as $campo) {
|
||||
$valores_encuesta[$campo] = isset($_POST[$campo]) ? intval($_POST[$campo]) : null;
|
||||
}
|
||||
|
||||
// Solo guarda si hay al menos una respuesta
|
||||
if (array_filter($valores_encuesta)) {
|
||||
$sqlEncuesta = "INSERT INTO encuesta_satisfaccion (
|
||||
id_salida, atencion_personal, equipo_funcionando, ambiente_aula, calidad_internet,
|
||||
instrucciones_claras, respuesta_personal, recomendacion_lania
|
||||
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
|
||||
|
||||
$stmtEncuesta = $conexion->prepare($sqlEncuesta);
|
||||
$stmtEncuesta->bind_param(
|
||||
"iiiiiiii",
|
||||
$id_salida,
|
||||
$valores_encuesta['atencion_personal'],
|
||||
$valores_encuesta['equipo_funcionando'],
|
||||
$valores_encuesta['ambiente_aula'],
|
||||
$valores_encuesta['calidad_internet'],
|
||||
$valores_encuesta['instrucciones_claras'],
|
||||
$valores_encuesta['respuesta_personal'],
|
||||
$valores_encuesta['recomendacion_lania']
|
||||
);
|
||||
$stmtEncuesta->execute();
|
||||
}
|
||||
|
||||
echo "Salida y encuesta registradas correctamente.";
|
|
@ -1,20 +0,0 @@
|
|||
<?php
|
||||
$conn = require_once __DIR__ . '/../database/database.php';
|
||||
|
||||
|
||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||
$nombre = $_POST['nombre'];
|
||||
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
|
||||
|
||||
$stmt = $conn->prepare("INSERT INTO admin (nombre, password) VALUES (?, ?)");
|
||||
$stmt->bind_param("ss", $nombre, $password);
|
||||
|
||||
if ($stmt->execute()) {
|
||||
$success = "✅ Administrador registrado con éxito.";
|
||||
} else {
|
||||
$error = "❌ Error al registrar: " . $stmt->error;
|
||||
}
|
||||
|
||||
$stmt->close();
|
||||
}
|
||||
?>
|
75
sesion.php
75
sesion.php
|
@ -1,75 +0,0 @@
|
|||
<?php require_once 'model/inicio.php'; ?>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Inicio de Sesión</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Bootstrap CSS -->
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Font Awesome para íconos -->
|
||||
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
|
||||
<!-- Custom CSS opcional (puedes agregar tu estilo o el de SB Admin 2) -->
|
||||
<style>
|
||||
body {
|
||||
display: flex;
|
||||
}
|
||||
.sidebar {
|
||||
min-width: 250px;
|
||||
height: 400vh;
|
||||
background: rgb(19, 61, 213);
|
||||
color: white;
|
||||
}
|
||||
.sidebar a {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-light">
|
||||
<nav class="sidebar p-3">
|
||||
<h4 class="text-center mb-4">LANIA</h4>
|
||||
<ul class="nav flex-column">
|
||||
<li class="nav-item"><a class="nav-link" href="Estadisticas.php"><i class="fas fa-tachometer-alt"></i> Estadísticas</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="FormularioInicial.php"><i class="fas fa-user"></i> Formulario de Ingreso</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="FormularioSalida.php"><i class="fas fa-user"></i> Formulario de Salida</a></li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<div class="container py-5">
|
||||
<div class="text-center mb-4">
|
||||
<h1 class="display-5">Sesion Requerida</h1>
|
||||
</div>
|
||||
|
||||
<div class="card shadow p-4">
|
||||
<form method="post">
|
||||
<label for="nombre" class="form-label">Nombre:</label>
|
||||
<input type="text" class="form-control" id="nombre" name="nombre" required><br>
|
||||
|
||||
<label for="password" class="form-label">Contraseña:</label>
|
||||
<input type="password" class="form-control" id="password" name="password" required><br>
|
||||
|
||||
<div class="mt-4 text-center">
|
||||
<button type="submit" class="btn btn-primary">Iniciar sesión</button>
|
||||
<a href="registro.php"><button type="button" class="btn btn-primary">Ir a Registro</button></a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
<?php if (isset($error)) echo "<p>$error</p>"; ?>
|
Loading…
Reference in New Issue