Tutoriales de php

Introducción

La paginación de resultados es la única solución adecuada para poder mostrar al usuario los 4281 resultados que ha devuelto su búsqueda? ?pero como hacerloó

Bien, ya sabes lo que quieres. Quieres paginar resultados. ?Pero como hacerloó ?Cuantos resultados por páginaó ?Cuantas páginasó ?Y si resultan que me salen 1000 páginas? muestro un enlace a cada una de ellasó ?Solo muestro enlaces a las primeras 10 páginasó Y al cambiar de página? ?que hagoó ?debo volver a hacer la busquedaó Este artículo pretende dar respuesta a todas estas preguntas.

En realidad, paginar resultados es tan fácil como seguir los siguientes 3 pasos:

Paso 1

Hacer una llamada a la base de datos para obtener el número total de resultados de la busqueda y asignar el resultado a una variable que llamaremos $total. Con MySQL la llamada debería ser algo así:



<?php
$get = mysql_query(select count(*) from mitabla where ?);
$total = mysql_result($get,0);
?>


Paso 2

Hacer otra llamada que devuelva los resultados de la busqueda, limitando los resultados devueltos mediante las variables $pp y $st. $pp define el número de resultados por páginas. $st define el número, del total de resultados, desde donde empezar a mostrar los resultados en la página actual.
Usando MySQL la llamada será algo así:



<?php
// obtener el valor de $st
if(isset($_GET[st])) {
$st = $_GET[st];
} else {
$st = 0;
}

// la llamada a base de datos
$get = mysql_query(select * from mitabla where ? limit .$st.,.$pp);
while($row=mysql_fetch_row($get)) {
// imprimir resultados
echo $row[0].
;
}
?>


$st es una variable que se obtiene de la dirección de la página actual, por lo que su valor se debe obtener de la variable $_GET[?st?]. En la primera página de resultados $_GET[?st?] no esta definida, por lo que como puedes observar en el código superior tendremos que comprobarlo, y si resulta que no esta definida, tendremos que asignarle el valor 0.

Paso 3

Aplicar la función paginacion() que se muestra a continuación. Esta función se encarga de imprimir una serie de enlaces a las páginas resultantes de la busqueda.



<?php
// resultados por pagina
$pp = 10;

// la función
function paginacion($total,$pp,$st,$url){

if($total>$pp) {
$resto=$total%$pp;
if($resto==0){
$pages=$total/$pp;
} else {
$pages=(($total-$resto)/$pp)+1;
}

if($pages>10){
$current_page=($st/$pp)+1;
if($st==0){
$first_page=0;
$last_page=10;
} else if($current_page>=5 && $current_page< =($pages-5)) {
$first_page=$current_page-5;
$last_page=$current_page+5;
} else if($current_page<5) {
$first_page=0;
$last_page=$current_page+5+(5-$current_page);
} else{
$first_page=$current_page-5-(($current_page+5)-$pages);
$last_page=$pages;
}
} else {
$first_page=0;
$last_page=$pages;
}

for($i=$first_page;$i< $last_page;$i++) {
$pge=$i+1;
$nextst=$i*$pp;
if($st==$nextst){
$page_nav .= <b>[.$pge.]; 
} else {
$page_nav .= <a href=".$url.$nextst.">.$pge.; 
}
}

if($st==0) { $current_page = 1; } else { $current_page = ($st/$pp)+1; }

if($current_page< $pages) {
$page_last = <b>[<a href=".$url.($pages-1)*$pp.">>>>];
$page_next = [<a href=".$url.$current_page*$pp.">>];
}

if($st>0){
$page_first = <b>[<a href=".$url.0">< <<]; 
$page_previous = [<a href=".$url..($current_page-2)*$pp.">< ];
}
}

return "$page_first $page_previous $page_nav $page_next $page_last";
}

// mostrar resultado de la funcion
echo paginacion($total, $pp, $st, http://tudominio.com/mostrar.phpóst=);
?>


Autor: Aitor Ortuondo

Comentarios en "Paginacion de resultados en php"

Table 'programa_programas.t_comentarios' doesn't exist