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