|
Terça, 12 de Novembro de 2024 |
|
|
|
Consulta Paginada em PHP/MySQL
Aqui temos uma breve descrição de uma solução em PHP para uma consulta paginada
com Banco de Dados MySQL.
Para um melhor entendimento, será melhor uma leitura inicial da Publicação de
Padronização de Página PHP.
A melhor maneira de se fazer uma consulta paginada é concentrá-la numa única página
fonte, que será recarregada por si própria a cada mudança de página.
Note que a página em questão tem apenas UM parâmetro de entrada: O número da página.
Para a paginação em si este único parâmetro é suficiente. Poderão ser utilizados
outros parâmetros para programar a consulta a ser feita, mas para a paginação
não é necessário.
Não está sendo apresentado aqui o código completo de uma página e sim partes principais
do código, para entendimento.
1) Exemplo da área de definição da página:
// =========================< CONSTANTES >============================
// Quantidade de itens por página:
define("cQtdItemPag", 10);
// ==========================< VARIÁVEIS >============================
// Número (Inteiro) da página atual:
$numPag = 1;
// Clausula Where da sua consulta SQL:
$sWhere = "";
2) Recepção de parâmetros e carga inicial das variáveis:
Caso o número da página recebida seja vazio ou não numérico, assumimos como sendo
1 (primeira página). Desta forma, quando a página for chamada pela primeira vez,
sem parâmetros, apresentará a primeira página da consulta:
$pag = $_REQUEST["Pag"];
// Se página não indicada, assume a 1 (um):
if($pag == "") $pag = "1";
if(is_numeric($pag)){
} else {
}
A cláusula Where da consulta poderá ser fixa ou gerada a partir de outros parâmetros
recebidos. Ela é gerada como variável de página para simplificar, pois serão
necessárias duas consultas com a mesma seleção:
$sWhere = " WHERE . . . "
3) Apresentação dos registros:
Para a apresentação dos registros será necessário fazer uma consulta a partir do
primeiro registro da página atual. Este registro pode ser calculado a partir do
número da página atual e da Quantidade de ítens por página.
Para isso utilizaremos o comando LIMIT e OFFSET do MySQL, como no
exemplo de função para a geração de registros abaixo:
function GeraRegistros(){
global $numPag, $sWhere;
// Monta o SQL para a Consulta:
$s = "SELECT * FROM tbTabela $sWhere ORDER BY ... LIMIT " . cQtdItemPag;
if($numPag > 1){
$s .= " OFFSET " . strval(($numPag - 1) * cQtdItemPag);
}
$rs = $apl->querySQL($s);
while($lin = $rs->fetch_assoc()){
// Monta e apresenta o registro com o visual desejado...
}
$rs->close();
}
4) Links de Paginação:
Uma simples consulta na base nos indica quanto registros existem na consulta.
Com a quantidade de registros da consulta e a quantidade de ítens por página
calculamos quantas páginas existirão na consulta.
Sabendo a quantidade de registros podemos montar os Links das páginas da consulta.
Estes Links remeterão à própria página, passando o número da página desejada.
A página atual não é montada como Link. Os links Anterior e Próxima
aparecem como links, conforme a necessidade:
function GeraPaginacao(){
global $numPag, $sWhere;
// Inicializa Vars:
$qtdReg = 0;
$qtdPag = 1;
// Monta SQL para consulta de quantidade::
s = "SELECT Count(*) AS QtdReg FROM tbTabela $sWhere";
$rs = $apl->querySQL($s);
if($lin = $rs->fetch_assoc()){
$qtdReg = $lin["QtdReg"];
$qtdPag = ceil($qtdReg / cQtdItemPag);
if($numPag > 1){
?>
<a href="JavaScript:selPag('<?=($numPag-1)?>')">Anterior</a>
<?
} else {
}
for($i=1; $i<$qtdPag; $i++){
if($i != $numPag){
?>
<a href="JavaScript:selPag('<?=$i?>')"><?=$i?></a>
<?
} else {
}
}
if($qtdPag > 1 && $numPag < $qtdPag){
?>
<a href="JavaScript:selPag('<?=($numPag+1)?>')">Próxima</a>
<?
} else {
}
}
$rs->close();
}
5) Código JavaScript:
A função JavaScript chamada nos Links, simplesmente irá carregar o número da página
dada como parâmetro no campo hidden "Pag", que deverá estar definido dentro
do form principal da página e submetê-la a ela mesma:
<Script Language=JavaScript>
function selPag(Pagina){
var f = document.form;
f.Pag.value = Pagina;
f.action = "Nome da Pagina atual";
f.submit();
}
</Script>
¤ Links Relacionados:
- Padronização de Página em PHP
Gostou? Compartilhe ou comente:
|
|
|