+3

Criando um formulário de busca complexo com PHP e MySQL

criado por Ricardo Piuco em 06/03/2008 1:51pm
Bom, esse tutorial visa a explicação de um tutorial simples, que é de muito boa utilidade.

Fazendo o Formulário em HTML -- esse passo é simples para todos:

<form action="Busca.php" method="post">
<input type="text" name="palavra" />
<select name="categoria">
  <option value="cadeiras">Cadeiras</option>
  <option value="mesa">Mesas</option>
  <option value="bancos">Bancos</option>
</select>
<input type="submit" Value="Buscar" />
</form>

Ai está o formuláario, com um campo de texto onde o usuário vai digitar o nome da busca e 3 categorias, onde vai ficar especificado o produto que ele deseja.

Agora vamos para o PHP, você terá que criar uma tabela do banco de dados:

CREATE TABLE `moveis` (
  `id` tinyint(4) NOT NULL auto_increment,
  `nome` varchar(30) NOT NULL default '',
  `categoria` varchar(20) NOT NULL default '',
  `preco` tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `moveis` VALUES (1, 'madeira', 'mesa', 100);
INSERT INTO `moveis` VALUES (2, 'metal', 'mesa', 127);
INSERT INTO `moveis` VALUES (3, 'cimento', 'banco', 50);
INSERT INTO `moveis` VALUES (4, 'madeira', 'cadeira', 127);

Ai está um exemplo simples, voçê poderá melhorá-lo depois. Vamos agora para o php.

Busca.php:
<?php
$hostdb = "localhost";// Geralmente Localhost
$userdb = "USUARIO";//usuário do seu banco de dados
$passdb = "SENHA";// senha do banco de dados
$tabledb = "TABELA_DO_BANCO";// tabela do banco de dados

$conecta = mysql_connect($hostdb, $userdb, $passdb) or die (mysql_error());
@mysql_select_db($tabledb, $conecta) or die ("Erro ao conectar com o banco de dados");

$busca = $_POST['palavra'];// palavra que o usuario digitou
$categoria = $_POST['categoria']; //categoria que o usuario deseja

$busca_query = mysql_query("SELECT * FROM moveis WHERE nome LIKE '%$busca%' AND categoria = '$categoria'")or die(mysql_error());//faz a busca com as palavras enviadas

if (empty($busca_query)) { //Se nao achar nada, lança essa mensagem
    echo "Nenhum registro encontrado.";
}

// quando existir algo em '$busca_query' ele realizará o script abaixo.
while ($dados = mysql_fetch_array($busca_query)) {
    echo "Id do Produto: $dados[id]<br />"; 
    echo "Nome do Produto: $dados[nome]<br />";
    echo "Preço do Produto: $dados[preco] Reais<br />";
    echo "Categoria do Produto: $dados[categoria]<br />";
    echo "<hr>";
}
?>

Pronto ai está, agora é so aperfeiçoar.
Testado, funciona.

Comentários:

Mostrando 1 - 10 de 13 comentários
Réulison disse:
Muito bom! Índices do tipo Full-Text, no SQL Server, são utilizados para otimizar as buscas textuais. Por meio dele é possível apresentar para o usuário resultados semanticamente mais adequados à sua consulta, bem como ordenar esses resultados por relevância. http://www.devmedia.com.br/o-que-usamos-na-busca-da-devmedia/38028
13/03/2017 3:05pm (~7 anos atrás)

opa, esta retornando todos os cliente, sabe o que pode ser?
05/06/2015 12:46pm (~8 anos atrás)

mauricio disse:
Para mim nao apareceu nada no navegador, alguem pode me ajudar?
15/11/2012 6:22pm (~11 anos atrás)

ericunix disse:
Eu queria criar um site, acho que algo similar ao que foi explicado aqui, onde os usuários pudessem fazer um cadastro no site, e cadastrar livros, e fazer pesquisas através do nome do livro, ou autor, e retornar uma outra página com as consultas dos livros cadastrados, algo tipo o google. E usar um banco de dados para armazenar as informações.

Só não sei por onde começar, também não sei qual linguagem(s) seria apropriada para a empreitada.

PHP é a melhor linguagem para fazer isto?
Se não,qual linguagem é melhor, e qual banco usar.
Se puderem me indicar livros também será de grande ajuda.

Desde já muito obrigado.
24/10/2011 5:24pm (~12 anos atrás)

ola pessoal...
trabalho em uma empresa e preciso fazer uma formulario de contato e estou precisando fazer um formulario e naum tenho nenhuma noção de php
se alguem puder me ajudar eu agradeço
a minha dificuldade esta e validar o formulário eu sei fazer tudo o formulario elaborar os campo mas a hora que eu clicar em(submit) que é enviar naum esta enviando
se alguem puder me ajudar eu ja agradeço
01/09/2009 1:26pm (~14 anos atrás)

João Paulo disse:
ismael disse:
qero que apareça uma mensagem tipo "escolha uma categoria " qndo o select não for modificado como faço ?

Ismael, respondendo sua pergunta:
[code]if(empty($categoria)){
echo "<meta HTTP-EQUIV='Refresh' CONTENT='0;URL=javascript: history.go(-1);'>"; // retorna para a pagina anterior
echo "<script type='text/javascript'>alert('Escolha uma categoria')</script>"; // escreve o alerta.
[/code]
15/07/2009 3:24pm (~14 anos atrás)

Ricardo Piuco disse:
Antes de fazer o query da busca voce pode botar um
if(empty($categoria)){
echo "<meta HTTP-EQUIV='Refresh' CONTENT='0;URL=javascript: history.go(-1);'>"; // retorna para a pagina anterior
echo "<script type='text/javascript'>alert('Selecione uma categoria')</script>"; // escreve o alerta.
}else{
resto do codigo...
}

Mais ou menos isso.
12/06/2009 6:33pm (~15 anos atrás)

ismael disse:
qero que apareça uma mensagem tipo "escolha uma categoria " qndo o select não for modificado como faço ?
12/06/2009 4:28pm (~15 anos atrás)

Ricardo Piuco disse:
Foi mal pelo segundo comentario seguido ,so agora vo a parte do categoria.
--Cézar Ayran--
Não sei oq ue aconteceu mais nao foi feita a quebra de linha na parte da query de busca, se voce selecionar e arrastar o mouse por cima da query vera o resto do script.
10/06/2009 8:41am (~15 anos atrás)

Ricardo Piuco disse:
--Cézar Ayran--
Na verdade eu nao disse que o script era complexo.
Eu disse que a busca era complexa, geralmente se usar somente um campo ara fazer buscar dentro do site, porém ai ficou uma busca com um campo e um select para categorias.

--Romário Machado--
É, acabei me confundindo, tenho a mania de chamar o banco de tabela, Confusao aprendida com localhost ¬¬.

--Diego--
Sim deixei o mais simpels possivel, poderia ter colocado htmlspecialchars , addslashes e (string)/(int), so que quis deixar um pouco mais leve. Era para ser um tutorial iniciante.
10/06/2009 8:37am (~15 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)