Programación en castellano
Inicio > Taller Java > Internet > Paginar los resultados de una consulta en PHP
-Artículos

Paginar los resultados de una consulta en PHP

1 . Mostrar los registros adecuados
2 . Añadir los enlaces a otras páginas

Realizar una consulta a una base de datos MySQL desde PHP y presentarla es sencillo. El problema viene cuando debemos presentar 3000 registros y nos gustaría que el usuario no esperara hasta Nochebuena. En ese caso, se presenta un número menor de registros en la página (diez, viente) y se añaden enlaces para poder acceder a los demás. A esto se le llama paginación.

Mostrar los registros adecuados

Para poder paginar debemos recibir en la página, además de los parámetros que reciba normalmente, uno que indique la página de resultados que deseamos obtener. Por defecto será 1 y lo llamaremos pag. Supongamos que tenemos una página que devuelve el nombre de todos los clientes de una empresa. La llamaremos, en un alarde de originalidad, clientes.php. Sería algo así:

<html> 
<body> 
<?php 
$link = mysql_connect("localhost", "nobody"); 
mysql_select_db("mydb", $link); 
$result = mysql_query("SELECT nombre, apellidos FROM clientes", $link); 
if (mysql_num_rows($result)){ 
  echo "<table border = '1'> \n"; 
  echo "<tr><td>Nombre</td><td>Apellidos</td></tr> \n"; 
  while ($row = @mysql_fetch_array($result)) { 
    echo "<tr><td>".$row["nombre"].
      "</td><td>".$row["email"]."</td></tr> \n"; 
  }
  echo "</table> \n"; 
}
else
  echo "¡ No se ha encontrado ningún registro !";
?> 
</body> 
</html>

Para poder soportar paginación debemos, primero, decidir cuantos registros presentamos por página (por ejemplo, 10) y recibir el número de página que debemos presentar. Hay dos maneras de obtener el número de registros totales y los registros que necesitamos para presentar la página. Nosotros utilizaremos dos consultas. En la primera obtendremos el total de registros de la tabla y, en la segunda, cogeremos sólo los registros que necesitamos haciendo uso de LIMIT. Sustituiremos el código de la consulta por lo siguiente:

if (!isset($pag)) $pag = 1; // Por defecto, pagina 1
$result = mysql_query("SELECT COUNT(*) FROM clientes", $link); 
list($total) = mysql_fetch_row($result);
$tampag = 10;
$reg1 = ($pag-1) * $tampag;
$result = mysql_query("SELECT nombre, apellidos FROM clientes
  LIMIT $reg1, $tampag", $link); 

Añadir los enlaces a otras páginas

La primera labor que vamos a hacer es crear una función abstracta que reciba el número de registros que en total devuelve la consulta, el tamaño de página, el número de la página actual, y el texto del enlace hasta insertar el número de página. Este último parámetro puede resultar un poco confuso. Pongamos un ejemplo. Si en nuestra página recibimos ese número por el parámetro pag, si quisieramos ver la página 2 escribiríamos:

clientes.php?pag=2

Por lo tanto, como debemos quitar el número de página, nos quedará:

clientes.php?pag=

La función deberá obtener primero el número total de páginas. Luego averiguará si existe una página anterior, escribiendo en enlace que va a esa página previa. Lo siguiente es escribir los enlaces a todas las páginas anteriores a la actual desde la 1. Luego escribe el número de la página actual, resaltado, pero sin enlace. Después escribe los números de las páginas posteriores y, finalmente, el enlace a la página posterior:

/******************************************************/
/* Funcion paginar
 * actual:          Pagina actual
 * total:           Total de registros
 * por_pagina:      Registros por pagina
 * enlace:          Texto del enlace
 * Devuelve un texto que representa la paginacion
 */
function paginar($actual, $total, $por_pagina, $enlace) {
  $total_paginas = ceil($total/$por_pagina);
  $anterior = $actual - 1;
  $posterior = $actual + 1;
  if ($actual>1)
    $texto = "<a href=\"$enlace$anterior\">&laquo;</a> ";
  else
    $texto = "<b>&laquo;</b> ";
  for ($i=1; $i<$actual; $i++)
    $texto .= "<a href=\"$enlace$i\">$i</a> ";
  $texto .= "<b>$actual</b> ";
  for ($i=$actual+1; $i<=$total_paginas; $i++)
    $texto .= "<a href=\"$enlace$i\">$i</a> ";
  if ($actual<$total_paginas)
    $texto .= "<a href=\"$enlace$posterior\">&raquo;</a>";
  else
    $texto .= "<b>&raquo;</b>";
  return $texto;
}

Además de incluir la función en nuestro script la tendremos que llamar después de cerrar la tabla:

echo paginar($pag, $total, $tampag, "clientes.php?pag=");

Y con esto ya tenemos un sistema de paginación que podremos utilizar en nuestras páginas.

 

Últimos comentarios
Últimos 5 comentarios

Simple y bueno (25/06/2008)

Por
gracias.-

el codigo esta muy simple y efectivo

Simple y bueno (25/06/2008)

Por
gracias.-

el codigo esta muy simple y efectivo

Simple y bueno (25/06/2008)

Por
gracias.-

el codigo esta muy simple y efectivo

Ayuda (26/02/2008)

Por
necesito ayuda con una consulta

miren lo que pasa esque quiero realizar una consulta en php pero solo quiero que me pida el nombre de la persona y me enliste los datos de la misma en otro formulario

osea algo asi
nombre del usuario ********** buscar
que me pida el nombre cuando le introduzca el nombre y le de buscar que me saque los datos de esa persona si se encuentra en la base de datos esta en mysql o que me diga que no encontro a ese usuario si me pueden ayudar se los agradecere muchisimo

Funciona para cualquier numero de registros (31/10/2007)

Por
Muy buenas, excelente el código para paginar, no le encuentro la pega!
A partir de 1000 registros debería seguir funcionando igual, p ej, si paginamos cada 10 registros, y queremos ver la página 300, se aplica la fórmula bien indicada originalmente:
$reg1 = ($pag-1) * $tampag;
Que nos daría: $reg1=299*10, es decir, empezaría mostrando desde el registro 2990.
Yo creo q funciona bien sin cambios...

Un saludo a tod@s.

 
Tienda
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados