PHP: Script para paginação

O script é baseado neste link, escrito por “wolfphw”.

Porém, este script apresenta alguns problemas relatados neste outro link.

veja o que acontece:
<< Anterior 1 2 3 4 Próxima >>
— quando clica no número 1, o valor de $pg é igual a 0, em 2 $pg = 1 e assim sucessivamente.

Qual a proposta deste post?
Compartilhar um código funcional, resolvendo o problema da numeração e com mais alguns ajustes.

A idéia é a mesma, vamos ter 2 arquivos, pagina.php e paginacao.php.

pagina.php

<?php
$numreg = 10; // Quantos registros por página vai ser mostrado
 
$pg = isset($_GET["pg"]) ? $_GET["pg"] : 1;
$inicial = ($pg * $numreg) - $numreg;
 
// Serve para contar quantos registros você tem na sua tabela para fazer a paginação
$totalProdutos = mysql_query("SELECT * FROM produtos");
$countTotal = count($totalProdutos);
 
// Faz o Select pegando o registro inicial até a quantidade de registros para página
$sql = mysql_query("SELECT * FROM produtos LIMIT $inicial, $numreg");
 
while ($rows = mysql_fetch_array($sql)) {
   /* aqui entra o código para exibir os produtos */
}       
 
echo "<br><br>"; // quebra de linha entre a paginação e o conteúdo
 
// aqui uma pequena mudança no código do wolfphw
// a paginação só exibida quando o total de produtos for maior
// que a quantidade de registros por página
if ( $countTotal > $numreg ){
   include("paginacao.php"); // chamada do arquivo. ex: << Anterior 1 2 3 4 5 Próxima >>
}
?>

paginacao.php

<?php
$quant_pg = ceil($countTotal/$numreg);
$quant_pg++;
//$url_ant = "http://www.site.com.br/produtos/";
$url_ant = $_SERVER['HTTP_REFERER'];
 
// anterior  
if ( $pg > 1) {
   echo "<a href=".$url_ant.($pg-1) ."><span class='style2'>Anterior</span></a>&nbsp;";
} else {
   echo "<span class='style2'>Anterior</span>&nbsp;";
}
// Faz controle das páginas que irá mostrar na paginação	
if(($pg - 4) < 1) {
   $anterior = 1;
} else {
   $anterior = $pg - 4;
}
if(($pg + 6) > $quant_pg) {
   $proximo = $quant_pg;
} else {
   $proximo = $pg + 6;
}
// Crio os números das páginas entre Anterior e Próximo	
for($i_pg = $anterior; $i_pg < $proximo; $i_pg++) {
   if ($pg == ($i_pg)) {
	echo "<span class='style3'>$i_pg</span>";
   } else {
       $i_pg2 = $i_pg;
       echo "&nbsp;<a href={$url_ant}{$i_pg2}><span class='style2'>$i_pg</span></a>&nbsp;";
   }
}
// proximo
if (( $pg + 1 ) < $quant_pg) {
   echo "<a href=".$url_ant.($pg+1)."><span class='style2'>&nbsp;Pr&oacute;xima</span></a>";
} else {
   echo "<span class='style2'>&nbsp;Pr&oacute;xima</span>";
}
?>

5 comentários em “PHP: Script para paginação

  • 20 de novembro de 2011 em 10:58
    Permalink

    Nossa, este site é bruto demais ! Muita coisa básica mas extremamente necessária para o desenvolvimento, ainda mais de pessoas que assim como eu não sacam muito bem de PHP, é uma mão na roda, parabéns pelo trabalho, descobri o site ontem por outro site e ja ta no meu favoritos ! Acessarei sempre pra conferir. Dica: Algum artigo sobre criptografia de senha, como inserir criptografada no banco e como utilizar, tenho tido dificuldade em encontrar uma boa explicação hehe. Abraço

    Resposta
    • 20 de novembro de 2011 em 21:20
      Permalink

      Olá Fábio,

      obrigado pelo comentário. O linhadecomando.com é simples, prático e direto ao ponto.

      Quanto a sua solicitação, vamos pensar a respeito e em breve postaremos algo.

      Abraços e continue conosco.

      Resposta
  • 9 de março de 2016 em 11:30
    Permalink

    Olá, o site é bem explicado.. mais encontro uma situação diferente.

    Eu criei um site aonde eu quero fazer a paginação só na parte de orçamento.

    Aonde eu primeiro quero só os dados das pessoas, como email, nome e telefone.

    passará a página e começarei as perguntas, quero criar no máximo 5 páginas, por mais que eu tenha salvado a página em php, meu form está em html. Dentro da form criei o ACTION” CADASTRAR.PHP, aonde irei jogar a paginação, já tentei de tudo que é forma e não consigo.

    Resposta

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *