#php #html #mysql #html-table #pagination
#php #HTML #mysql #html-таблица #разбивка на страницы
Вопрос:
У меня есть эта функция, которая отображает информацию из таблицы mysql, и она отлично работает, когда я ее вызываю.
Однако у меня возникли проблемы с пониманием того, как изменить его так, чтобы он включал разбивку на страницы и не отображал все в таблице.
Вот код функции:
function tabla_presupuestos() {
$conexion_bd = conectar();
$consulta = "
SELECT d.idPre
, em.nombre as doctor
, pac.nombre as paciente
, d.diagnostico
, DATE_FORMAT(d.fechaEmision, '%M %e %Y') as fechaEmision
, DATE_FORMAT(d.fechaVencimiento, '%M %e %Y') as DiasRestantes
FROM empleado em
, paciente pac
, presupuestodental d
WHERE em.idEmpleado = d.idEmpleado
AND pac.idPaciente = d.idPaciente
ORDER
BY fechaEmision
";
$resultados_consulta = $conexion_bd->query($consulta);
$resultado = '<div style="width:auto; margin:0 auto;"><table class="table table-striped">';
$resultado .= '<thead bgcolor="lightblue"><tr><th scope="col">Doctor</th><th scope="col">Paciente</th><th scope="col">Diagnostico</th><th scope="col">Fecha de Emisión</th><th scope="col">Vencimiento</th><th scope="col"> </th><tr></thead>';
while ($row = mysqli_fetch_array($resultados_consulta, MYSQLI_ASSOC)) {
$resultado .= '<tbody><tr>';
$resultado .= '<td>'.$row["doctor"].'</td>';
$resultado .= '<td>'.$row["paciente"].'</td>';
$resultado .= '<td><a href="editardiagnostico.php?idPre='.$row["idPre"].'">'.$row["diagnostico"].'</td>';
$resultado .= '<td>'.$row["fechaEmision"].'</td>';
$resultado .= '<td>'.$row["DiasRestantes"].'</td>';
$resultado .= '<td><a href="borrar_presupuesto.php?idPre='.$row["idPre"].'"><button class="btn btn-danger">Ocultar</button></a></td>';
$resultado .= '</tr>';
}
$resultado .= '</tbody></table></div>';
desconectar($conexion_bd);
return $resultado;
}
Комментарии:
1. Итак, вам нужно предложение LIMIT в запросе и некоторые предыдущие кнопки / ссылки, независимо от того, что отслеживает следующий пакет, который вы хотите.
Ответ №1:
Вам нужно сделать три вещи:
- Добавление
LIMIT
иOFFSET
в запрос. - Получение общего количества строк.
- Кнопка добавления разбивки на страницы.
Чтобы добавить разбивку на страницы, вам нужно ограничить отображение данных, и лучше получать ограниченные данные из базы данных, поэтому я добавил LIMIT
and OFFSET
к вашему запросу:
SELECT d.idPre,
em.nombre as doctor,
pac.nombre as paciente,
d.diagnostico,
DATE_FORMAT(d.fechaEmision, '%M %e %Y') as fechaEmision,
DATE_FORMAT(d.fechaVencimiento, '%M %e %Y') as DiasRestantes
FROM empleado em, paciente pac, presupuestodental d
WHERE
em.idEmpleado=d.idEmpleado AND
pac.idPaciente=d.idPaciente
ORDER BY fechaEmision
LIMIT ? OFFSET?
Затем вам нужно получить общее количество строк, которые являются презентабельными, и разделить его на строки, отображаемые каждый раз, чтобы получить общее количество страниц. Итак, это запрос для этого (возможно, вам потребуется изменить его, чтобы получить правильное количество строк):
SELECT COUNT(*)
FROM empleado em, paciente pac, presupuestodental d
WHERE
em.idEmpleado=d.idEmpleado AND
pac.idPaciente=d.idPaciente
А теперь, чтобы добавить разбивку на страницы, давайте завершим вашу функцию. Я немного изменил ваши коды, чтобы очистить его:
/*
Counting all rows
*/
function rowCount($db) {
$query = "
SELECT COUNT(*)
FROM empleado em, paciente pac, presupuestodental d
WHERE
em.idEmpleado=d.idEmpleado AND
pac.idPaciente=d.idPaciente";
$stmt = $db->query($query);
return $stmt->fetch();
}
/*
Creating pagintaion links
*/
function pagination($currentPage, $totalPages) {
$html = '
<ul>';
for ($page = 0; $page < $totalPages;$page )
if ($page == $currentPage)
$html .= '
<li>' . $page . '</li>';
else
$html .= '
<li>
<a href="{the table page link}/' . $page . '>' . $page . '</a>
</li>';
$html .= '
</ul>';
return $html;
}
/*
The page which should be displayed will be taken as a parameter
*/
function tabla_presupuestos($page = 0) {
// This is the number if row you want to display
$rowsPerPage = 10;
$totalPages = rowCount($conexion_bd)/$rowsPerPage;
$conexion_bd = conectar();
$consulta = "
SELECT d.idPre,
em.nombre as doctor,
pac.nombre as paciente,
d.diagnostico,
DATE_FORMAT(d.fechaEmision, '%M %e %Y') as fechaEmision,
DATE_FORMAT(d.fechaVencimiento, '%M %e %Y') as DiasRestantes
FROM empleado em, paciente pac, presupuestodental d
WHERE
em.idEmpleado=d.idEmpleado AND
pac.idPaciente=d.idPaciente
ORDER BY fechaEmision
LIMIT ? OFFSET ?";
$stmt = $conexion_bd->prepare($consulta);
// binding LIMIT and OFFSET to the query
$stmt->bind_param($rowsPerPage, $rowsPerPage*$page);
// executing statement and getting the result
$stmt->execute();
$result = $stmt->get_result();
$resultado = '
<div>
<table class="table table-striped">
<thead>
<tr>
<th scope="col">Doctor</th>
<th scope="col">Paciente</th>
<th scope="col">Diagnostico</th>
<th scope="col">Fecha de Emisión</th>
<th scope="col">Vencimiento</th>
<tr>
</thead>';
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$resultado .= '
<tbody>
<tr>
<td>' . $row["doctor"] . '</td>
<td>' . $row["paciente"] . '</td>
<td><a href="editardiagnostico.php?idPre=' . $row["idPre"] . '">' . $row["diagnostico"] . '</td>
<td>' . $row["fechaEmision"] . '</td>
<td>' . $row["DiasRestantes"] . '</td>
<td>
<a href="borrar_presupuesto.php?idPre=' . $row["idPre"] . '">
<button class="btn btn-danger">Ocultar</button>
</a>
</td>
</tr>';
}
$resultado .= '
</tbody>
</table>
' . pagination($page, $totalPages) . '
</div>';
desconectar($conexion_bd);
return $resultado;
}