Paginación con PHP y MySQL

{ Posted on Oct 01 2011 by admin }

El siguiente post, trata sobre un problema con el que comunmente nos topamos los programadores a la hora de necesitar paginar un listado de registros almacenados en una DB.

Esta, mas que otra cosa, es una guia de ayuda para programadores no tan pro. Espero les ayude en sus proyectos.

Empecemos:

Nuestro script inicia con la declaracion de variables necesarias para la paginacion:

if (!isset($_REQUEST['pagina'])) {

$pagina = 1;

}else{

$pagina = $_REQUEST['pagina'];

}

$registrosPagina = 10;

if($pagina == 1){$listaInicio = 0;}else{$listaInicio = $registrosPagina * ($pagina -1);}

En este bloque inicializamos las variables:

$pagina con el valor que venga por $_REQUEST['pagina'], de no existir este $_REQUEST, la inicializamos a 1, osea, la primera pagina.

$registrosPagina establecemos los registros que queremos mostrar por cada pagina.

$listaInicio el numero consecutivo del registro con el cual empezaremos a listar los mismos.

Lo siquiente es generar nuestra consulta, en la cual establecemos con LIMIT el registro de inicio de la lista y hasta cuantos registros mostraremos:

$query = “SELECT * FROM tbl_articulos ORDER BY id_articulo LIMIT $listaInicio, $registrosPagina”;
$result = mysql_query($query);

while($rs = mysql_fetch_array($result)){

//imprimimos nuestros registros linea por linea en una tabla o brincando linea o como gusten, aqui solo mostrare la impresion de los campos.

print “{$rs['descripcion']}, {$rs['precio']}, {$rs['existencia']}”;

}
mysql_free_result($result);

Con esto estaremos imprimiendo un listado de 10 registros en cada una de nuestras paginas, despues necesitamos obtener el numero total de registros en la tabla para asi obtener tambien el numero total de paginas.

$query = “SELECT * FROM tbl_articulos”;

$result = mysql_num_rows($result);

$totalRegistros = mysql_num_rows($result);

// total paginas redondeadas hacia arriba

$totalPaginas = ceil($totalRegistros / $registrosPagina);

Por ultimo, deducimos la pagina anterior y siguiente e imprimimos los botones o links de la paginacion:

$paginaAnterior = $pagina – 1;

$paginaSiguiente = $pagina + 1;

if ($paginaSiguiente > $totalPaginas) {

$paginaSiguiente -= 1;

}

if ($paginaAnterior < 1) {

$paginaAnterior += 1;

}

//Pagina Anterior
print “<a href=’script.php?pagina=$paginaAnterior’><<Anterior”;

//Paginas existentes
for ($i = 1; $i <= $totalPaginas; $i++){

print “<a href=’script.php?pagina=$i’> $i “;

}

//Pagina Siguiente
print “<a href=’script.php?pagina=$paginaSiguiente’>Siguiente>>”;

Con esto ya deben tener una paginacion 2/3 decente, espero funcione bien. Si tienen alguna duda, si tienen problemas, adelante, comenten.

Saludos.

No related posts.


4 Responses to “Paginación con PHP y MySQL”

  1. Hola, he tratado de seguuir tu ejemplo pero no me funciona, me da error en las condiciones:

    if ($paginaAnterior < 1) {
    $paginaAnterior += 1;
    }

    por el (;) que aparece en la condicion…

  2. Que tal Jose, gracias a tu comentario me di cuenta de mi error, ya esta corregido, y debe funcionar, en caso de que necesites el ejemplo completo, como lo tengo funcionando, dime y te lo envio, saludos y gracias nuevamente

  3. Hola me gustaria saber acerca de paginar con subconsultas tengo una pero al hacer el enlace la siguiente pag no muestra nada yo pienso que ha de ser por la consulta. Es mas o menos asi “Select * from tabla where campo=’$uno’” y la variable $uno la mando traer desde un formulario.

    Espero me puedan ayudar gracias buen dia

  4. Hola Samuel, en realidad lo que hace la paginacion de registros es la clausila LIMIT, ya que define la el numero inicial del registro primero, por ejemplo 1 y la cantidad de registros a mostrar por ejemplo 10: despues lo que sigue es que si le picas a la pagina dos te mande como numero inicial 11 y cantidad de registros 20 y asi para las paginas adelante o atras, solo necesitas sumar o restar dependiento. checate el SQL que te envio, y ejecutalo a mano en el Query Browser o mysql workbech, cambia las cantidades del limit y veras como trabaja. te mando copia del sql con la definicion de las variables necesarias.

    $pagina con el valor que venga por $_REQUEST['pagina'], de no existir este $_REQUEST, la inicializamos a 1, osea, la primera pagina.

    $registrosPagina establecemos los registros que queremos mostrar por cada pagina.

    $listaInicio el numero consecutivo del registro con el cual empezaremos a listar los mismos.

    Lo siquiente es generar nuestra consulta, en la cual establecemos con LIMIT el registro de inicio de la lista y hasta cuantos registros mostraremos:

    $query = “SELECT * FROM tbl_articulos ORDER BY id_articulo LIMIT $listaInicio, $registrosPagina”;
    $result = mysql_query($query);

    Avisame si tienes otra duda, voy a hacer una pagina de ejemplo en el mismo post mostrando el codigo completo y funcionando.

Post a Comment