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)."&amp;consulta=".($valor)."&amp;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)."&amp;consulta=".($valor)."&amp;campo=".($campo).">$i</a> | ";
            } else {
                echo " <strong>".$i."</strong> | ";
            }
        }

        if($mais <= $pgs) {
            echo " <a href=".$_SERVER['PHP_SELF']."?pagina=".($mais)."&amp;consulta=".($valor)."&amp;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.

comments powered by Disqus