Você está na página 1de 4

Sistema de busca em PHP e MySQL com paginao

Hoje vou demonstrar como podemos criar um sistema de busca simples para o seu site.

O sistema de busca aqui explicado consiste em duas coisas: o formulrio de busca, que pode ir em qualquer lugar do seu site (topo/lateral) e a pgina de resultados da busca, que exibir um resultado parecido com o do Google.

A busca ser feita no ttulo e no contedo das notcias cadastradas no banco de dados, em uma tabela chamada notcias.

Veja um exemplo (imagem) de como ficar o resultado da busca sem CSS.

Veja o cdigo de criao da tabela: 1 2 3 4 5 6 7 8 CREATE TABLE `noticias` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `titulo` VARCHAR( 255 ) NOT NULL , `texto` LONGTEXT NOT NULL , `ativa` BOOL NOT NULL , `cadastro` DATETIME NOT NULL , INDEX ( `ativa` ) ) ENGINE = MYISAM

As colunas da tabela sero: id, titulo, texto, ativa (1 ou 0), e cadastro (AAAA-MM-DD HH:MM:SS).

Esta uma estrutura simples de uma tabela de notcias, e voc vai precisar adaptar o script para a sua tabela caso queira usar uma pronta.

Vamos ao formulrio de busca: 1 2 3 4 5 6 7 <form method="GET"action="http://www.meusite.com.br/busca.php"> <fieldset> <label for="consulta">Buscar:</label> <input type="text" id="consulta" name="consulta"maxlength="255" /> <input type="submit" value="OK" /> </fieldset> </form>

No se esquea de alterar o action para o endereo certo do seu site Se voc preferir, pode definir o action usando caminho relativo, no h diferena.

Passaremos a busca por mtodo GET para ficar mais parecido com o Google.

E agora o arquivo (busca.php) que recebe os dados do formulrio, faz a conexo ao banco de dados, processa a busca e exibe o resultado (sem paginao): 01 02 03 <?php // Conexo com o MySQL

04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

// ======================== $_BS['MySQL']['servidor'] = 'localhost'; $_BS['MySQL']['usuario'] = 'usuario'; $_BS['MySQL']['senha'] = 'senha'; $_BS['MySQL']['banco'] = 'meubanco'; mysql_connect($_BS['MySQL']['servidor'], $_BS['MySQL'] ['usuario'], $_BS['MySQL']['senha']); mysql_select_db($_BS['MySQL']['banco']); // ====(Fim da conexo)==== // Verifica se foi feita alguma busca // Caso contrario, redireciona o visitante if (!isset($_GET['consulta'])) { header("Location: http://www.meusite.com.br/"); exit; } // Se houve busca, continue o script: // Salva o que foi buscado em uma varivel $busca = $_GET['consulta']; // Usa a funo mysql_real_escape_string() para evitar erros no MySQL $busca = mysql_real_escape_string($busca); // ============================================ // Monta outra consulta MySQL para a busca $sql = "SELECT * FROM `noticias` WHERE (`ativa` = 1) AND ((`titulo` LIKE '%".$busca."%') OR ('%".$busca."%')) ORDER BY `cadastro` DESC"; // Executa a consulta $query = mysql_query($sql); // ============================================ // Comea a exibio dos resultados echo "<ul>"; while ($resultado = mysql_fetch_assoc($query)) { $titulo = $resultado['titulo']; $texto = $resultado['texto']; $link = 'http://www.meusite.com.br/noticia.php? id=' .$resultado['id']; echo "<li>"; echo '<a href="'.$link.'" title="'.$titulo.'">'.$titulo.'</a><br />'; echo date('d/m/Y H:i',strtotime($resultado['cadastro'])); echo '<p>'.$texto.'</p>'; echo '<a href="'.$link.'" title="'.$titulo.'">'.$link.'</a>'; echo "</li>"; } echo "</ul>"; ?>

No se esquea de mudar, dentro da exibio dos resultados, como definida a varivel $link para o formato que o seu site usa

E pra quem quiser o mesmo script com paginao: 01 02 <?php

03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

56 57

