Inicio

Curso PHP XII: Paginación de resultados en Consultas I

19th Mayo 2009 | Curso PHP, Diseño Web, Programación Web

phpEn la Séptima entrega de este Curso de PHP vimos como acceder a una Base de Datos MySQL y listar el contenido de una tabla creando una página web

Hoy vamos a ver como paginar esos resultados, puesto que en el caso de que tengamos, por ejemplo, unas 100 o 200 filas en la tabla no creo que nos interese tirar todas en la misma página puesto que crearían una página demasiado larga, lenta de cargar e incómoda para el usuario. Lo que queremos es mostrar los resultados de 10 en 10, ó de 20 en 20 y mostrar al usuario cuantas páginas de resultados quedan para que el pueda ir avanzando una a una o bien ir a la última directamente. Algo asi hace Wordpress con los Posts de este Blog. Sería bastante incómodo que se cargaran siempre todos en la página principal.paginar

Asi, tomando el código que utilizamos en su día para consultar una Base de Datos, lo vamos a modificar para crear algo como lo que se ve en la captura del blog. La apariencia será diferente puesto que eso ya es aplicarle el estilo que queramos. Lo que interesa ahora es conseguir mostrar el número de páginas de resultados que hay y enlaces para acceder más rápidamente a esos resultados. El código quedaría algo asi:

PHP:
  1. // Desplazamiento inicial, si lo hay
  2.  if (isset($_REQUEST["offset"]))
  3.    $offset = $_REQUEST["offset"];
  4.  else
  5.    $offset = 0;
  6.  // Resultados por página que se mostarán
  7.  $resultadosPorPagina = 10;
  8.  $conexion = mysql_connect("localhost", "root", "mi_password");
  9.  mysql_select_db("prueba", $conexion);
  10.  $sentencia = "SELECT * FROM tabla LIMIT $offset, $resultadosPorPagina";
  11.  $resultados = mysql_query($sentencia, $conexion);
  12.  // Número de filas encontradas por la consulta
  13.  $numeroFilas = mysql_num_rows($resultados);
  14.  // Número total de páginas
  15.  $numeroPaginas = ceil($numeroFilas / $resultadosPorPagina);
  16.  
  17.  while ($fila = mysql_fetch_array($resultados)) {
  18.   echo "<strong>Nombre</strong>: " . $fila["nombre"] . "<br/>";
  19.   echo "<strong>Apellidos</strong>: " . $fila["apellidos"] . "<br/>";
  20.   echo "<strong>E-mail</strong>: " . $fila["email"] . "<br/>";
  21.  }
  22.  
  23.  mysql_free_result($resultados);
  24.  mysql_close($conexion);
  25.  
  26.  // Muestra las páginas disponibles
  27.  echo "<p><strong>Páginas: </strong>";
  28.  for (i = 0; i <numeroPaginas; i++) {
  29.   echo "[<a href=\"?offset=$i*$resultadosPorPagina\">" . $i + 1 . "</a>] ";
  30.  }
  31.  echo "</p>";

Se mostrarán los resultados de la consulta y debajo algo como esto:

Páginas: [1][2][3]

que son enlaces a las páginas de resultados

Obviamente, esta solución no es perfecta, puesto que si existen muchas páginas de resultados puede ser bastante incómoda. La solución más idónea es la que se ve en la captura pero a eso llegaremos en la segunda parte de este tema, en la próxima entrega del Curso

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay

Comentar este post (2 comentarios)



  • 1. Zea  |  Julio 15th, 2009 a las 18:38 Usa el Saltamontes para subir

    Una pregunta, ¿que es el desplazamiento inicial? ¿A que se refiere exáctamente?

  • 2. astable  |  Julio 24th, 2009 a las 18:27 Usa el Saltamontes para subir

    Hola Zea,

    El desplazamiento se refiere al indice a partir del cual seleccionas datos de la Base de Datos con la consulta SELECT. Si te fijas al hacer la consulta se utiliza la orden LIMIT para la cual le dices desde que elemento y cuantos elementos quieres mostrar para luego cargarlos. De esa manera si estás en la primera pagina mostrarás, empezando en 0, 10 resultados. Si estuvieras en la segunda página, el desplazamiento inicial seria 10 y mostrarias elementos desde el 10 hasta el 20, y asi sucesivamente. Esa es la idea de paginar los resultados en una web, asi no hace falta cargarlos todos de golpe.

    Espero habertelo aclarado asi, sino me vuelves a preguntar y ya está

Escribe aquí tu comentario

Required
Requerido, No se mostrará




Letra pequeña que poca gente lee

  • Por seguridad, la dirección IP de tu ordenador (38.107.191.85) se guardará con el comentario pero no será publicada para proteger tu anonimato.
  • Si escribes TODO EN MAYÚSCULAS tu comentario no se publicará. También cualquier modo de descalificación personal o mensajes incomprensibles o absurdos.
  • Algo de HTML permitido.
  • Más información sobre las Normas del Blog en los Modales Electrónicos del Sekano.
  • Contacta con Sekano si quieres incluir imágenes en tu comentario, registrar un nick para el blog o dirigirte personalmente al autor de este blog. Usa la página de contacto con Sekano.
  • Suscribir a este comentario via RSS Feed

Pack Sekano Triops
Jardín Natural, el jardín ecológico

Los Más Calenticos

Últimos Comentarios

Comentar en el SekanoPara comentar algo busca un icono como este al final de cada post o pincha en el comentario de otro lector.

Sekano Blogs, Servicios de Diseño Web

Red Sekano

Desde el Sekano Barracuda Mundo de Gea

Los Más Impactantes

Mensajes por Categorías

Calendario de Posts

Septiembre 2010
L M X J V S D
« Jul    
 12345
6789101112
13141516171819
20212223242526
27282930  

Mensajes por Meses

Asociación Ecologista Equipo Triacanthos

Páginas