PHP Básico

Como fazer uma paginação no PHP e Mysql

Como montar uma paginação no  PHP e Mysql, paginando os resultados de uma consulta realizada no banco de dados Mysql utilizando um script de paginação simples, incluso no Post.

O exemplo a seguir poder ser utilizado em consultas realizados em outros bancos (ex: postgresql), basta você substituir as funções relacionadas ao Mysql pela às utilizadas no banco o qual você está utilizando.

Crie um arquivo “produto.php” com o seguinte código.

1º parte – consultando a quantidade total de registros na tabela.

$sql = "SELECT count(id) FROM produto ";

$result = $con->query($sql);
   
$return = $result->fetch_row();   
    
$rec_count = $return[0];

2º parte – consultando os registro e exibindo a listagem

Repare que iremos utilizar a variável GET “página” para controlarmos a exibição das páginas.

Ex: dominio.com.br?pagina=2

if( isset($_GET{'pagina'} ) ) {
 $page = $_GET{'pagina'} - 1;
 $offset = $rec_limit * $page ;
 }else {
 $page = 0;
 $offset = 0;
 }

 
$sql = "SELECT * FROM produto  $busca LIMIT $offset, $rec_limit";

$result = $con->query($sql);

if ($result->num_rows > 0) {

 while($row = $result->fetch_assoc()) {
 
?>

<div class="produto">  
 <p><?php echo $row['nome'] ?></p>
 <p><?php echo $row['preco'] ?></p>
</div>

<?php
 }
 }

3º – exibindo a paginação

Além de montar a lista com as páginas/links, exibimos também a quantidade de registros e a página atual.

<p>Qtd. total de registros: <?php echo $rec_count  ?></p><br/>

<p>Pagina atual: <?php echo  isset($_GET['pagina']) ? $_GET['pagina'] : "1"  ?></p><br/>

<p>Paginas: </p>   
<?php 

 $qtd_paginas = (int) ($rec_count /   $rec_limit) ;
    
 $qtd_paginas  = ( ($qtd_paginas %   $rec_limit ) > 0 ) ? $qtd_paginas  + 1 : $qtd_paginas;
  
 for($i = 1; $i <= $qtd_paginas; $i++ ){
 ?>     
 <a href="produto.php?pagina=<?php echo $i ?>"><?php echo $i ?></a>
 <?php
   
 }

?>

Conclusão da paginação no PHP e Mysql

No exemplo foi utilizado a tabela “produtos” com as colunas “id, nome e preço”, altere de acordo com a sua necessidade.

É importante que você faça a revisão do código, buscando realizar otimizações e adequações de acordo com o seu sistema e versão do PHP utilizada.

Script completo:

<?php

$sql = "SELECT count(id) FROM produto ";

$result = $con->query($sql);
   
$return = $result->fetch_row();   
    
$rec_count = $return[0];

if( isset($_GET{'pagina'} ) ) {
 $page = $_GET{'pagina'} - 1;
 $offset = $rec_limit * $page ;
}else {
 $page = 0;
 $offset = 0;
}

 
$sql = "SELECT * FROM produto  $busca LIMIT $offset, $rec_limit";

$result = $con->query($sql);

if ($result->num_rows > 0) {

 while($row = $result->fetch_assoc()) {
 
?>

<div class="produto">  
 <p><?php echo $row['nome'] ?></p>
 <p><?php echo $row['preco'] ?></p>
</div>

<?php
 }
 } 
 ?>
 
 <p>Qtd. total de registros: <?php echo $rec_count  ?></p><br/>

<p>Pagina atual: <?php echo  isset($_GET['pagina']) ? $_GET['pagina'] : "1"  ?></p><br/>

<p>Paginas: </p>   
<?php 

 $qtd_paginas = (int) ($rec_count /   $rec_limit) ;
    
 $qtd_paginas  = ( ($qtd_paginas %   $rec_limit ) > 0 ) ? $qtd_paginas  + 1 : $qtd_paginas;  
  
 for($i = 1; $i <= $qtd_paginas; $i++ ){
 ?>     
   <a href="produto.php?pagina=<?php echo $i ?>"><?php echo $i ?></a>
 <?php
   
 }

?>

 

 

 

Post Recentes

Cron do Magento 2 não roda: status missed e pending no cron_schedule

Pedido que não fatura e e-mail que não sai porque todo job fica missed: como ler a cron_schedule, conferir o…

12 horas atrás

Gerar slug de URL em PHP: acento, espaço e símbolo fora do endereço

Uma função curta em PHP 8.3 que transforma Camiseta Preta Tamanho GG em camiseta-preta-tamanho-gg, sem depender do locale do servidor.

1 dia atrás

Log de consentimento LGPD: a tabela MySQL que guarda a prova do aceite

O banner registra o clique só no navegador e some. Veja a tabela MySQL e o endpoint que gravam a…

2 dias atrás

Comando CLI Magento 2: criar a classe e registrar no di.xml

A classe do comando existe e o bin/magento list ignora ela. Falta o registro no di.xml: aqui vai a classe…

3 dias atrás

Traduzir o pt_BR.csv do Magento 2 em lote sem perder a coluna de origem

Como traduzir duas mil linhas do pt_BR.csv do Magento 2 lendo com fgetcsv e regravando com fputcsv, sem encostar na…

3 dias atrás

Variação não está disponível no WooCommerce: limpar transients e lookup

Produto variável respondendo "Desculpe, este produto não está disponível" mesmo com a variação ativa: limpe os transients do WooCommerce e…

4 dias atrás