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