+6

Paginação de Resultados

criado por Fábio B Santana em 06/06/2004 11:26pm
Faremos toda a paginação com apenas um arquivo, denominado paginacao.php. Há algumas considerações prévias que devem ser definidas antes de implementar a paginação para o resultado de uma query:

1 - definir quantos registros por página você pretende apresentar;
2 - verificar o total de registros retornados pela consulta;
3 - calcular o total de páginas necessárias para expor os registros;

Vamos ao código:

<?php
// primeira parte...

// consulta no banco de dados...
$host = "localhost";
$user = "user";
$pass = "pass";
$db_nome = "database";
$link = mysql_connect ($host, $user, $pass);
$query = "SELECT * FROM tabela";
$result = mysql_db_query ($db_nome, $query, $link) or die ("Conexão falhou!");

// total de registros retornados pela consulta...
$num = mysql_num_rows($result);

// total de registros por página...
// você pode fixar ou deixar que o usuário escolha este valor...
$total_reg = 10;

// finaliza a consulta...
mysql_close($link);

// fim da primeira parte...
?>

Agora imagine que você (ou o usuário) defina uma paginação contendo 10 registros por página. Devemos tratar 3 situações:

1 - o resultado contém 10 ou menos registros e isto requer uma única página.

2 - o resultado contém mais de 10 registros e o número é multiplo de 10 (vamos supor 30). Isto requer 3 páginas.

3 - o resultado contém mais de 10 registros mas o número não é multiplo de 10 (vamos supor 33). Isto requer 3 páginas mais uma adicional para apresentar os 3 últimos registros .

Vamos ao código:

<?php
// início da segunda parte...

// 10 registros ou menos...
if ($num <= $total_reg) {
    $total_paginas = 1;
}
  
// mais de 10 registros com valor múltiplo de 10...            
if ($num%$total_reg == 0) {
    $total_paginas = $num / $total_reg;
}
// mais de 10 registros porém o valor não é múltiplo de 10... 
else {
    // como a divisão não é exata, teremos que subtrair a parte que não é inteira e 
    // acrescentar 1 página.
    $total_paginas = ($num/$total_reg) - (($num%$total_reg)/$total_reg) + 1;
}

// fim da segunda parte...
?>

Na próxima etapa montaremos a paginação dos resultados para a consulta.

Comentários:

Mostrando 1 - 10 de 24 comentários
Diogo Ribeiro disse:
Ótimo! Simples e funcional, mas se eu quiser criar uma paginação igual a paginação do Google? Não precisa ter imagens e formatação CSS, e sim a definição de só mostrar 10 links numéricos por fez!
Exemplo: 1,2,3...10, ai se clicar em próxima mostrará 11,12,13,14...
Entendeu? Se puder ajudar nessa, desde a já agradeço!
Obrigado e parabéns pelo artigo!
29/03/2010 4:05pm (~6 anos atrás)

Muito bommmmmm!
30/11/2006 4:01pm (~10 anos atrás)

Gostei muito do tutorial e não encontrei absolutamente nenhuma falha. Mesmo ele sendo grande é muito didático aprendi com você!!!! Parabéns!
24/04/2006 12:21pm (~10 anos atrás)

Alex S Silv disse:
segue:
04/10/2005 8:46pm (~11 anos atrás)

Nend disse:
Estou com o mesmo problema do mascker, comigo o 1° resultado tb não é mostrado, faz tempo q o artigo foi publicado... mas isso tah me dando uma boa dor de cabeça, se alguém souber, ou poder ajudar... falem ai... pq isso tah me atrasando... e se for mudar de script de paginação, vai dar muito trabalho, pois jah integrei o que queria a paginação ai fica algo complicado. :D
12/02/2005 10:07am (~11 anos atrás)


$dados = mysql_fetch_array($res);
$id_termos = $dados["id_termos"];
$texto = $dados["texto"];
$texto=nl2br($texto);

13/01/2005 8:13am (~12 anos atrás)

<? include("conectar.php")?><p>Digite uma palavara relacionada com a pe&ccedil;a que voc&ecirc; procura.
(Eixo, Pino...)<br>
Se voc&ecirc; quiser a lista completa <a href="/itens/relatorio2.php" target="_blank">clique
aqui</a>.</p>
<form method="POST">
Palavra: <input type="text" name="palavra">
<input type="submit" value="Buscar">
</form>
<?
if(!empty($HTTP_POST_VARS['palavra'])) {
$palavra = str_replace(" ", "%", $HTTP_POST_VARS['palavra']); /* Altera os espaços adicionando no lugar o simbolo % */
$qr = "SELECT * FROM lista WHERE descricao LIKE '%".$palavra."%' ORDER BY id DESC";
$sql = mysql_query($qr); // Executa a query no Banco de Dados
$total = mysql_num_rows($sql); // Conta o total ded resultados encontrados
echo "Sua busca retornou '$total' resultados.<br>\n";
echo "<table width=670 border=1 cellpadding=1 cellspacing=1 >";
echo "<tr>";
echo "<th >ID:</th>";
echo "<th >Item:</th>";
echo "<th >Descrição:</th>";
echo "<th >Marca linha familia:</th>";
echo "<th >Estoque:</th>";
echo "<th >A vista:</th>";
echo "<th >A prazo:</th>";
echo "</tr>";
while ($linha=mysql_fetch_array($sql)) {
$id = $linha["id"];
$item = $linha["item"];
$descricao = $linha["descricao"];
$mlf = $linha["mlf"];
$estoque = $linha["estoque"];
$avista = $linha["avista"];
$aprazo = $linha["aprazo"];


echo "<tr>";
echo "<th >$id<br></th>";
echo "<th >$item<br></th>";
echo "<th >$descricao<br></th >";
echo "<th >$mlf<br></th>";
echo "<th >$estoque<br></th>";
echo "<th >$avista<br></th>";
echo "<th >$aprazo<br></th>";
echo "</tr>";
echo "<br>";

}

echo "</table>";
}
//}
?>
08/07/2004 2:09pm (~12 anos atrás)

Identifiquei como fazer, na terceira etapa do script coloquem isso:

//aqui você personaliza sua saída...
echo $array_result[0]."<br>";
05/07/2004 12:27pm (~12 anos atrás)

Segundo o comentário do nosso amigo Ferrugem, como é feita a exibição, pois só mostram os botões e os números das páginas. COMO EXIBIR OS REGISTROS NA PÁGINA?

05/07/2004 10:50am (~12 anos atrás)

Guedes disse:
Parabéns, acho muito importânte a programação em php independente do banco de dados, alguns podem não concordar comigo, mas quem trabalha ou já trabalhou com manutênções contínuas de alguma(s) empresa(s) sabe quanto é importante a programação voltada para qualquer banco. Minha sugestão é adaptar este script para classe.
21/06/2004 7:46am (~12 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)