PHP
Paginação de resultados com PHP, PDO e MySql
Neste artigo veremos um exemplo de paginação em PHP, PDO e MySql, utlizando como resultado uma tabela de cidades do IBGE 7 digitos, com códigos válidos para gerar NFe e sua respectiva UF.
O que é paginação de resultados?
Paginação de resultado é algo bem simples, onde fazemos uma busca em determinada tabela do Banco de Dados, e com o resultado da busca, dividimos o número de registros (total), por um número especifico (limite) para exibir por página.
Utilizamos este procedimento quando não queremos deixar nossa página muito grande, limitando a um determinado tamanho e adicionando botões de navegação no final do conteúdo.
Por exemplo, um total de 200 registros, e nós queremos exibir 20 por página, logo teremos 200/20 = 10 páginas. Chega de blá blá blá e vamos lá para o código então.
Primeiramente criamos um arquivo para fazer a conexão ao MySQL, dê o nome de "Conexao.class.php":
<?php class Conexao { private $data = array(); //variavel da classe Base protected $pdo = null; public function __set($name, $value){ $this->data[$name] = $value; } public function __get($name){ if (array_key_exists($name, $this->data)) { return $this->data[$name]; } $trace = debug_backtrace(); trigger_error( 'Undefined property via __get(): ' . $name . ' in ' . $trace[0]['file'] . ' on line ' . $trace[0]['line'], E_USER_NOTICE); return null; } //método que retorna a variável $pdo public function getPdo() { return $this->pdo; } //método construtor da classe function __construct($pdo = null) { $this->pdo = $pdo; if ($this->pdo == null) $this->conectar(); } //método que conecta com o banco de dados public function conectar() { $local = "localhost"; $user = "root"; $pass = ""; $basename = "sua-base-de-dados"; try { $this->pdo = new PDO("mysql:host=$local;dbname=$basename", "$user", "$pass", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } } //método que desconecta public function desconectar() { $this->pdo = null; } } ?>
Em seguida criamos o arquivo principal que será mostrado os dados da tabela 'cidades'. Dê um nome de sua preferência, não esquecendo que a extensão é (.php) e adicione o arquivo criado acima:
<?php //inclui as bibliotecas require_once('Conexao.class.php'); //faz a conexão com o BD $pdo = new Conexao(); ?>
Especificamos o número de registros que serão mostrados por página. Depois pegamos o valor da página atual, subtraimos 1, para que o array comece do zero (0) e multiplicamos a quantidade de registros da página, pelo valor da página atual.
<?php //determina o numero de registros que serão mostrados na tela $maximo = 20; //armazenamos o valor da pagina atual $pagina = isset($_GET['pagina']) ? ($_GET['pagina']) : '1'; //subtraimos 1, porque os registros sempre começam do 0 (zero), como num array $inicio = $pagina - 1; //multiplicamos a quantidade de registros da pagina pelo valor da pagina atual $inicio = $maximo * $inicio; ?>
Fazemos um SELECT usando COUNT na tabela que iremos utilizar para saber quantos registros ela possui e criamos uma variável para armazenar o resultado:
<?php $strCount = $pdo->select("SELECT COUNT(*) AS 'total_municip' FROM municipios_ibge"); $total = 0; if(count($strCount)){ foreach ($strCount as $row) { //armazeno o total de registros da tabela para fazer a paginação $total = $row["total_municip"]; } } ?>
Agora faremos um SELECT no BD, já com o intervalo de INICIO e LIMIT e guardamos o resultado na variavel pra exibir os dados na pagina:
<?php $resultado = $pdo->select("SELECT * FROM municipios_ibge ORDER BY municipio LIMIT $inicio,$maximo"); ?>
Até este momento já definimos quantos registros serão mostrados por página, fazendo uma listagem no BD e armazenando numa variável. Agora com o resultado em mãos, podemos começar a mostrar os dados na tela, utilizando o conteúdo da var $resultado, dessa forma:
<!DOCTYPE HTML> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width" /> <title>Paginação com PHP</title> <link rel="stylesheet" type="text/css" href="css/estilo.css" /> <link rel="stylesheet" type="text/css" href="css/reset.css" /> </head> <body> <table class="tabela1"> <colgroup> <col class="coluna1"/> <col class="coluna2"/> <col class="coluna3"/> </colgroup> <caption>Paginação com PHP</caption> <thead> <tr> <th>Codigo</th> <th>Municipio</th> <th>UF</th> </tr> </thead> <tbody> <?php //se a tabela nao estiver vazia, percorremos linha por linha pegando os valores if(count($resultado)){ foreach ($resultado as $res) { echo "<tr>"; echo " <td>".$res['codigo']."</td>"; echo " <td>".$res['municipio']."</td>"; echo " <td>".$res['uf']."</td>"; echo "</tr>"; } } ?> </tbody> </table>
Depois de preencher a tabela com os valores, criamos os botoes de paginação dentro de uma DIV para termos controle de posição, cor, etc...
<div id="alignpaginacao"> <?php //determina de quantos em quantos links serão adicionados e removidos $max_links = 6; //dados para os botões $previous = $pagina - 1; $next = $pagina + 1; //usa uma funcção "ceil" para arrendondar o numero pra cima, ex 1,01 será 2 $pgs = ceil($total / $maximo); //se a tabela não for vazia, adiciona os botões if($pgs > 1 ){ echo "<br/>"; //botao anterior if($previous > 0){ echo "<div id='botaoanterior'><a href=".$_SERVER['PHP_SELF']."?pagina=$previous><input type='submit' name='bt-enviar' id='bt-enviar' value='Anterior' class='button' /></a></div>"; } else{ echo "<div id='botaoanteriorDis'><a href=".$_SERVER['PHP_SELF']."?pagina=$previous><input type='submit' name='bt-enviar' id='bt-enviar' value='Anterior' class='button' disabled='disabled'/></a></div>"; } echo "<div id='numpaginacao'>"; for($i=$pagina-$max_links; $i <= $pgs-1; $i++) { if ($i <= 0){ //enquanto for negativo, não faz nada }else{ //senão adiciona os links para outra pagina if($i != $pagina){ if($i == $pgs){ //se for o final da pagina, coloca tres pontinhos echo "<a href=".$_SERVER['PHP_SELF']."?pagina=".($i).">$i</a> ..."; }else{ echo "<a href=".$_SERVER['PHP_SELF']."?pagina=".($i).">$i</a>"; } } else{ if($i == $pgs){ //se for o final da pagina, coloca tres pontinhos echo "<span class='current'> ".$i."</span> ..."; }else{ echo "<span class='current'> ".$i."</span>"; } } } } echo "</div>"; //botao proximo if($next <= $pgs){ echo " <div id='botaoprox'><a href=".$_SERVER['PHP_SELF']."?pagina=$next><input type='submit' name='bt-enviar' id='bt-enviar' value='Proxima' class='button'/></a></div>"; }else{ echo " <div id='botaoproxDis'><a href=".$_SERVER['PHP_SELF']."?pagina=$next><input type='submit' name='bt-enviar' id='bt-enviar' value='Proxima' class='button' disabled='disabled'/></a></div>"; } } ?> </div>
E por fim, fechamos o corpo do HTML:
</body> </html>
Com isso nossa páginação está pronta, claro que podendo ser melhorada e ficando a critério de cada um como formatar a aparência, que não é o objetivo deste artigo.
Se desejar, pode baixar o arquivo completo aqui
Até a próxima e bons estudos!
Gigasystems Login:
Informe seu e-mail abaixo para continuar!
XVeja Também:
Artigos Relacionados a categoria: PHP
Cotações para compra e venda de Moedas estrangeiras com PHP
27 July de 2016
Gerenciador de dependências Composer
14 January de 2016
Erro ao acessar um arquivo externo com o comando file_get_content
04 November de 2015
Baixando anexo do email no servidor com IMAP e PHP
27 August de 2015
Olá, deixe seu comentário para Paginação de resultados com PHP, PDO e MySql
marcelo eduardo
Gostaria de um codigo de busca dos dados neste banco de dados para estudos, seria possivel.
Pedro Alencar
irisMR SILVA
Contato Astefree
Edson
Claudemir Lopes
Claudemir Lopes
Marcos Martins
att Gigasystems
Everton J Paula