Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alan Douglas

[Resolvido] Busca por cidade PHP+Mysql

Recommended Posts

Olá. Estou com uma dúvida com o PHP. Sou iniciante no PHP, sei como deve ser feito mas por não conhecer a linguagem estou ainda perdido.

Minha dúvida é a seguinte:

 

Estou fazendo um sistema de busca, onde em um campo text a pessoa digita e busca qualquer estabelecimento, até aí tudo certo. Consegui fazer tudo, a busca nos respectivos campos da tabela no banco de dados. O Problema é na hora de definir a busca da pessoa por cidade.

 

A primeira dúvida é:

-Qual é o melhor método para redefinir a busca por cidade? Tenho uma tabela "anuncio" onde ela tem um campo "cidade" que eu cadastro as cidades. Ou é melhor eu montar uma tabela "cidade" e cadastrar nela as cidades e depois relacionar na tabela "anuncio"?

 

Respondendo essa pergunta ficará mais fácil solucionar meu problema.

 

Mas o maior problema está aqui:

Aqui está o form em html:

 

<form name"buscar" method="post" action="resultado.php">
Busca: <input name="busca" type="text" size="30" maxlength="40" />
Localidade: <select name="cidade" size="1">
<option value="todos">Todos</option>
<option value="caraguatatuba">Caraguatatuba</option>
<option value="ilhabela">Ilhabela</option>
<option value="saosebastiao">São Sebastião</option>
<option value="ubatuba">Ubatuba</option>
</select>   <input type="submit" name="submit" value="Buscar" />
</form>

E aqui o código em php da busca:

 

<? if(!empty($HTTP_POST_VARS[busca])) { 

$buscas = explode(' ', $HTTP_POST_VARS['busca']); 

$qr = "SELECT * FROM anuncio WHERE";

foreach($buscas as $busca){
$qr .= "(nome LIKE '%".$busca."%' OR descri LIKE '%".$busca."%' OR tags LIKE '%".$busca."%') AND ";
}

$qr .= "1 = 1 ORDER BY nome ASC";


$sql = mysql_query($qr) or die (mysql_error()); // Executa a query no Banco de Dados 
$total = mysql_num_rows($sql); // Conta o total ded resultados encontrados 

while ($dados = mysql_fetch_array($sql)) {
$campo1 = $dados["nome"];
$campo2 = $dados["cidade"];

echo "$campo1 - $campo2";
} 
} 
?>

Minha pergunta é:

COMO EU FAÇO PRA PESSOA PESQUISAR POR CIDADE? Na hora de pesquisar, ela escolhe no SELECT a cidade e a pesquisa é feita somente por aquela cidade. Se ela quiser pesquisar "Mc'donalds" na cidade de Caraguatatuba ou em todas as cidades, como faço?

 

Sei a lógica para se fazer isso, mas por não conhecer a linguagem me perco todo.

 

Agradeço muito a quem puder ajudar.

 

Grato,

Alan Douglas

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria algo assim mesmo

 

o que nao funciona?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver parcialmente o problema.

 

na página que recupera os dados, estava:

 

foreach($buscas as $busca){

$qr .= "(nome LIKE '%".$busca."%' OR descri LIKE '%".$busca."%' OR tags LIKE '%".$busca."%') AND ";

}

 

e eu coloquei:

 

foreach($buscas as $busca){

$qr .= "(nome LIKE '%".$busca."%' OR descri LIKE '%".$busca."%' OR tags LIKE '%".$busca."%') AND cidade='$cidade' AND ";

}

 

 

Consegui resolver parcialmente porque ainda, ele não busca em TODAS as cidades já que no BD não existe o mesmo para ele procurar.

 

Alguém pra resolver esse último problema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando for todas é so nao colocar a condição where

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei que devo colocar algo relativo a:

 

if $cidade == 'todos'; {

foreach($buscas as $busca){

$qr .= "(nome LIKE '%".$busca."%' OR descri LIKE '%".$busca."%' OR tags LIKE '%".$busca."%') AND ";

 

}

 

else {

foreach($buscas as $busca){

$qr .= "(nome LIKE '%".$busca."%' OR descri LIKE '%".$busca."%' OR tags LIKE '%".$busca."%') AND cidade='$cidade' AND ";

}

 

Mas por não ter conhecimento profundo em PHP, não sei como acrescentar isso ao código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se for todos nao use for apenas coloque a sql basica

Compartilhar este post


Link para o post
Compartilhar em outros sites

a questão é o seguinte:

 

 

colocando isso:

 

foreach($buscas as $busca){

$qr .= "(nome LIKE '%".$busca."%' OR descri LIKE '%".$busca."%' OR tags LIKE '%".$busca."%') AND ";

}

 

eu consigo buscar em toda a tabela, busca pelo campo digitado na pesquisa, ok

 

eu usando esse codigo:

 

foreach($buscas as $busca){

$qr .= "(nome LIKE '%".$busca."%' OR descri LIKE '%".$busca."%' OR tags LIKE '%".$busca."%') AND cidade='$cidade' AND ";

}

 

 

eu consigo buscar em toda a tabela, busca pelo campo digitado na pesquisa mas somente na cidade selecionada

 

Agora o que eu queria é fazer os dois codigos funcionarem juntos, pq no form tem a opção de buscar em todas as cidade e a opção de selecionar a cidade, eu pensei em fazer um if cidade== todos *todos é o value do campo do form

foreach($buscas as $busca){

$qr .= "(nome LIKE '%".$busca."%' OR descri LIKE '%".$busca."%' OR tags LIKE '%".$busca."%') AND ";

}

 

else

foreach($buscas as $busca){

$qr .= "(nome LIKE '%".$busca."%' OR descri LIKE '%".$busca."%' OR tags LIKE '%".$busca."%') AND cidade='$cidade' AND ";

}

 

Mas não sei a sintaxe correta para acrescentar isso, da erros e erros, não estou sabendo colocar em pratica o codigo, ajudas bem vindas, obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com a ajuda de um amigo, consegui resolver esse problema:

 

//adiciona o trecho SQL para cada palavra
if(($cidade == "") || ($cidade == null)){
foreach($buscas as $busca){
	
$qr .= "(nome LIKE '%".$busca."%' OR descri LIKE '%".$busca."%' OR tags LIKE '%".$busca."%') AND ";

	}
 }else{
foreach($buscas as $busca){
$qr .= "(nome LIKE '%".$busca."%' OR descri LIKE '%".$busca."%' OR tags LIKE '%".$busca."%') AND cidade='$cidade' AND ";
}

}

}

Ta aí o código para quem tiver uma possível dúvida no futuro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.