PHP: Script para paginação

    Obrigado! você é a 1.191ª pessoa que visita este post.

    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>";
    }
    ?>

    Related posts:

    1. PHP: Dando um Refresh na página
    2. JavaScript: Carregando uma página em uma nova janela
    3. Dicas de Site: Locaweb x UolHost – Formulário para envio de email
    4. A dificuldade de escrever um post devido a falta de tempo
    5. PHP-MySQL: Inserindo aspas simples, aspa dupla no banco de dados