Sistema de busca em PHP e MySQL com paginação
-
Upload
euzinho-granfino -
Category
Documents
-
view
612 -
download
6
Transcript of Sistema de busca em PHP e MySQL com paginação
Sistema de busca em PHP e MySQL com paginação152 Replies
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 ,
5 `ativa` BOOL NOT NULL ,
6 `cadastro` DATETIME NOT NULL ,
7 INDEX ( `ativa` )
8 ) ENGINE = MYISAM
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:
1 <form method="GET" action="http://www.meusite.com.br/busca.php ">
2 <fieldset>
3 <label for="consulta">Buscar:</label>
4 <input type="text" id="consulta" name="consulta" maxlength="255" />5 <input type="submit" value="OK" />
6 </fieldset>
7 </form>
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):
01 <?php
02
03 // Conexão com o MySQL
04 // ========================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']);
11 // ====(Fim da conexão)====
12
13 // Verifica se foi feita alguma busca
14 // Caso contrario, redireciona o visitante
15 if (!isset($_GET['consulta'])) {
16 header("Location: http://www.meusite.com.br/ ");17 exit;
18 }
19 // Se houve busca, continue o script:
20
21 // Salva o que foi buscado em uma variável
22 $busca = $_GET['consulta'];
23 // Usa a função mysql_real_escape_string() para evitar erros no MySQL
24 $busca = mysql_real_escape_string($busca);
25
26 // ============================================
27
28 // Monta outra consulta MySQL para a busca29 $sql = "SELECT * FROM `noticias` WHERE (`ativa` = 1) AND ((`titulo`
LIKE '%".$busca."%') OR ('%".$busca."%')) ORDER BY `cadastro` DESC";
30 // Executa a consulta
31 $query = mysql_query($sql);
32
33 // ============================================
34
35 // Começa a exibição dos resultados
36 echo "<ul>";
37 while ($resultado = mysql_fetch_assoc($query)) {
38 $titulo = $resultado['titulo'];
39 $texto = $resultado['texto'];
40 $link = 'http://www.meusite.com.br/noticia.php?id= ' .$resultado['id'];
41 echo "<li>";
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>';
46 echo "</li>";
47 }
48 echo "</ul>";49 ?>
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:
01 <?php
02
03 // Configuração do script
04 // ========================05 $_BS['PorPagina'] = 20; // Número de registros por página
06
07 // Conexão com o MySQL
08 // ========================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']);
15 // ====(Fim da conexão)====
16
17 // Verifica se foi feita alguma busca
18 // Caso contrario, redireciona o visitante
19 if (!isset($_GET['consulta'])) {
20 header("Location: http://www.meusite.com.br/ ");21 exit;
22 }
23 // Se houve busca, continue o script:
24
25 // Salva o que foi buscado em uma variável
26 $busca = $_GET['consulta'];
27 // Usa a função mysql_real_escape_string() para evitar erros no MySQL
28 $busca = mysql_real_escape_string($busca);
29
30 // ============================================
31
32 // Monta a consulta MySQL para saber quantos registros serão encontrados
33 $sql = "SELECT COUNT(*) AS total FROM `noticias` WHERE (`ativa` = 1) AND ((`titulo` LIKE '%".$busca."%') OR ('%".$busca."%'))";
34 // Executa a consulta
35 $query = mysql_query($sql);
36 // Salva o valor da coluna 'total', do primeiro registro encontrado pela consulta
37 $total = mysql_result($query, 0, 'total');
38 // Calcula o máximo de paginas
39 $paginas = (($total % $_BS['PorPagina']) > 0) ? (int)
($total /$_BS['PorPagina']) + 1 : ($total / $_BS['PorPagina']);
40
41 // ============================================
42
43 // Sistema simples de paginação, verifica se há algum argumento 'pagina' na URL
44 if (isset($_GET['pagina'])) {
45 $pagina = (int)$_GET['pagina'];
46 } else {
47 $pagina = 1;
48 }
49 $pagina = max(min($paginas, $pagina), 1);
50 $inicio = ($pagina - 1) * $_BS['PorPagina'];
51
52 // ============================================
53
54 // Monta outra consulta MySQL, agora a que fará a busca com paginação
55$sql = "SELECT * FROM `noticias` WHERE (`ativa` = 1) AND ((`titulo` LIKE '%".$busca."%') OR ('%".$busca."%')) ORDER BY `cadastro` DESC LIMIT ".$inicio.", ".$_BS['PorPagina'];
56 // Executa a consulta
57 $query = mysql_query($sql);
58
59 // ============================================
60
61 // Começa a exibição dos resultados
62echo "<p>Resultados ".min($total, ($inicio + 1))." - ".min($total, ($inicio + $_BS['PorPagina']))." de ".$total." resultados encontrados para '".$_GET['consulta']."'</p>";
63 // <p>Resultados 1 - 20 de 138 resultados encontrados para 'minha busca'</p>
64
65 echo "<ul>";
66 while ($resultado = mysql_fetch_assoc($query)) {67 $titulo = $resultado['titulo'];
68 $texto = $resultado['texto'];
69 $link = 'http://www.meusite.com.br/noticia.php?id= ' .$resultado['id'];
70 echo "<li>";
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>';75 echo "</li>";
76 }
77 echo "</ul>";
78
79 // ============================================
80
81 // Começa a exibição dos paginadores
82 if ($total > 0) {
83 for($n = 1; $n <= $paginas; $n++) {
84 echo '<a href="?consulta='.$_GET['consulta'].'&pagina='.$n.'">'.$n.'</a> ';
85 }86 }
87
88 ?>
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.
http://blog.thiagobelem.net/sistema-de-busca-em-php-e-mysql/