// Configurao do script // ======================== $_BS['PorPagina'] = 20; // Nmero de registros por pgina // Conexo com o MySQL // ======================== $_BS['MySQL']['servidor'] = 'localhost'; $_BS['MySQL']['usuario'] = 'usuario'; $_BS['MySQL']['senha'] = 'senha'; $_BS['MySQL']['banco'] = 'meubanco'; mysql_connect($_BS['MySQL']['servidor'], $_BS['MySQL'] ['usuario'], $_BS['MySQL']['senha']); mysql_select_db($_BS['MySQL']['banco']); // ====(Fim da conexo)==== // Verifica se foi feita alguma busca // Caso contrario, redireciona o visitante if (!isset($_GET['consulta'])) { header("Location: http://www.meusite.com.br/"); exit; } // Se houve busca, continue o script: // Salva o que foi buscado em uma varivel $busca = $_GET['consulta']; // Usa a funo mysql_real_escape_string() para evitar erros no MySQL $busca = mysql_real_escape_string($busca); // ============================================ // Monta a consulta MySQL para saber quantos registros sero encontrados $sql = "SELECT COUNT(*) AS total FROM `noticias` WHERE (`ativa` = 1) AND ((`titulo` LIKE '%".$busca."%') OR ('%".$busca."%'))"; // Executa a consulta $query = mysql_query($sql); // Salva o valor da coluna 'total', do primeiro registro encontrado pela consulta $total = mysql_result($query, 0, 'total'); // Calcula o mximo de paginas $paginas = (($total % $_BS['PorPagina']) > 0) ? (int) ($total / $_BS['PorPagina']) + 1 : ($total /$_BS['PorPagina']); // ============================================ // Sistema simples de paginao, verifica se h algum argumento 'pagina' na URL if (isset($_GET['pagina'])) { $pagina = (int)$_GET['pagina']; } else { $pagina = 1; } $pagina = max(min($paginas, $pagina), 1); $inicio = ($pagina - 1) * $_BS['PorPagina']; // ============================================ // Monta outra consulta MySQL, agora a que far a busca com paginao $sql = "SELECT * FROM `noticias` WHERE (`ativa` = 1) AND ((`titulo` LIKE '%".$busca."%') OR ('%".$busca."%')) ORDER BY `cadastro` DESC LIMIT ".$inicio.", ".$_BS['PorPagina']; // Executa a consulta $query = mysql_query($sql);

58 59 60 61 62

63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

// ============================================ // Comea a exibio dos resultados echo "<p>Resultados ".min($total, ($inicio + 1))." - ".min($total, ($inicio + $_BS['PorPagina']))." de ".$total." resultados encontrados para '".$_GET['consulta']."'</p>"; // <p>Resultados 1 - 20 de 138 resultados encontrados para 'minha busca'</p> echo "<ul>"; while ($resultado = mysql_fetch_assoc($query)) { $titulo = $resultado['titulo']; $texto = $resultado['texto']; $link = 'http://www.meusite.com.br/noticia.php? id=' .$resultado['id']; echo "<li>"; echo '<a href="'.$link.'" title="'.$titulo.'">'.$titulo.'</a><br />'; echo date('d/m/Y H:i',strtotime($resultado['cadastro'])); echo '<p>'.$texto.'</p>'; echo '<a href="'.$link.'" title="'.$titulo.'">'.$link.'</a>'; echo "</li>"; } echo "</ul>"; // ============================================ // Comea a exibio dos paginadores if ($total > 0) { for($n = 1; $n <= $paginas; $n++) { echo '<a href="? consulta='.$_GET['consulta'].'&pagina='.$n.'">'.$n.'</a>&nbsp;&nbsp;'; } } ?>

Reconheo que o script poderia ser mais simples, mas seu uso ficaria muito limitado (e o cdigo ficaria enorme) E com paginao fica muito mais legal, alm de ser o que todo mundo acaba procurando.

Vocs percebero que no h formatao e estilizao (CSS) nenhuma Esse sistema de busca foi feito para voc usar de base e criar o seu prprio sistema.

Espero que tenham gostado!

Qualquer dvida, s falar.

Compartilhe:

Você também pode gostar