Pular para o conteúdo principal

Dividir resultados de query no PHP


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.

Comentários

  1. Deixa eu perguntar.. vamos supor que essa query vai gerar 10 paginas.... eu consigo fazer a impressão disso de uma só vez?
    Por exemplo, eu preciso criar boletos em massa... pensei em adaptar o seu codigo para isso, porém, preciso imprimir tudo isso de uma só vez.... Tem algum ideia? Gerar PDF não dá... já tentei fazer de tudo para gerar pdf com codigo de barras e naum funfou.... Pode me ajudar?

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Lista de 170 dos principais e mais notáveis Softwares Livres para Web

Ser gratuito não significa que não sejam poderosos. Muitos desses softwares têm funções superiores às encontradas em seus concorrentes pagos.

Muitos programadores contribuem para a construção de um Software Livre, compartilhando gratuitamente seu trabalho e, pedindo um auxílio às pessoas dispostas a ajudar. É isso que sustenta o movimento do Software Livre.

Também, se dedicam inteiramente à criar design diferenciado desses softwares de código aberto, sob demanda de empresas, pessoas e instituições que agora se tornam seus clientes. Outros, criam módulos e componentes à esses softwares, com funções específicas de determinado tipo de atividade de um empresa ou instituição, cobrando então pelo seu trabalho, que agora depende da aplicação principal que ele ajudou a desenvolver.

Esse idealismo pode criar ótimos programas. O Firefox é um dos melhores exemplos. Mas há muitos programas de código livre além dele. Conheça agora, 170 dos principais e mais notáveis Softwares Livres, construídos …

Conheça o Alfresco - Software Livre para Gestão Documental

Alfresco, é um sistema de Gestão de Documentos físicos/digitais empresarial (em inglês ECM "Enterprise Content Management") multi plataforma (Windows e Unix/Linux) de Código Aberto, desenvolvido em Java.
Muitas empresas utilizam para gestão de seus documentos, gestão de conteúdo Web e de colaboração (e-groupware). O Alfresco não é a única plataforma de ECM open source, mas para a gestão de documentos, colaboração e repositório documental, é um dois mais utilizados no mercado atualmente, implementando alta usabilidade e um modelo open source a 100%.

Atualização do ICA-AtoM - versão 1.2 para 1.3

Vídeo gravado no celular. Apresenta o procedimento realizado ao atualizar a versão 1.2 para 1.3 do software ICA-AtoM. (localhost) Ubuntu + MySql Administrator


Planejamento deve levar em conta a Gestão Documental

Escrito por Dgard Pinheiro (*)

Se o planejamento é a ciência de colocar no papel – hoje, na verdade, em sistemas computacionais – e de gerenciar todas as etapas do negócio, incluindo seus objetivos e os meios para que eles sejam atingidos, então, as empresas devem levar em conta a Gestão Documental como parte vital para o sucesso de um empreendimento. Isto porque os negócios envolvem o recebimento, envio e manuseio de uma quantidade enorme de documentos de várias origens, desde o tradicional papel, até os arquivos digitais – tais como as notas fiscais eletrônicas, fax, e-mail, documentos pessoais e formulários (estes, muito utilizados na coleta de informações em várias áreas: cadastros, escolas, pesquisas de mercado e de opinião etc).
Pode parecer que o planejamento envolve apenas a estratégia de negócios, a definição do plano de ação, a definição de produtos e serviços, preços, distribuição, marketing e divulgação. No entanto, ele vai além e deve incluir os processos de como a companhi…

Conheça o NUXEO - Software Livre para Gestão Documental

Atualizado em 16/09/2013.


          O Nuxeo é uma poderosa ferramenta de ECM (Enterprise Content Management - gestão de conteúdo empresarial) open source (código aberto), desenvolvido pela empresa francesa de mesmo nome. Nuxeo atualmente é utilizado por centenas de empresas ao redor do mundo e órgãos públicos, de médio e grande porte. No site do software é possível ver a lista de alguns usuários da ferramenta.           Nuxeo tem uma arquitetura ágil e flexível de última geração, utilizando o melhor do Java. Permite gerenciar os documentos de forma cômoda, realizando versões dos documentos, fluxos de trabalho associados aos documentos, publicação remota, busca avançada, integração com Microsoft Office e Open Office, etc.           Existe a versão open source do NUXEO, que é totalmente gratuita, e a versão "Nuxeo Studio". Esta última é um serviço diferenciado, onde há suporte 24hs por eles, manutenção do sistema, serviço de Cloud Computing (nuvem) etc. Neste caso é preciso p…

Botão para abrir formulário no LibreOffice-Base - Macros

Se você está começando a trabalhar com o Libre Office Base e não entende muito de programação, provavelmente já se deparou com a situação de não conseguir abrir um formulário a partir de um botão de pressão criado em outro formulário. Parecerá mais difícil ainda se você estiver acostumado a utilizar os assistentes do Microsoft Access.

No Libre Office Base é preciso criar uma macro para abrir um formulário a partir de um botão criado no modo desenho do formulário. Depois de criada a macro, é necessário chamar a função no evento "Ao aprovar ação" do botão.

Com o Libre Office Base aberto, vá em "Ferramentas >> Macros >> Organizar Macros >> Libre Office Basic". Na janela que aparecer, selecione "Minhas Macros >> Standards >> Module 1". Haverá um botão no menu lateral direito chamado "Editar". Clique para editar este módulo e insira a seguinte macro:

Eletrônico ou digital?

Diferença entre documento eletrônico e documento digital

Segundo a Câmara Técnica de Documentos Eletrônicos (CTDE) do Conselho Nacional de Arquivos (CONARQ):
“Na literatura arquivística internacional, ainda é corrente o uso do termo “documento eletrônico” como sinônimo de “documento digital”. Entretanto, do ponto de vista tecnológico, existe uma diferença entre os termos “eletrônico” e “digital. Um documento eletrônico é acessível e interpretável por meio de um equipamento eletrônico (aparelho de videocassete, filmadora, computador), podendo ser registrado e codificado em forma analógica ou em dígitos binários. Já um documento digital é um documento eletrônico caracterizado pela codificação em dígitos binários e acessado por meio de sistema computacional. Assim, todo documento digital é eletrônico, mas nem todo documento eletrônico é digital. Exemplos: 1) documento eletrônico: filme em VHS, música em fita cassete. 2) documento digital: texto em PDF, planilha de cálculo em Microsoft  Ex…