select * from pais limit 180,10
Como vemos LIMIT tiene dos argumentos, el primero es el registro por el que empezar los resultados y el segundo el número de resultados a recoger en el conjunto de registros resultante.
Así pues, en este ejercicio de paginación la cláusula LIMIT será la clave para mostrar los registros en grupos del tamaño deseado.
//Limito la busqueda
$TAMANO_PAGINA = 10;
//examino la página a mostrar y el inicio del registro a mostrar
$pagina = $_GET["pagina"];
if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $TAMANO_PAGINA;
}
Estoy definiendo el tamaño de la página. Luego procuro recibir la página por parámetro en la URL. Si no se recibió nada, se entiende que la página a mostrar es la primera, luego la variable $inicio, que guarda el primer registro a mostrar (para indicarlo en la sentencia SQL en el apartado LIMIT), será cero. Si habíamos recibido algo como página, calculo el inicio con una simple multiplicación de la página a mostrar por el tamaño_ de página definido antes.
Es habitual en estas páginas de resultados informar un poco sobre la cantidad de registros encontrados y los datos de la página que estamos viendo. Estos datos se pueden obtener con unas sencillas operaciones.
//miro a ver el número total de campos que hay en la tabla con esa búsqueda
$ssql = "select * from pais " . $criterio;
$rs = mysql_query($ssql,$conn);
$num_total_registros = mysql_num_rows($rs);
//calculo el total de páginas
$total_paginas = ceil($num_total_registros / $TAMANO_PAGINA);
//pongo el número de registros total, el tamaño de página y la página que se muestra
echo "Número de registros encontrados: " . $num_total_registros . "<br>";
echo "Se muestran páginas de " . $TAMANO_PAGINA . " registros cada una<br>";
echo "Mostrando la página " . $pagina . " de " . $total_paginas . "<p>";
|
Nota: Este código podría mostrar una información como esta:
Número de registros encontrados: 256 Se muestran páginas de 10 registros cada una Mostrando la página 19 de 26 |
A continuación puedo calcular el número total de páginas de resultados que genera la búsqueda. La función ceil() redondea números en coma flotante o reales hacia arriba, así pues, devuelve el entero por arriba más próximo.
Las siguientes líneas, donde se utiliza echo, tienen como objeto mostrar los datos en la página.
Ahora veremos el código que realiza la búsqueda en la base de datos, extrayendo y mostrando solamente aquellos registros que corresponden con la página a mostrar.
//construyo la sentencia SQL
$ssql = "select * from pais " . $criterio . " limit " . $inicio . "," . $TAMANO_PAGINA;
$rs = mysql_query($ssql);
while ($fila = mysql_fetch_object($rs)){
echo $fila->nombre_pais . "<br>";
}
//cerramos el conjunto de resultado y la conexión con la base de datos
mysql_free_result($rs);
mysql_close($conn);
Se construye la sentencia SQL para extraer los datos con el criterio, que veremos luego de donde sale, pero que en principio lo podemos tomar como una cadena vacía. También se utiliza LIMIT, como ya se indicó: poniendo los valores definidos antes como inicio y tamaño de página.
El resto es un recorrido típico por un conjunto de registros, en este caso los países de nuestra base de datos, donde se van mostrando todos los elementos desde el principio hasta el final. Finalizando este recorrido no vamos a realizar ninguna acción más con la base de datos, así que podemos cerrar el resultado de la búsqueda y la conexión con la base de datos.
Ahora podemos ver el código que muestra en la parte de abajo los numeritos de todas las páginas que genera la búsqueda, para que el visitante pueda seleccionar una página y moverse entre los resultados.
//muestro los distintos índices de las páginas, si es que hay varias páginas
if ($total_paginas > 1){
for ($i=1;$i<=$total_paginas;$i++){
if ($pagina == $i)
//si muestro el índice de la página actual, no coloco enlace
echo $pagina . " ";
else
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
echo "<a href='index.php?pagina=" . $i . "&criterio=" . $txt_criterio . "'>" . $i . "</a> ";
}
}
La primera línea comprueba si realmente hay varias páginas de resultados, pues, si no es así no tendría que mostrar nada. Si efectivamente hay varias páginas para mostrar se recorren todas y para cada una se muestra el índice.
El índice a mostrar puede que sea el de la página que se está visualizando en ese momento y en ese caso simplemente podríamos el numerito, pero no el enlace para ir a ese documento, pues es en el que estamos. En caso de que sea una página de resultados distinta, se muestra un enlace para moverse a dicha página, donde se incluye pasando por parámetro tanto el índice de la página que se desea ver como el criterio de la búsqueda que se estaba realizando.
Hasta aquí el código imprescindible para la paginación. Aunque aun vamos a ver alguna cosa más.
El criterio se podrá definir en una caja de texto y habrá un botón de buscar que llame a la misma página pero pasando el texto con las palabras a buscar en la base de datos.
<form action="index.php" method="get">
Criterio de búsqueda:
<input type="text" name="criterio" size="22" maxlength="150">
<input type="submit" value="Buscar">
</form>
Nos fijamos que el método por el que pasamos este formulario es GET. Esto es debio a que no queremos liar el código y como estamos pasando ya por GET el criterio en otros sitios, utilizamos el mismo método.
El formulario lo colocaremos debajo, pero habrá también un trozo de código que recogerá la información y la tratará para adaptarla a una sentencia de búsqueda en la base de datos. Este código lo colocaremos en la parte de arriba de la página.
//inicializo el criterio y recibo cualquier cadena que se desee buscar
$criterio = "";
if ($_GET["criterio"]!=""){
$txt_criterio = $_GET["criterio"];
$criterio = " where nombre_pais like '%" . $txt_criterio . "%'";
}
Se inicializa el criterio a una cadena vacía y luego se comprueba si se ha recibido algo por método GET en el campo criterio. Si era así se puede recoger el texto recibido y construir el criterio, que no es más que una cláusula WHERE donde se buscan elementos, en este caso países, cuyo nombre contenga por algún sitio las letras que se han recibido como texto del criterio.
En nuestro ejemplo nos faltan por indicar las sentencias para conectar con MySQL y seleccionar la base de datos a utilizar. Serían unas parecidas a estas.
//conecto con la base de datos
$conn = mysql_connect("servidor","usuario","password");
mysql_select_db("nombre_bbdd",$conn);
Asímismo, disponemos de otro artículo que trata la paginación de resultados en PHP con un enfoque un poco distinto. El artículo viene con el script explicado y todo lo necesario para ponerlo en marcha: Paginación PHP y MySQL. Ejemplo 2.
Recomendamos también la lectura del artículo Paginator, script para paginar resultados con PHP y MySQL. Es un texto que presenta un interesante script en español y gratuito para realizar la paginación de resultados cómodamente.
| Por: Freddy | 30/1/2003
|
1. ¿Qué es $_GET?
2. ¿De dónde sale $pagina?
RESPUESTA
$_GET es un array asociativo que contiene todas las variables que se reciben por el método GET, es decir, por la URL. Se habla de ello en el artículo Pasar variables por la URL
$pagina viene de los enlaces de la parte de abajo, que muestran los índices de las páginas de resultados y permiten seleccionar aquella que se desea ver. Pasan a la página la variable por URL y con eso de $_GET la recogemos. El trozo de código donde se generan los índices está indicado en el artículo. De todos modos transcribo aquí un trozo para que se pueda identificar:
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
echo "<a href='index.php?pagina=" . $i . "&criterio=" . $txt_criterio . "'>" . $i . "</a> ";
| Por: /r0d | 13/6/2003
|
chau
| Por: José Pino | 10/9/2004
|
| Por: Simae | 28/10/2004
|
| Por: Matias | 13/12/2004
|
| Por: krypto84sv | 29/8/2005
|
| Por: mario castillo | 15/11/2005
|
| Por: J. Pedro | 11/8/2006
|
| Por: Daniel Carrero | 28/9/2006
|
| Por: Gaby | 11/2/2007
|
| Por: Gaby | 11/2/2007
|
| Por: Luis | 18/5/2007
|
| Por: cristina | 02/11/2007
|
| Por: Carlos | 11/11/2007
|
| Por: santiago | 11/10/2008
|
![]() pepemet... | Como ordeno la lista por nombre? | 06/6/2009 |
| Un detallito Por: CamilongO | 25/7/2009
|
| Agregue botones Anterior y Siguiente Por: facundo | 29/7/2009
|
| paginacion Por: alejandro | 27/2/2010
|
![]() nosfera... | Felicidades, increibel articulo | 17/3/2010 |
![]() kfn | PROBLEMA AL DESCARGAR | 17/4/2010 |
![]() lilipat... | El archivo para descarga no existe | 31/5/2010 |
| paginacion de un carrito de compras Por: paco | 19/6/2010
|
| Helllllppppp Por: Olifex | 16/7/2010
|
![]() carolan | LAS PAGINAS CUANDO SE CREAN | 27/7/2010 |
![]() carolan | CREAR PAGINAS HTML A TRAVES DE PHP | 27/7/2010 |
![]() rufus | no me funciona el script | 03/9/2010 |
![]() Aurelia... | Funciona con mas de 10 registros | 13/9/2010 |
| Con este codigo Por: Franz1628 | 11/11/2010
|
![]() franz16... | buen codigo | 11/11/2010 |
![]() eltiope... | Paginacion de resultados desde un formulario | 29/11/2010 |
| url amigable para paginacion de resultados Por: León | 29/5/2011
|
![]() angel_o... | paginacion con php | 17/6/2011 |
| Logre hacerlo casi todo =P | 05/8/2011 |
| Agradecimiento Por: Jhonattan | 05/8/2011
|
![]() miguel_... | controlar el numero de paginas | 18/8/2011 |
| Sensibilidad a Mayúsculas/minúsculas Por: Esteban | 19/8/2011
|
![]() HERMAN | Simple y efectivo | 11/9/2012 |
![]() branny2... | PAGINACION | 09/1/2013 |
![]() sub_87 | prioridad en la paginacion | 16/4/2013 |
![]() olpo18 | Interesante | 04/5/2013 |