Paginación con PHP y MySQL

Escrito en December 4, 2007 – 3:24 am | por Titux | 5,417 views

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.

Este ejemplo lo pueden ver trabajando en El Bazar.

Empecemos:

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

PHP:
  1. if (!isset($_REQUEST['pagina'])) {
  2.     $pagina = 1;
  3. }else{
  4.     $pagina = $_REQUEST['pagina'];
  5. }
  6.  
  7. $registrosPagina = 10;
  8. 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:

PHP:
  1. $query = "SELECT * FROM tbl_articulos ORDER BY id_articulo LIMIT $listaInicio, $registrosPagina";
  2. $result = mysql_query($query);
  3.  
  4. while($rs = mysql_fetch_array($result)){
  5.     //imprimimos nuestros registros linea por linea en una tabla o brincando linea o como gusten, aqui solo mostrare la impresion de los campos.
  6.     print "{$rs['descripcion']}, {$rs['precio']}, {$rs['existencia']}";
  7. }

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.

PHP:
  1. $query = "SELECT * FROM tbl_articulos";
  2. $result = mysql_num_rows($result);
  3. $totalRegistros = mysql_num_rows($result);
  4.  
  5. // total paginas redondeadas hacia arriba
  6. $totalPaginas = ceil($totalRegistros / $registrosPagina);

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

PHP:
  1. $paginaAnterior = $pagina - 1;
  2. $paginaSiguiente = $pagina + 1;
  3. if ($paginaSiguiente> $totalPaginas) {
  4.     $paginaSiguiente -= 1;
  5. }
  6.  
  7. if ($paginaAnterior <1) {
  8.     $paginaAnterior += 1;
  9. }
  10.  
  11. //Pagina Anterior
  12. print "<a href='script.php?pagina=$paginaAnterior'><<Anterior";
  13.  
  14. //Paginas existentes
  15. for ($i = 1; $i &lt;= $totalPaginas; $i++){
  16.     print "<a href='script.php?pagina=$i'> $i ";
  17. }
  18.  
  19. //Pagina Siguiente
  20. print "<a href='script.php?pagina=$paginaSiguiente'>Siguiente>>";

Con esto ya deben tener una paginacion 2/3 decente, Acabo de integrar al post un plugin para codigo, espero funcione bien. Si tienen alguna duda, adelante, pregunten.

Saludos.

Entradas Relacionadas

  1. 5 Responses to “Paginación con PHP y MySQL”

  2. By JoelCristobal on Jun 28, 2008 | Reply

    Gracias por el Gran aporte

    ———————————–
    Diseño Web
    Diseño Web Peru
    desarrollo de software

  3. By Titux on Jun 30, 2008 | Reply

    Muchas Gracias por sus Comentarios.

    Saludos…

  4. By Sourcegeek on May 4, 2009 | Reply

    No entendi bien.
    Podrias explicarlo mejor por favor? Seria de gran utilidad, pues me urge porque hice una pagina al estilo wordpress, pero no se paginar los articulos =S

    Saludos!

  5. By alexito on May 5, 2009 | Reply

    Hola amigo. sabes tengo problemas con tu script, no logra funcionar hay problemas con la ultima parte del script, a partir de
    $paginaAnterior = $pagina - 1;

    no se si podria solucionarlo porque le a estado dando vueltas al asunto y nada, gracias

  1. 1 Trackback(s)

  2. Feb 20, 2008: Paginacion con PHP y MySQL | DamageBlog

Post a Comment

Acerca De

Alterbrain - Tecnologia, Programacion Web, MySQL, Diseño, Tips, Noticias y Mas.

Buscar Post :