Sistema de busca interna com PHP/MySQL

Olá pessoal, hoje vamos aprender a fazer um sistema de busca interna simples. Ou seja, vamos buscar em nosso banco de dados informações relativas a uma palavra e apresentar os resultados ao usuário.

1. Banco de dados

Como exemplo, vamos utilizar uma tabela de produtos:

CREATE TABLE IF NOT EXISTS `produtos` (
  `cod` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(50) NOT NULL,
  `valor` double NOT NULL,
  PRIMARY KEY (`cod`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

INSERT INTO `produtos` (`cod`, `nome`, `valor`) VALUES
(1, 'Processador INTEL', 200.00),
(2, 'Processador AMD', 150.00),
(3, 'Placa-mãe ASUS', 250.00),
(4, 'Placa-mãe GIGABYTE', 180.00),
(5, 'Placa de vídeo GE-FORCE', 300.00);

2. Busca com PHP

Agora iremos criar nosso formulário de busca:

<form name="frmBusca" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>?a=buscar" >
    <input type="text" name="palavra" />
    <input type="submit"  value="Buscar" />
</form>

Quando clicado em Buscar, nossa action apontará para o próprio arquivo ($_SERVER[‘PHP_SELF’]), porém enviando através do método GET a ação a = buscar;

Ou seja, agora nós devemos verificar a ação a ser executada e realizar a busca. Claro que você poderia ter feito outro arquivo, mais como nosso exemplo aqui é simples, vamos apenas utilizar um arquivo. Agora vamos ao nosso código PHP:

<?php
// Conexão com o banco de dados
$conn = @mysql_connect("localhost", "usuario", "senha") or die("Não foi possível a conexão com o Banco");
// Selecionando banco
$db = @mysql_select_db("produtos", $conn) or die("Não foi possível selecionar o Banco");

// Recuperamos a ação enviada pelo formulário
$a = $_GET['a'];

// Verificamos se a ação é de busca
if ($a == "buscar") {

	// Pegamos a palavra
	$palavra = trim($_POST['palavra']);

	// Verificamos no banco de dados produtos equivalente a palavra digitada
	$sql = mysql_query("SELECT * FROM produtos WHERE nome LIKE '%".$palavra."%' ORDER BY nome");

	// Descobrimos o total de registros encontrados
	$numRegistros = mysql_num_rows($sql);

	// Se houver pelo menos um registro, exibe-o
	if ($numRegistros != 0) {
		// Exibe os produtos e seus respectivos preços
		while ($produto = mysql_fetch_object($sql)) {
			echo $produto->nome . " (R$ ".$produto->valor.") <br />";
		}
	// Se não houver registros
	} else {
		echo "Nenhum produto foi encontrado com a palavra ".$palavra."";
	}
}
?>

Bom é apenas isso, acho que nem preciso complementar, pois o código está todo comentado. Nosso código final fica da seguinte maneira:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Sistema de busca interna com PHP/MySQL</title>
</head>

<body>
<form name="frmBusca" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>?a=buscar" >
    <input type="text" name="palavra" />
    <input type="submit" value="Buscar" />
</form>

<?php
// Conexão com o banco de dados
$conn = @mysql_connect("localhost", "usuario", "senha") or die("Não foi possível a conexão com o Banco");
// Selecionando banco
$db = @mysql_select_db("produtos", $conn) or die("Não foi possível selecionar o Banco");

// Recuperamos a ação enviada pelo formulário
$a = $_GET['a'];

// Verificamos se a ação é de busca
if ($a == "buscar") {

	// Pegamos a palavra
	$palavra = trim($_POST['palavra']);

	// Verificamos no banco de dados produtos equivalente a palavra digitada
	$sql = mysql_query("SELECT * FROM produtos WHERE nome LIKE '%".$palavra."%' ORDER BY nome");

	// Descobrimos o total de registros encontrados
	$numRegistros = mysql_num_rows($sql);

	// Se houver pelo menos um registro, exibe-o
	if ($numRegistros != 0) {
		// Exibe os produtos e seus respectivos preços
		while ($produto = mysql_fetch_object($sql)) {
			echo $produto->nome . " (R$ ".$produto->valor.") <br />";
		}
	// Se não houver registros
	} else {
		echo "Nenhum produto foi encontrado com a palavra ".$palavra."";
	}
}
?>
</body>
</html>

3. Conclusão

O que eu passei é só a base, agora use sua criatividade para criar seu próprio sistema de busca, até a proxima pessoal!