Estoy experimentando un caso... Tengo un index, y por medio de un ajax, hace una consulta en el archivo consulta.php. este me devuelve una tabla y lo imprime en un div que esta en index.
El problema consulta.php tiene include_once a detalle_vac.php, que este me da una lista tipo acordion de datos del id, sin embargo, esa lista le quiero hacer un filtro, el filtro hace que el año se pase por la url, pero se manda a index,(ejemplo, index.php?year=2025), pero al final el detalle_vac, no me devuelve los datos del año que se paso por la url, yo dudo por que es por varios archivos y al final actualiza a index y solo le pasa el año, como le puedo hacer solo para actualizar esa parte del código y no todo.
Aqui un poco de contexto.
<?php
session_start();
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<body class="fondo" >
<center><h1 class="orange">Control de Vacaciones de Empleados RT</h1></center>
<div class="container filtro">
<!-- Formulario Busqueda Empleado -->
<form id="searchForm" method="POST" >
<label for="employeeNumber" class="negritas">Número de Empleado:</label> <br><br>
<input type="number" id="employeeNumber" name="employeeNumber" placeholder="Ingrese el número de empleado" autocomplete="off">
<input type="submit" value="Buscar" id="btnBuscar">
</form>
<!-- </div> -->
<!-- DIV PARA MOSTRAR TABLA CON INFO DEL EMPLEADO -->
<div id="searchResults" class="">
</div>
<!-- Scripts -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- Scripts para hacer funcional la busqueda -->
<script src="CSS_JS_LIB/jquery/jquery.min.js"></script>
<script type="text/javascript" src="CSS_JS_LIB/main.js"></script> <!-- Scripts donde se manda el id, y en el archivo se hace el ajax -->
<!-- JS de Bootstrap (opcional, pero necesario para algunas funcionalidades) -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" crossorigin="anonymous"></script>
</body>
</html>
main.js
function buscar_datos(idEmpleado) {
// Almacenar el ID del empleado en el almacenamiento local
localStorage.setItem('lastSelectedEmployee', idEmpleado);
// Ocultar la tabla de empleados
document.getElementById('tablaEmpleados').style.display = 'none';
$.ajax({
type: 'POST',
url: 'consulta.php',
data: { idEmpleado: idEmpleado }, // Aquí pasamos el ID del empleado correctamente
success: function (respuesta) {
if (respuesta.trim() === "") {
resultado.innerHTML = "<p>No se encontró ningún empleado con el ID proporcionado.</p>";
} else {
resultado.innerHTML = respuesta;
}
},`introducir el código aquí`
error: function () {
resultado.innerHTML = "<p>Ocurrió un error al buscar el empleado. Por favor, inténtelo de nuevo más tarde.</p>";
}
});
}
</script>
me manda a consulta.php
<?php
include_once "Conexiones/databaseSQL.php";
$salida = "";
<table id='customers'>
<thead>
<tr>
<th rowspan='2'>N°</th>
<th rowspan='2'>Nombres</th>
<th colspan='2'>Apellidos</th>
<th rowspan='2'>Área</th>
<th rowspan='2'>Puesto</th>
<th rowspan='2'>Sucursal</th>
<th rowspan='2'>Fecha Alta</th>
<th colspan='2'>Antigüedad</th>
<th colspan='2'>Vacaciones</th>
</tr>
<tr>
<th>Paterno</th>
<th>Materno</th>
<th>Años</th>
<th>Meses</th>
<th>Otorgados</th>
<th>Pendientes</th>
</tr>
</thead>
<tbody>";
while ($row = sqlsrv_fetch_array($res)) {
//obtener el id_empleado
$id_emp = $row['Personal'];
$salida .= "
<tr>
echo "<br>
<div class='formt'>
<a href='ReportePorEmpleadoRT.php?id=" . $row['Personal'] . "' class='btnRep' target='_blank'>
<i class='fa-solid fa-file-pdf'></i> Generar Reporte
</a>
<a href='#' class='btnSv btn btn-primary' data-bs-toggle='modal' data-bs-target='#modalVacaciones' data-id='" . $row['Personal'] . "' data-vacaciones='" . $row['Vacaciones'] . "'>Solicitar Vacaciones</a>
</div> <br>
<h5>En el sistema existen los siguientes registros de acuerdo al dato ingresado:</h5>";
}
$salida .= "</tbody>
</table><br>";
echo $salida;
// INCLUDE de detalle vac el que quiero actualizar
include('detalle_vac.php');
} else {
$salida .= "<br><h3>NO HAY DATOS POR MOSTRAR<br> N° DE EMPLEADO NO ESTÁ DE ALTA</h3><br><br><br><br><br><br>";
echo $salida;
}
}
sqlsrv_close($connx);
?>
detalle_vac.php quiero hacer el filtro pero no funciona
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<br>
<h3>Historial de Vacaciones</h3>
<!-- Formulario de selección de año -->
<form id="filterForm" class="css-form" action="index.php" method="GET">
<label for="year" class="form-label">Seleccionar Año:</label>
<select name="year" id="year" class="form-select">
<?php
include_once("Conexiones/database.php"); // Incluir archivo de conexión
// Obtener el año seleccionado del parámetro en la URL o el año actual
$selected_year = isset($_GET['year']) ? intval($_GET['year']) : date('Y');
// Obtener años únicos de las vacaciones
$query_years = "SELECT DISTINCT YEAR(fa_inicio) AS anio FROM v_solicitud WHERE id_emp = $id_emp AND estado != 5 ORDER BY anio DESC";
$result_years = mysqli_query($conn, $query_years);
while ($row_years = mysqli_fetch_assoc($result_years)) {
$anio = $row_years['anio'];
$selected = ($anio == $selected_year) ? "selected" : "";
echo "<option value=\"$anio\" $selected>$anio</option>";
}
?>
</select>
<button type="submit" class="form-button">Filtrar</button>
</form>
<br>
<!-- Contenedor de acordeones -->
<div id="accordionContainer" class="accordion" id="accordionPanelsStayOpenExample">
<?php
include_once("Conexiones/database.php"); // Incluir archivo de conexión
// Obtener el año seleccionado del parámetro en la URL o el año actual
$selected_year = isset($_GET['year']) ? intval($_GET['year']) : date('Y');
// Consulta SQL para filtrar por año
$query = "SELECT estado, id, GROUP_CONCAT(CONCAT(fa_inicio, '_', fa_final, '_', t_dias) SEPARATOR '|') AS info_vacaciones, SUM(t_dias) AS sum_tdias
FROM v_solicitud
WHERE id_emp = $id_emp AND estado != 5 AND YEAR(fa_inicio) = $selected_year
GROUP BY estado, id";
$result = mysqli_query($conn, $query);
$grouped_periods = array();
while ($row = mysqli_fetch_assoc($result)) {
$estatus = $row['estado'];
$id_soli = $row['id'];
$total_dias = $row['sum_tdias'];
$info_vacaciones = explode('|', $row['info_vacaciones']);
foreach ($info_vacaciones as $info) {
$vacation_data = explode('_', $info);
$start_date = date('Y-m-d', strtotime($vacation_data[0]));
$end_date = date('Y-m-d', strtotime($vacation_data[1]));
$total_days = $vacation_data[2];
$start_month = $month_names[date('F', strtotime($start_date))];
$end_month = $month_names[date('F', strtotime($end_date))];
$subtitle = ($start_month != $end_month) ? "$start_month-$end_month" : $start_month;
$grouped_periods[$estatus][$subtitle][] = array(
'id_soli' => $id_soli,
'start_date' => $start_date,
'end_date' => $end_date,
'total_days' => $total_days
);
}
}
?>
<!-- Mostrar resultados -->
<?php
foreach ($grouped_periods as $estatus => $subtitles) {
?>
<div class="accordion-item">
<h2 class="accordion-header" id="heading<?php echo $estatus; ?>">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-toggle="collapse" data-bs-target="#collapse<?php echo $estatus; ?>" aria-expanded="true" aria-controls="collapse<?php echo $estatus; ?>">
<?php
if ($estatus == 1) {
echo "Vacaciones Disfrutadas";
} elseif ($estatus == 2) {
echo "Vacaciones Aprobadas";
} elseif ($estatus == 3) {
echo "Vacaciones Solicitadas";
} elseif ($estatus == 4) {
echo "Vacaciones No Autorizadas";
}
?>
</button>
</h2>
<div id="collapse<?php echo $estatus; ?>" class="accordion-collapse collapse" aria-labelledby="heading<?php echo $estatus; ?>">
<div class="accordion-body">
<?php
foreach ($subtitles as $subtitle => $periods) {
foreach ($periods as $period) {
$id_soli = $period['id_soli'];
$start_date = $period['start_date'];
$end_date = $period['end_date'];
$total_days = $period['total_days'];
?>
<div class="general">
<div class="formiz">
<h5><?php echo $subtitle; ?></h5>
<p class="formb2"><strong class="orange2">N°:</strong> <input type="number" value="<?php echo $id_soli; ?>" readonly></p>
<p class="formb2"><strong class="orange2">Fecha de inicio:</strong> <input type="date" value="<?php echo $start_date; ?>" readonly></p>
<p class="formb2"><strong class="orange2">Fecha de fin:</strong> <input type="date" value="<?php echo $end_date; ?>" readonly></p>
<p class="formb2"><strong class="orange2">Total de días:</strong> <?php echo $total_days; ?></p>
</div>
<?php
if ($estatus != 1 && $estatus != 4) {
?>
<div class="formder">
<form class="formselect" action="update_status.php" method="POST">
<strong class="orange2">Cambiar Estatus:</strong>
<div class="formb">
<select name="estatus">
<option value="">Seleccionar Estatus</option>
<?php
if ($estatus == 2) {
echo '<option value="1">Vacaciones Disfrutadas</option>';
} elseif ($estatus == 3) {
echo '<option value="2">Vacaciones Aprobadas</option>';
echo '<option value="4">Vacaciones No Autorizadas</option>';
}
?>
</select>
<input type="hidden" name="id_emp" value="<?php echo $id_emp; ?>">
<input type="hidden" name="id_soli" value="<?php echo $id_soli; ?>">
<button class="btnok" type="submit">Aceptar</button>
</div>
</form>
<br><br><br>
<?php
if ($estatus == 3) {
?>
<form class="alinear" action="delete_periodo.php" method="POST" style="display:inline;">
<input type="hidden" name="id_soli" value="<?php echo $id_soli; ?>">
<button type="submit" class="btn btn-danger btn-sm eliminar-periodo">Eliminar</button>
</form>
<?php
}
?>
</div>
<?php
} elseif ($estatus == 4) { // Solo mostrar el botón de eliminar para "Vacaciones No Autorizadas"
?>
<div class="formder">
<form class="alinear" action="delete_periodo.php" method="POST" style="display:inline;">
<input type="hidden" name="id_soli" value="<?php echo $id_soli; ?>">
<button type="submit" class="btn btn-danger btn-sm eliminar-periodo">Eliminar</button>
</form>
</div>
<?php
}
?>
</div>
<hr>
<?php
} // Fin foreach $periods
} // Fin foreach $subtitles
?>
</div>
</div>
</div>
<?php
} // Fin foreach $grouped_periods
mysqli_free_result($result);
</body>
</html>
consulta.php
, agrega el año tambien en las variables pasadas, y luego en elconsulta.php
interpreta esa variable POST y la asignas a$_GET['year']
antes de llamar aldetalle_vac.php
para que le llegue correctamente el valor, pues al mandárselo por ajax y POST, no pilla el $_GET esperado a menos que hagas este truquillo marrano. Hay otras formas, pero con eso sales del paso seguramente.