Paginação de Resultados em PHP
Olá pessoal, estou de volta!
Hoje vou demonstrar o funcionamento de uma paginação simples. Como sempre adaptada aos meus interesses de scripts que eu achei pela web.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | <? $pagina = $_GET["pagina"]; $conn = mysql_connect($local,$user,$senha) or die("Erro de conexao\r".mysql_error()); mysql_select_db($db,$conn); $SQL = mysql_query("SELECT * FROM estado") or die(mysql_error()); $Qtde = 10; $Total = mysql_num_rows($SQL); $Paginas = ceil($Total/$Qtde); if(empty($pagina)){ $limit = 0; $PaginaCorrente = 1; } else { $limit = $pagina-1; $PaginaCorrente = $pagina; } $inicio = $limit * $Qtde; $SQL = mysql_query("SELECT * FROM estado Limit $inicio,$Qtde"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Exemplo - Paginação de Resultados em PHP</title> </head> <body> <form id="frm_resultados" action="<?=$PHP_SELF?>" method="post"> <? while($Linha = mysql_fetch_array($SQL)){ echo "$Linha[2] - $Linha[1]<br />\r"; } if($pagina > 1){ $menos = $pagina -1; $url ="$PHP_SELF?pagina=$menos"; echo "<a href='".$url."'>Anterior</a> |"; } echo " Página $PaginaCorrente de $Paginas "; if($pagina < $Paginas) { $mais = $pagina+1; $url ="$PHP_SELF?pagina=$mais"; echo " | <a href='".$url."' >Próxima</a>"; } echo " Ir para a página <input type='text' id='pagina' size='3' maxlength='3' value=\"$pagina\" /> <input type='button' value='ok' onclick=\"fctTrocaPagina('$PHP_SELF',$Paginas)\" />"; ?> </form> <script type="text/javascript"> function fctTrocaPagina(Pagina,Total) { var Form = document.getElementById("frm_resultados"); if (Form==null) return; var objePagina = document.getElementById("pagina"); if (objePagina==null){ return; } if((objePagina.value =='') || parseInt(objePagina.value) > Total || parseInt(objePagina.value) < 1){ alert("Digite somente números de 1 a "+Total+"."); objePagina.select(); objePagina.focus(); return false; } window.location = Pagina+"?pagina="+objePagina.value; } </script> </body> </html> |
O número da página corrente em que se encontramos é passado através de GET na linha 1
Nas linhas 3 e 4 foi feita a conexão com o banco de Dodos (troque os nomes de servidor, banco de dados, usuário e senha de acordo com a sua conexão).
Na linha 5 foi feita uma consulta na tabela para que retornassem todos os estados da tabela
,na linha 6 informamos quantos registros queremos por página, na 7 a quantidade total de páginas e finalmente na linha 8 dividimos o total de registro pela quantidade para que seja retornado o total de páginas que será exibido(note que foi utilizada a função ceil para arredondar o número).
A parte mais interessante deste script esta da linha 9 a 15: Aqui é feito uma verificação se a nossa string pagina esta vazia ou não para retornar o limite de registros da pagina corrente (ex 0 a 10, 11 a 20, etc)
Em seguida, na linha 17, é multiplicado o limite encontrado pela quantidade de registros por página para que possamos saber de qual registro a consulta deve continuar. É feita uma nova consulta de registros na linha 18, desta vez passando o primeiro registro a ser mostrado e a quantidade de resultados.
Um loop então é feito com os resultados da ultima consulta na linha 29 a 31. A primeira consulta que realizamos foi somente para pegarmos o total de registros da tabela.
Em seguida da linha 32 a 42 fazemos a navegação para que possamos avançaar e voltar as páginas. Podemos perceber que na linha 37 temos a string PaginaCorrente e Paginas. Elas são responsáveis por exibir ao usuário a pagina Corrente e o total de páginas que a consulta gerou.
A linha 43 trata-se de um atalho para ir diretamente a pagina desejada, supondo que a consulta gerou muitas páginas e passar uma a uma trabalho um pouco demorado. Neste caso recorremos a uma caixa de texto que recebe o número da página e que ao ser acionado o botão OK, uma função javascript é chamada para verificar se o número não excede o total de páginas e em seguida leva a página de registros desejada. Neste caso, passamos como parâmetro o nome da página e o total de páginas encontrado.
E para finalizar, da linha 48 a 62 temos a função javascript que chamamos anteriormente.
Agora veja o exemplo como ficou.
Uma idéia interessante é fazer a paginação dinâmica, onde o usuário, através de uma caixa de texto, digita a quantidade de registros que ele quer ver por página. Outra dica importante é passar valores de um filtro por exemplo por querystring, caso contrário o valores serão perdidos na passagem de uma página para outra.


