Bienvenido a datoweb.com!! En este foro podrás encontrar ayuda sobre diseño y desarrollo web en general. Si quieres formar parte de esta comunidad para pedir ayuda o colaborar ayudando a otros usuarios del foro solo tienes que registrarte desde el siguiente enlace: Registrarse en el Foro

Como hacer una paginación con PHP y MySQLi

Este ejemplo es solo para que entiendan como es el uso del paginador, como funciona, ya que para utilizarlo dentro de una web necesitaran aplicar CSS y mejorar el código con JQUERY, de esta forma la pagina no se tendrá que recargar.

Creamos el archivo db.php
<?php
$DBHOST = 'localhost';
$DBUSER = 'usuario';
$DBPASS = 'password';
$DBNAME = 'basededatos';
 
//Conectar al Servidor
$conn = new mysqli($DBHOST, $DBUSER, $DBPASS, $DBNAME);
 
//Verificarndo Conexion
if (mysqli_connect_errno()) {
    exit('Fallo Conexion: '. mysqli_connect_error());
}
?>
Creamos el archivo paginacion.php
<?php
//Incluimos la conexión a la base de datos.
include 'db.php';
 
//$registros nos entrega la cantidad de registros a mostrar.
$registros = 10;
 
//$contador como su nombre lo indica el contador.
$contador = 1;
 
/**
 * Se inicia la paginación, si el valor de $pagina es 0 le asigna el valor 1 e $inicio entra con valor 0.
 * si no es la pagina 1 entonces $inicio sera igual al numero de pagina menos 1 multiplicado por la cantidad de registro
 */
if (!$pagina) {
    $inicio = 0;
    $pagina = 1;
} else {
    $inicio = ($pagina - 1) * $registros;
}
?>
    <!-- Se crea la tabla que mostrara los datos tabulados -->
    <table>
        <caption>Registros</caption>
        <thead>
            <tr>
                <th>#</th>
                <th>Nombre</th>
                <th>Ciudad</th>
                <th>Pais</th>
                <th>Continente</th>
            </tr>
        </thead>
        <tbody>
            <?php
            /**
             * Se inicia la consulta donde seleccionamos todos los campos de la tabla personas, pero donde isActive = 1, esto lo hacemos para el manejo
             * de registros si estan activos o no.
             */
            $resultados = mysqli_query($conn,"SELECT * FROM personas WHERE isActive = '1'");
 
            //Contamos la cantidad de filas entregadas por la consulta, de esta forma sabemos cuantos registros fueron retornados por la consulta.
            $total_registros = mysqli_num_rows($resultados);
 
            //Generamos otra consulta la cual creara en si la paginacion, ordenando y crendo un limite en las consultas.
            $resultados = mysqli_query($conn,"SELECT * FROM personas WHERE isActive = '1' ORDER BY Nombre ASC LIMIT $inicio, $registros");
 
            //Con ceil redondearemos el resultado total de las paginas 4.53213 = 5
            $total_paginas = ceil($total_registros / $registros);
 
            // Si tenemos un retorno en la varibale $total_registro iniciamos el ciclo para mostrar los datos.
            if ($total_registros) {
                while ($personas = mysqli_fetch_array($resultados, MYSQLI_ASSOC)) {
                ?>
                    <!-- Muestra de Datos usando el comodin <?=$variable; ?> es lo mismo que <?php echo $variable; ?> -->
                    <tr>
                        <td><?=$contador;?></td>
                        <td><?=$personas["Nombre"];?></td>
                        <td><?=$personas["Ciudad"];?></td>
                        <td><?=$personas["Pais"];?></td>
                        <td><?=$personas["Continente"];?></td>
                    </tr>
 
                    <?php
                    /**
                     * La variable $contador es la misma que iniciamos arriba con valor 1, en cada ciclo sumara 1 a este valor.
                     * $contador sirve para mostrar cuantos registros tenemos, es mas que nada una guia.
                     */
                   $contador++;
                }
             } else {
              echo "<font color='darkgray'>(sin resultados)</font>";
            }
 
            mysqli_free_result($resultados);
            ?>
        </tbody>
    </table>
 
    <div>
        <?php
        if ($total_registros) {
            /**
             * Aca activamos o desactivamos la opción "< Anterior", si estamos en la pagina 1 nos dará como resultado 0 por ende NO
             * activaremos el primer if y pasaremos al else en donde se desactiva la opción anterior. Pero si el resultado es mayor
             * a 0 se activara el href del link para poder retroceder.
             */
            if (($pagina - 1) > 0) {
                echo "<a href='paginacion.php?pagina=".($pagina-1)."'>< Anterior</a>";
            } else {
                echo "<a href='#'>< Anterior</a>";
            }
 
            // Generamos el ciclo para mostrar la cantidad de paginas que tenemos.
            for ($i = 1; $i <= $total_paginas; $i++) {
                if ($pagina == $i) {
                    echo "<a href='#'>". $pagina ."</a>";
                } else {
                    echo "<a href='paginacion.php?pagina=$i'>$i</a> ";
                }
            }
 
            /**
             * Igual que la opcion primera de "< Anterior", pero aca para la opcion "Siguiente >", si estamos en la ultima pagina no podremos
             * utilizar esta opcion.
             */
            if (($pagina + 1)<=$total_paginas) {
                echo "<a href='paginacion.php?pagina=".($pagina+1)."'>Siguiente ></a>";
            } else {
                echo "<a href='#'>Siguiente ></a>";
            }
        }
        ?>
    </div>
 
    <?php
        // Cerramos conexion con MYSQLI.
        mysqli_close($conn);
    ?>
1
Puntos
6019
Visitas
1
Resp
Por zerodarck hace 114 meses
Experto
Respuesta #1
hola buenas una pregunta como se podría limitar la cantidad de enlaces que se muestra en la pagina
0
Puntos
Por Jose hace 47 meses
Principiante
Compartir en facebook
Compartir en twitter
Compartir
Para comentar Inicia sesión o Registrate