LISTADO DE REGISTROS A UNA TABLA CON PAGINADO SIMPLE
Primero hacemos un SELECT COUNT(*) para tener el número de registros.
El bloque de if corrige la página pedida si excede por abajo o arriba el N° de páginas i en
$idini finalmente calcula el id inicial de la página pedida con:
(pagina anterior X registros por página).
Antes de cargar la tabla debemos poner el menú con el paginado. Esto se hace en el bloque for
primero se ve con el if si $i es la página actual y se le da la clase pagactual (roja) y no se
le pone link, en los otros casos el link es la propia página con un parámetro p = N° de página.
Luego abre nuevamente la base por debajo de la cabecera de tabla. En el
SELECT ... LIMIT $idini,$regporpag va a cargar desde el id inicial calculado en el head hasta el
número de registros por página. Le damos los estilos a cada columna y
luego si se devuelven registros con (mysqli_num_rows) un while (fetch_array)
que devuelve true si al avanzar un registro no llega al end of file, carga cada linea de la tabla con los valores
correspondientes a ese registro.
No olvidar el free_results y close finales y cerrar la etiqueta
<head>
<?
include("conexion.php"); // abre la conexión a la base de datos
global $conn; //lo usamos en conexion, lo declaramos acá para no llamar siempre a $GLOBALS[]
?>
<style>
td{
border-bottom:#333 solid 1px;
margin: 0px;
padding: 5px;
padding-bottom:3px;
padding-top:3px;
}
.pagactual{
color:#C00;
}
.pag{
color:#03C;
}
</style>
<?
$regporpag=100;
if(conectar()){
//caculo el número total de registros y de páginas
$sqltxt = "SELECT COUNT(*) AS total FROM clientes";
$sqldevolucion = mysqli_query($conn,$sqltxt);
$r = mysqli_fetch_array($sqldevolucion, MYSQLI_ASSOC);
$total= $r["total"];
$totalpag = ceil($total/$regporpag); //supongamos 100 registros por página
}
$pagactual=0;
if (isset($_GET["p"])){ //toma el número de página
$pagactual= (int)$_GET["p"]; //lo carga en $pagactual
}
if ($pagactual<1){ // si da negativo lo manda a 1
$pagactual=1;
}else if ($pagactual>$totalpag){ // si se pasa del total lo manda a $totalpagina
$pagactual=$totalpag;
}
$idini= ($pagactual-1)*$regporpag; //esta cuenta me da el id inicial de la página pedida
?>
</head>
<body>
<!--***********************menú de paginado**********************-->
<div style="margin-bottom:10px; margin-top:10px; background-color:#CFF">
<?
for ($i=1 ; $i<=$totalpag ; $i++){
if($i==$pagactual){
echo("<span class='pagactual'>" . $i . "</span> ");
}else {
echo( "<a href='?p=" . $i . "' class='pag'>" . $i . "</a> " );
}
}
?>
</div>
<!--*********************** FIN menú de paginado**********************-->
<table>
<tr>
<td width="40" style=" text-align:center">ID</td>
<td width="200" style=" text-align:center">NOMBRE</td>
<td width="200" style=" text-align:center">DIRECCION</td>
<td width="200" style=" text-align:center">MAIL</td>
<td width="160" style=" text-align:center">NACIMIENTO</td>
</tr>
<?
$sqltxt = "SELECT * FROM clientes LIMIT " . $idini . "," . $regporpag;
$sqldevolucion = mysqli_query($conn,$sqltxt);
if (!mysqli_num_rows($sqldevolucion)) {
echo("Error, no se devuelven registros".$sqltxt );
} else {
$i=1;
while ($registro = mysqli_fetch_array($sqldevolucion, MYSQLI_ASSOC)){
echo("<tr>");
echo("<td>" . $registro["id"] . "</td>" );
echo("<td>".$registro["nombre"] . "</td>" );
echo("<td>".$registro["direccion"] . "</td>" );
echo("<td>".$registro["mail"] . "</td>" );
echo("<td style=' text-align:center;'>".$registro["fecha_nac"] . "</td>" );
echo("</tr>");
}
mysqli_free_result($sqldevolucion); //devuelvo recurso a memoria
mysqli_close($conn); // cierro conexion
}
?>
</table>
</body>