por Dhion C. Hedlund

Dividir resultados de query no PHP

novembro 26, 2011 Postado por Dhion C. Hedlund 1 comentário

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&ccedil;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'>&nbsp;<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&atilde;o Exibir
echo " <td class='tbl_td'><a href='exibircliente.php?view=".$id."'>Exibir</a>&nbsp;&nbsp;&nbsp;".$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 ""&lt;&lt;&lt;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'>&lt;&lt;&lt;Primeira p&aacute;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&aacute;gina&gt;&gt;&gt;";} else {
// Exibe o link "última página"
echo "<a href='controleclientes.php?p=".$pags."' target='_self'>Última p&aacute;gina&gt;&gt;&gt;</a> ";
};
?>


Qualquer dúvida, comente logo abaixo.
O objetivo deste blog é meramente informativo. Tecnologia do Blogger.