Paginação de resultados em PHP com MySQL
Precisei recentemente de elaborar uma consulta em um banco de dados MySQL e também exibir seus resultados divididos em paginações, procurei por diversos scripts já prontos mas nenhum atendeu minha necessidade, seja por complexidade, mal funcionamento ou simplesmente por não fazer realmente o que eu precisava. Pois bem, finalmente encontrei um simples, bem comentado para que eu pudesse aprender PHP com o mesmo e não simplesmente copiar e de quebra adaptei o mesmo para que eu pudesse usá-lo como queria. Claro, depois desse trabalho todo, segue abaixo o que eu fiz para deixá-lo funcionando.
Começaremos obviamente pelo formulário de consulta, o qual não contém nenhum segredo, os unicos detalhes além do formulário em si estão nas linhas 2 e 3, onde respectivamente especifico o arquivo de conexão com o banco de dados e também um que protege nosso conteúdo através de validação por meio de usuário e senha.
No caso da busca que eu precisava fazer no banco de dados, eu precisava optar por qual dado procurar dentro da tabela em questão, e não somente um nome ou um número de documento, era necessário mesmo oferecer outras alternativas de consulta:
<?php
require_once('../restrito.php');
require_once('../conecta.php');
?>
<h1>Formulário de Consulta</h1>
<form method="GET" action="resultados.php">
<fieldset>
<label for="consulta">Pesquisar:</label>
<input type="text" id="consulta" name="consulta" maxlenght="255" /><br />
/<br />
<label for="coluna">No campo:</label><br />
<input type="radio" name="campo" value="nome" />Nome<br />
<input type="radio" name="campo" value="nome" />CPF<br />
<input type="radio" name="campo" value="nome" />Endereço<br />
<input type="radio" name="campo" value="nome" />Bairro<br />
<input type="radio" name="campo" value="nome" />E-mail<br />
</fieldset>
</form>
Agora sim o segundo arquivo, adaptado de: Paginação de resultados com PHP/MySQL, escrito pelo Rafael Couto:
<?php
require_once('../conecta.php');
require_once('../restrito.php');
// Informacoes da query
$valor = $_GET['consulta'];
$campo = $_GET['campo'];
$busca = "FROM `userinfo` WHERE `".$campo."` LIKE '%".$valor."%'";
// Maximo de registros por pagina
$maximo = 6;
// Declaracao da pagina inicial
$pagina = $_GET['pagina'];
if($pagina == "") {
$pagina = "1";
}
// Calculando o registro inicial
$inicio = $pagina - 1;
$inicio = $maximo * $inicio;
// Conta os resultados no total da query
$strCount = mysql_query("SELECT COUNT(*) AS 'num_registros'" .$busca.";") or die(mysql_error());
$row = mysql_fetch_array($strCount);
$total = $row["num_registros"];
############################################
// INICIO DO CONTEUDO
echo "<h1>Resultados da Pesquisa</h1>";
echo "<h2>Foram encontrados ".$total." de Registros em sua consulta:</h2>";
echo "<p><a href="consulta.php" title="Fazer nova Consulta">Fazer nova consulta</a></p>";
// Realizamos a query
$sql = mysql_query("SELECT * $busca ORDER BY datacadastro ASC LIMIT $inicio,$maximo");
// Exibimos os resultados da busca conforme a pesquisa
while ($linha = mysql_fetch_object($sql)) {
echo "<fieldset align="left"><strong>Nome: </strong>" . $linha->nome . "<br />
<strong>CPF: </strong> ". $linha->cpf ."<br />
<strong>RG: </strong> ". $linha->rg ."<br />
<strong>Nascimento: </strong> ". $linha->nascimento ."<br />
<strong>Endereço: </strong> ". $linha->endereco ."<br />
<strong>Bairro: </strong> ". $linha->bairro ."<br />
<strong>Telefone: </strong> ". $linha->telefone ."<br />
<strong>Celular: </strong> ". $linha->celular ."<br />
<strong>E-mail: </strong>" .$linha->email ."</fieldset> <br />";
}
echo "<p><a href="consulta.php" title="Fazer nova Consulta">Fazer nova consulta</a></p>";
// FIM DO CONTEUDO
############################################
$menos = $pagina - 1;
$mais = $pagina + 1;
$pgs = ceil($total / $maximo);
if($pgs > 1 ) {
// Exibicao da pagina
if($menos > 0) {
echo "<a href=".$_SERVER['PHP_SELF']."?pagina=".($menos)."&consulta=".($valor)."&campo=".($campo).">anterior</a> ";
}
echo "<p>";
// Listando as paginas
for($i=1;$i <= $pgs;$i++) {
if($i != $pagina) {
echo " <a href=".$_SERVER['PHP_SELF']."?pagina=".($i)."&consulta=".($valor)."&campo=".($campo).">$i</a> | ";
} else {
echo " <strong>".$i."</strong> | ";
}
}
if($mais <= $pgs) {
echo " <a href=".$_SERVER['PHP_SELF']."?pagina=".($mais)."&consulta=".($valor)."&campo=".($campo).">próxima</a>";
}
}
echo "</p>";
?>
Aliás, o sistema que utilizei aqui para proteger os arquivos com usuário e senha também foi aprendido no blog dele, a quem interessar, segue o link também: Restringindo páginas de forma simples com PHP.
Novamente espero que programadores mais experientes opinem e dêem sugestões de como melhorar o script através de comentários, e espero que minhas adaptações também sejam úteis para quem precise de algo semelhante para seu próprio uso. Sintam-se a vontade.