Desenvolvimento - PHP

PHP e MySQL: sistema de paginação

Aprenderemos neste tutorial como criar um sistema de paginação utilizando PHP e MySQL com rápida implementação em qualquer sistema.

por Rafael Costa



A principal característica desse sistema é a facilidade de implementação em sua página.
Você precisa apenas definir as variáveis de quantidade de registros por página e o número de botões que serão exibidos para a paginação. Por exemplo: Caso defina este número em 3, será exibido 3 links antes e 3 links depois da página atual.
Se você estiver na página 5, será exibido assim:

primeira página 2 3 4 5 6 7 8 última página

O número 5, que é a página atual, não terá link. Todos os outros terão links para as respectivas páginas.

Para visualizar o código em funcionamento, visite este link: http://www.rafaelcosta.com/Tutoriais/paginacao_html.php
Neste link, eu personalizei o css, mas a dinâmica da página é a mesma.

Abaixo segue o código todo comentado:
<?php
// Selecionar servidor
$conectar = mysql_connect("servidor", "usuario", "senha") or die ("Erro ao logar no BD");
// Selecionar BD
mysql_select_db("bancodedados", $conectar);
// Pegar a página atual por GET
$p = $_GET["p"];
// Verifica se a variável tá declarada, senão deixa na primeira página como padrão
if(isset($p)) {
$p = $p;
} else {
$p = 1;
}
// Defina aqui a quantidade máxima de registros por página.
$qnt = 5;
// O sistema calcula o início da seleção calculando: 
// (página atual * quantidade por página) - quantidade por página
$inicio = ($p*$qnt) - $qnt;
// Seleciona no banco de dados com o LIMIT indicado pelos números acima
$sql_select = "SELECT * FROM tabela LIMIT $inicio, $qnt";
// Executa o Query
$sql_query = mysql_query($sql_select);

// Cria um while para pegar as informações do BD
while($array = mysql_fetch_array($sql_query)) {
// Variável para capturar o campo "nome" no banco de dados
$nome = $array["nome"];
// Exibe o nome que está no BD e pula uma linha
echo $nome." <br /> ";
}

// Depois que selecionou todos os nome, pula uma linha para exibir os links(próxima, última...)
echo "<br />";

// Faz uma nova seleção no banco de dados, desta vez sem LIMIT, 
// para pegarmos o número total de registros
$sql_select_all = "SELECT * FROM tabela";
// Executa o query da seleção acimas
$sql_query_all = mysql_query($sql_select_all);
// Gera uma variável com o número total de registros no banco de dados
$total_registros = mysql_num_rows($sql_query_all);
// Gera outra variável, desta vez com o número de páginas que será precisa. 
// O comando ceil() arredonda "para cima" o valor
$pags = ceil($total_registros/$qnt);
// Número máximos de botões de paginação
$max_links = 3;
// Exibe o primeiro link "primeira página", que não entra na contagem acima(3)
echo "<a href="paginacao.php?p=1" target="_self">primeira pagina</a> ";
// Cria um for() para exibir os 3 links antes da página atual
for($i = $p-$max_links; $i <= $p-1; $i++) {
// Se o número da página for menor ou igual a zero, não faz nada
// (afinal, não existe página 0, -1, -2..)
if($i <=0) {
//faz nada
// Se estiver tudo OK, cria o link para outra página
} else {
echo "<a href="paginacao.php?p=".$i."" target="_self">".$i."</a> ";
}
}
// Exibe a página atual, sem link, apenas o número
echo $p." ";
// Cria outro for(), desta vez para exibir 3 links após a página atual
for($i = $p+1; $i <= $p+$max_links; $i++) {
// Verifica se a página atual é maior do que a última página. Se for, não faz nada.
if($i > $pags)
{
//faz nada
}
// Se tiver tudo Ok gera os links.
else
{
echo "<a href="paginacao.php?p=".$i."" target="_self">".$i."</a> ";
}
}
// Exibe o link "última página"
echo "<a href="paginacao.php?p=".$pags."" target="_self">ultima pagina</a> ";
?>
Espero que tenham gostado.

Abraços a todos!
Rafael Costa

Rafael Costa - Programador Actionscript há 2 anos. Participante do fórum FlashMasters, maior comunidade Flash do Brasil.
Além de Actionscript, possui conhecimentos em outras linguagens como: JavaScript, CSS, XHTML, PHP e MySQL.
Para saber mais sobre o autor, visite seu site:
http://www.rafaelcosta.com.