Sistema de busca em PHP e MySQL com paginação

8
Sistema de busca em PHP e MySQL com paginação 152 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 KE Y , 3 `titulo` VARCHAR( 255 ) NOT NUL L , 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:

Transcript of Sistema de busca em PHP e MySQL com paginação

Page 1: 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>

Page 2: Sistema de busca em PHP e MySQL com paginação

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`

Page 3: Sistema de busca em PHP e MySQL com paginação

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

Page 4: Sistema de busca em PHP e MySQL com paginação

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)

Page 5: Sistema de busca em PHP e MySQL com paginação

($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'];

Page 6: Sistema de busca em PHP e MySQL com paginação

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>&nbsp;&nbsp;';

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/