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.



Muito bom. Eu sempre procurei por um código pequeno que fizesse a paginação. Parece que meus dias de busca terminaram. Hahahahahahaha
Ana.
Gostei muito.
Achei outro site (duma outra Ana rsrsrrsrrs) que tb ensina – entre outras coisas.
O site com a apostila é: http://anacarol.blog.br/?cat=6
Até mais e obrigado pela dica
Ai pessoal… isso ai é só para voces abrirem a cabeça…
A base vocês já tem!!
Agora resta fazer um mais complexo.. e mais complexo.. e mais complexo.. para fixar.. senão vocês esquecem!!.
Ana… você foi 10!
me desculpa eu “xheretar”….
mas ficaria ainda mais interessante.. também era.. os numeros das páginas..
basta substituir a linha 37, por
// inserindo numeros de páginas
print “Páginas: “;
for($i=1; $i$i ”;
}
//
e só mais uma coisinha…
agora falta identificar visualmente a link atual..
Para saber em que página estou…
abraços a todos!
opa… olha eu aqui de novo…
me desculpa Ana mas…
eu quero falar sobre o Gilberto Albino…
Assim.. num liga para essas besteiras nao… isso ai são pessoas que não sabe abrir a imagem em uma outra janela, e fica se queixando… além do mais… o Blog é seu.. se alguem não estiver satisfeito com o seu blog, com as suas dicas e macetes simples… CAIA FORA.. procure um site ou programa que triture no liquidificador e dê na boquinha.
Me desculpa Ana…
Abraços
Olá, Uélio Nobre.
Antes de fazer minha réplica ao seu comentário, gostaria de lhe dizer que contribuo para projetos OpenSource de grande porte como programador e no dia que achei este blog, esta justamente procurando um script de paginação que eu mesmo havia criado e não me lembrava em qual site eu publiquei.
Eu não costumo usar coisas prontas, muito menos mastigadas, simplesmente encontrei este blog por acaso e dei minha sugestão, que vou explicar novamente abaixo.
Estamos em plena Era da Acessibiliade e Portabilidade.
E Pelo que eu saiba, imagens não foram criadas para distribuir conteúdo pela internet, ao menos que eu esteja enganado.
E além do mais, quem não aceita sugestões ou críticas não é o tipo mais ideal para replicar uma critica ou sugerir algo.
Faça o que eu digo mas não faça o que eu faço.
De qualquer forma, como você mesmo disse, o blog é dela e ela faz o que bem quiser com o blog.
Eu busco sempre os Padrões web para tudo o que faço… e de boa, pra que digitar algo se eu poderia copiar e colar primeiro antes de testar?
Boa sorte!
Atendendo a pedidos, nova formatação dos exemplos
Adaptei as minhas necessidads e funcionou normal..
Agora.. como fazer: Anterior | [1] [2] | Proximo…
E quando existir apenas 1 comentario, e a quantidade a ser exibida for 10?
Aparece a paginação mesmo assim..
Vo tentar arrumar..