
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.
$sql = "SELECT count(id) FROM produto ";
$result = $con->query($sql);
$return = $result->fetch_row();
$rec_count = $return[0]; 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
}
} 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
}
?>
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
}
?>
Negar /.env no nginx parece resolvido até alguém pedir /wp-content/uploads/.env ou backup.sql. As regras que testei e os furos que…
O Search Console marca suas páginas 2, 3 e 4 como alternativas da página 1? Ajuste a tag canônica do…
Um módulo de terceiro plantou um banner no topo da loja e você não quer desinstalar nada: tire o bloco…
Importou o banco de produção e o site pula para o domínio antigo? Rode o UPDATE em core_config_data, limpe o…
Seu catch trata pedido inexistente e banco fora do ar do mesmo jeito. Veja como criar exceção customizada em PHP…
O form do admin salva mas abre em branco na edição: veja o getData() indexado pelo id da entidade e…