
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 formulário de busca, que pode ir em qualquer lugar do seu site (topo/lateral) e a página de resultados da busca, que exibirá um resultado parecido com o do Google.
A busca será feita no
título e no
conteúdo das notícias cadastradas no banco de dados, em uma tabela chamada
notícias.
Veja
um exemplo (imagem) de como ficará o resultado da busca sem CSS.
Veja o código de criação da tabela:
1 | CREATE TABLE `noticias` ( |
2 | `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , |
3 | `titulo` VARCHAR( 255 ) NOT NULL , |
4 | `texto` LONGTEXT NOT NULL , |
6 | `cadastro` DATETIME NOT NULL , |
As colunas da tabela serão:
id,
titulo,
texto,
ativa (1 ou 0), e
cadastro (AAAA-MM-DD HH:MM:SS).
Esta é uma estrutura simples de uma tabela de notícias, e você vai precisar adaptar o script para a sua tabela caso queira usar uma pronta.
Vamos ao formulário de busca:
3 | <label for="consulta">Buscar:</label> |
4 | <input type="text" id="consulta" name="consulta" maxlength="255" /> |
5 | <input type="submit" value="OK" /> |
Não se esqueça de alterar o action para o endereço certo do seu site… Se você preferir, pode definir o action usando caminho relativo, não há diferença.
Passaremos a busca por método GET para ficar mais parecido com o Google.

E agora o arquivo (
busca.php) que recebe os dados do formulário, faz a conexão ao banco de dados, processa a busca e exibe o resultado (sem paginação):
05 | $_BS['MySQL']['servidor'] = 'localhost'; |
06 | $_BS['MySQL']['usuario'] = 'usuario'; |
07 | $_BS['MySQL']['senha'] = 'senha'; |
08 | $_BS['MySQL']['banco'] = 'meubanco'; |
09 | mysql_connect($_BS['MySQL']['servidor'], $_BS['MySQL']['usuario'], $_BS['MySQL']['senha']); |
10 | mysql_select_db($_BS['MySQL']['banco']); |
15 | if (!isset($_GET['consulta'])) { |
22 | $busca = $_GET['consulta']; |
24 | $busca = mysql_real_escape_string($busca); |
29 | $sql = "SELECT * FROM `noticias` WHERE (`ativa` = 1) AND ((`titulo` LIKE '%".$busca."%') OR ('%".$busca."%')) ORDER BY `cadastro` DESC"; |
31 | $query = mysql_query($sql); |
37 | while ($resultado = mysql_fetch_assoc($query)) { |
38 | $titulo = $resultado['titulo']; |
39 | $texto = $resultado['texto']; |
42 | echo '<a href="'.$link.'" title="'.$titulo.'">'.$titulo.'</a><br />'; |
43 | echo date('d/m/Y H:i', strtotime($resultado['cadastro'])); |
44 | echo '<p>'.$texto.'</p>'; |
45 | echo '<a href="'.$link.'" title="'.$titulo.'">'.$link.'</a>'; |
Não se esqueça de mudar, dentro da exibição dos resultados, como é definida a variável $link para o formato que o seu site usa
—–
E pra quem quiser o mesmo script com paginação:
05 | $_BS['PorPagina'] = 20; |
09 | $_BS['MySQL']['servidor'] = 'localhost'; |
10 | $_BS['MySQL']['usuario'] = 'usuario'; |
11 | $_BS['MySQL']['senha'] = 'senha'; |
12 | $_BS['MySQL']['banco'] = 'meubanco'; |
13 | mysql_connect($_BS['MySQL']['servidor'], $_BS['MySQL']['usuario'], $_BS['MySQL']['senha']); |
14 | mysql_select_db($_BS['MySQL']['banco']); |
19 | if (!isset($_GET['consulta'])) { |
26 | $busca = $_GET['consulta']; |
28 | $busca = mysql_real_escape_string($busca); |
33 | $sql = "SELECT COUNT(*) AS total FROM `noticias` WHERE (`ativa` = 1) AND ((`titulo` LIKE '%".$busca."%') OR ('%".$busca."%'))"; |
35 | $query = mysql_query($sql); |
37 | $total = mysql_result($query, 0, 'total'); |
39 | $paginas = (($total % $_BS['PorPagina']) > 0) ? (int)($total / $_BS['PorPagina']) + 1 : ($total / $_BS['PorPagina']); |
44 | if (isset($_GET['pagina'])) { |
45 | $pagina = (int)$_GET['pagina']; |
49 | $pagina = max(min($paginas, $pagina), 1); |
50 | $inicio = ($pagina - 1) * $_BS['PorPagina']; |
55 | $sql = "SELECT * FROM `noticias` WHERE (`ativa` = 1) AND ((`titulo` LIKE '%".$busca."%') OR ('%".$busca."%')) ORDER BY `cadastro` DESC LIMIT ".$inicio.", ".$_BS['PorPagina']; |
57 | $query = mysql_query($sql); |
62 | echo "<p>Resultados ".min($total, ($inicio + 1))." - ".min($total, ($inicio + $_BS['PorPagina']))." de ".$total." resultados encontrados para '".$_GET['consulta']."'</p>"; |
66 | while ($resultado = mysql_fetch_assoc($query)) { |
67 | $titulo = $resultado['titulo']; |
68 | $texto = $resultado['texto']; |
71 | echo '<a href="'.$link.'" title="'.$titulo.'">'.$titulo.'</a><br />'; |
72 | echo date('d/m/Y H:i', strtotime($resultado['cadastro'])); |
73 | echo '<p>'.$texto.'</p>'; |
74 | echo '<a href="'.$link.'" title="'.$titulo.'">'.$link.'</a>'; |
83 | for($n = 1; $n <= $paginas; $n++) { |
84 | echo '<a href="?consulta='.$_GET['consulta'].'&pagina='.$n.'">'.$n.'</a> '; |
Reconheço que o script poderia ser mais simples, mas seu uso ficaria muito limitado (e o código ficaria enorme)… E com paginação fica muito mais legal, além de ser o que todo mundo acaba procurando.
—
Vocês perceberão que não há formatação e estilização (CSS) nenhuma… Esse sistema de busca foi feito para você usar de base e criar o seu próprio sistema.
Espero que tenham gostado!

Qualquer dúvida, é só falar.
Artigo originalmente publicado em
12 de maio de 2009 por
Thiago Belem:
Sistema de busca em PHP e MySQL com paginação
Nenhum comentário:
Postar um comentário