Recentemente precisei ver um jeito para dividir os resultados retornados do MySql, como eram muitos, procurei um modo de paginação.
Encontrei algo na internet por Rafael Costa, adaptei o código pra's minhas necessidades e resolvi compartilhar aqui. ;)
<?php
//Define a variável recebida (p=página. via URL, exemplo: home.php?p=1)
$p = $_GET["p"];
// Verifica se a variável tá declarada, senão deixa
//na primeira página como padrão.
if(!isset($p)) $p = 1;
// Define aqui a quantidade máxima de registros por página.
$qnt = 10;
// A função 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 cliente, email, telefone, endereco, id, ativo FROM tbl_clientes LIMIT $inicio, $qnt";
// Executa o Query
$sql_query = mysql_query($sql_select);
// 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 cliente, email, telefone, endereco, id, ativo FROM tbl_clientes";
// Executa o query da seleção acima
$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á preciso. 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 = 5;
// Exibe registro inicial
$reg_inicial = ($inicio+1);
//Exibe registro final
$reg_final = ($reg_inicial + 9);
if ($reg_final > $total_registros){
$reg_final = $total_registros;
}else{
$reg_final = ($reg_inicial + 9);};
?>
//Inicia tabela de exibição de registros
<table width="100%" border="0px">
<tr>
<td class="h5">Exibindo registros<?php echo $reg_inicial." - ".$reg_final; ?></td>
</tr>
</table>
//Inicia tabela de cabeçalho dos dados do cliente
<table cellspacing="1" cellspadding="0" border="0" style="margin-left:2px;">
<tbody>
<thead class="S_thead">
<tr class="tbl_tr">
<th class="tbl_td">Nome do cliente: </th>
<th class="tbl_td">E-mail: </th>
<th class="tbl_td">Telefone: </th>
<th class="tbl_td">Endereço: </th>
<th class='tbl_td'></th>
</tr>
</thead>
</tbody>
</table>
<?php
// Cria um while para pegar as informações do BD
while($array = mysql_fetch_array($sql_query)) {
// Variável para capturar os campos no banco de dados
$cliente = $array["cliente"];
$email = $array["email"];
$telefone = $array["telefone"];
$id = $array["id"];
$endereco = $array["endereco"];
$ativo = $array["ativo"];
//Encurtar variáveis longas para aparecer na td da tabela
if (strlen($email)>15)
$email = substr($email, 0, 15)."...";
if (strlen($cliente)>15)
$cliente = substr($cliente, 0, 15)."...";
if (strlen($endereco)>15)
$endereco = substr($endereco, 0, 15)."...";
//Define a cor da linha e o ícone se inativo
if($ativo == 0){
$backg_inativo = "#FFBFCB"; $alerta = "<img src='images/warningicon.png'> <span style='color:red;font-weight:bold;'>Inativo</span>";
}else{$backg_inativo = "white"; $alerta = "";};
//Aqui começa o formulário de exibição dos clientes
echo " <table cellspacing='1' cellspadding='0'>";
echo " <tbody>";
echo " <tr class='tbl_tr' bgcolor='".$backg_inativo."'>";
echo " <td class='tbl_td'>$cliente</td>";
echo " <td class='tbl_td'>$email</td>";
echo " <td class='tbl_td'>$telefone</td>";
echo " <td class='tbl_td'>$endereco</td>";
//Botão Exibir
echo " <td class='tbl_td'><a href='exibircliente.php?view=".$id."'>Exibir</a> ".$alerta."</td>";
echo " </tr>";
echo " </tbody>";
echo " </table>";
}
// Depois que selecionou todos os campos, pula uma
//linha para exibir os links(próxima, última...)
echo "<br />";
//Se a página for =1 o link fica desativado
if ($p == 1){
echo ""<<<Primeira página";} else {
// Exibe o primeiro link "primeira página", que não
//entra na contagem acima($max_links=5)
echo "<a href='controleclientes.php?p=1' target='_self'><<<Primeira página</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='controleclientes.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='controleclientes.php?p=".$i."' target='_self'>".$i."</a> "; } }
//Se a página for igual a $pags o link fica desativado
if ($p == $pags){
echo "Última página>>>";} else {
// Exibe o link "última página"
echo "<a href='controleclientes.php?p=".$pags."' target='_self'>Última página>>></a> ";
};
?>
Qualquer dúvida, comente logo abaixo.