Vamos a mais um artigo. Desta vez, vou ensinar a fazer a paginação de resultados de uma consulta SQL. A paginação é muito útil quando de trata de vários registros, e hoje vamos aprender uma paginação simples.
Veja antes o que será feito, clicando aqui.
1. Banco de dados
Vamos utilizar, novamente, como um simples exemplo, uma tabela de produtos:
CREATE TABLE IF NOT EXISTS `produtos` ( `cod` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(50) NOT NULL, `valor` double NOT NULL, PRIMARY KEY (`cod`) ) ENGINE =MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; INSERT INTO `produtos` (`cod`, `nome`, `valor`) VALUES (1, 'Produto 1', 1.99), (2, 'Produto 2', 5.19), (3, 'Produto 3', 8.25), (4, 'Produto 4', 12.99);
Criamos nossa tabela produtos e inserimos inicialmente 4 produtos para utilizarmos como exemplo.
2. Paginando Resultados
Agora vamos ao código para realizar a paginação dos produtos:
<?php
// Informações da query
$campos_query = "*";
$final_query = "FROM produtos ORDER BY cod ASC";
// Maximo de registros por pagina
$maximo = 2;
// Declaração da pagina inicial
$pagina = $_GET["pagina"];
if($pagina == "") {
$pagina = "1";
}
// Calculando o registro inicial
$inicio = $pagina - 1;
$inicio = $maximo * $inicio;
// Conta os resultados no total da query
$strCount = "SELECT COUNT(*) AS 'num_registros' $final_query";
$query = mysql_query($strCount);
$row = mysql_fetch_array($query);
$total = $row["num_registros"];
###################################################################################
// INICIO DO CONTEÚDO
// Realizamos a query
$sql = mysql_query("SELECT $campos_query $final_query LIMIT $inicio,$maximo");
// Exibimos os nomes dos produtos e seus repectivos valores
while ($linha = mysql_fetch_object($sql)) {
echo "<b>" . $linha->nome . "</b> (R$ ". $linha->valor.")<br />";
}
// FIM DO CONTEUDO
###################################################################################
$menos = $pagina - 1;
$mais = $pagina + 1;
$pgs = ceil($total / $maximo);
if($pgs > 1 ) {
echo "<br />";
// Mostragem de pagina
if($menos > 0) {
echo "<a href=".$_SERVER['PHP_SELF']."?pagina=$menos>anterior</a> ";
}
// Listando as paginas
for($i=1;$i <= $pgs;$i++) {
if($i != $pagina) {
echo " <a href=".$_SERVER['PHP_SELF']."?pagina=".($i).">$i</a> | ";
} else {
echo " <strong>".$i."</strong> | ";
}
}
if($mais <= $pgs) {
echo " <a href=".$_SERVER['PHP_SELF']."?pagina=$mais>próxima</a>";
}
}
?>
O código bem está comentado, e também é bem adaptável. Basta apenas você definir a variável $campos_query e $final_query com as informações da tabela desejada e a variável $maximo, com o número máximo de registros por página. Após definir a principais variáveis devemos nos preocupar com o conteúdo que será exibido.
Espero que esse artigo tenha sido claro e útil para você.
Até o próximo artigo,
Abraços.
Referência:
http://www.revistaphp.com.br/artigo.php?id=61