Artigos > Desenvolvimento de Sites > Paginação em PHP
Alex Coletta

Paginação em PHP

1. Crie um arquivo chamado “paginacao.php” ou com outro nome e insira o seguinte conteúdo:

<?
       $quant_pg = ceil($quantreg/$numreg);
       $quant_pg++;

?>

<div style="padding: 10px;" align="right">
<?
        // Verifica se esta na primeira página, se nao estiver
        // ele libera o link para anterior
        if ( $pg > 0)
        {
              echo "<a href='#' onclick='f_envia(".($pg-1).")'><b>&laquo; anterior</b></a>";
        } 

        else
       {
             echo "<font color=#CCCCCC>&laquo; anterior</font>&nbsp;";
        }

       if (($pg - 3) < 1 )
      {
           $ant = 1;
      }
      else
      {
          $ant = $pg - 3;
      }
     if (($pg + 6) > $quant_pg )
     {
            $pos = $quant_pg;
     }
     else
     {
            $pos = $pg + 6;
     }

    // Faz aparecer os numeros das página entre o
    // ANTERIOR e PROXIMO
    for($i_pg=$ant;$i_pg < $pos;$i_pg++)
   {
   // Verifica se a página que o navegante esta e retira o link
   //do número para identificar visualmente
   if ($pg == ($i_pg-1))
   {
        echo "&nbsp;<span>[$i_pg]</span>&nbsp;";
   }
   else
   {
        $i_pg2 = $i_pg-1;
        echo "&nbsp;&nbsp;<a href='#' onclick='f_envia($i_pg2)'><b>$i_pg</b></a>&nbsp;";
    }
}

     // Verifica se esta na ultima página, se nao estiver ele libera o link para próxima
     if (($pg+2) < $quant_pg)
    {
         echo "&nbsp;<a href='#' onclick='f_envia(".($pg+1).")'><b>pr&oacute;ximo &raquo;</b></a>";
    }
    else
    {
         echo "<font color=#CCCCCC>pr&oacute;ximo &raquo;</font>";
     }
?>

</div>

2. Salve este arquivo e crie o arquivo que exibirá o conteúdo da consulta paginada. Neste arquivo, inclua antes de tudo o seguinte código:

<?
// Incluir os comandos de conexão em banco de acordo com o banco que utiliza

// Incluir a consulta do banco de acordo com a sintaxe da linguagem utilizada
// No exemplo abaixo, a consulta está em Firebird

$tabela = ibase_query( $dbga, "select first ".$numreg." skip ".$inicial." * from TABELA" ) or die('Erro abrindo tabela');

// Segundo select para contar todos os registros
$sql_conta=ibase_query( $dbga, "SELECT *
FROM   TABELA") or die( 'Erro abrindo tabela' );

$j = 0;
while (ibase_fetch_row($sql_conta))
$j++;

$quantreg = $j; // Quantidade de registros pra paginação

if ((!isset($pg))||($_POST["pg"]==''))
$pg = 0;
else
$pg=$_POST["pg"];

$numreg = 30; // Quantos registros por página vai ser mostrado

$inicial = $pg * $numreg;

?>

3. Depois da tag <title>, antes de fechar a tag </head>, o seguinte script:

<script type="text/javascript">

function f_envia(nrPagina)
{
window.document.frmBusca.pg.value=nrPagina;
window.document.frmBusca.submit();
}
</script>
<style type="text/css">
<!--
.pgoff {font-family: Verdana, Arial, Helvetica; font-size: 11px; color: #FF0000; text-decoration: none}
a.pg {font-family: Verdana, Arial, Helvetica; font-size: 11px; color: #003366; text-decoration: none}
a:hover.pg {font-family: Verdana, Arial, Helvetica; font-size: 11px; color: #0066cc; text-decoration:underline}
-->
</style>

4. Inclua um formulário conforme a tag abaixo:

<form name="frmBusca" id="frmBusca" method="post" action="index.php">

5. Para exibir a barra com os números das próximas páginas, inclua o código abaixo (note que você poderá colocar este código no cabeçalho e no rodapé da página).

<?
if ($j > 30)
include("include/paginacao.php"); // Chama o arquivo que monta a paginação. ex: << anterior 1 2 3 4 5 próximo >>
?>

6. Aqui vai o código que utilizará a consulta feita no banco.

.
.
.

7. Coloque um input hidden e feche a tag form. Pronto!

<input type="hidden" name="pg" id="pg" value="" />

</form>