Paginação de Resultados em PHP

Posted by Ana Claudia on abr 10, 2007 in Javascript, 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.

8 Comments

S
abr 11, 2007 at 7:20 am

Muito bom. Eu sempre procurei por um código pequeno que fizesse a paginação. Parece que meus dias de busca terminaram. Hahahahahahaha


 
dvarcelos@globo.com
mai 9, 2007 at 1:24 am

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


 
Uélio Nobre
mai 30, 2008 at 8:21 pm

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!


 
Uélio Nobre
mai 30, 2008 at 8:47 pm

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!


 
Uélio Nobre
mai 30, 2008 at 8:53 pm

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


 
Gilberto Albino
mar 30, 2009 at 7:01 pm

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!


 
Ana Claudia
mar 31, 2009 at 9:27 pm

Atendendo a pedidos, nova formatação dos exemplos :)


 
Gabriel
jul 22, 2009 at 11:08 pm

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.. :P

Vo tentar arrumar..


 

Reply

Copyright © 2012 Ana Claudia. All Rights Reserved.
Theme by Lorelei Web Design.