Ir para conteúdo
Fórum Script Brasil
  • 0

Sistema de Busca por filtros


Heltinhu

Pergunta

Olá galera tudo jóia.

Bom é seguinte estou num projeto de uma imobiliária e bolei um pequeno sistema de busca que até então me traz os devidos resultados porém resolvi muda-lo e acrescentar filtros.

EX: o internauta acessa o meu site e deseja procurar seu imóvel usando os filtros de buscas que fiz como FINALIDADE - TIPO DE IMÓVEL E CIDADE...

Formulário de filtragem da busca

<table>
<form action="procurar.php" method="GET">
<tr>
<td>Finalidade</td>
<td>Tipo de Imóvel</td>
<td>Cidade</td>
</tr>

<tr>
<td><select name="resultado">
    <option>Comprar </option>
    <option>Alugar </option>
</select>
</td>

<td><select name="resultado">
    <option>Casa</option>
    <option>Terreno</option>
    <option>Apartamento</option>
    <option>Rural</option>
</select>
</td>

<td><select name="resultado">
    <option>AQUI FICA TODAS AS MINHAS CIDADES CADASTRADAS EM MEU BANCO DE DADOS</option>
</select>
</td>

<td>
<input type="submit" value="Procurar" />
</td>
</tr>

</form>
</table>
SCRIPT QUE FAZ A BUSCA NO BANCO DE DADOS
<?php
//Conexão com o banco:  
include("../admin/configdb.php");

//Recupera resultados
    $sql="SELECT * FROM imoveis WHERE finalidade LIKE '%" . $busca . "%' OR tipo LIKE '%" . $busca . "%' OR cidade LIKE '%" . $busca . "%' order by valor LIMIT $inicio, $npp";
$res=@mysql_query($sql, $conexao) or die("Erro no MySQL:<br/>" . mysql_errno());

//exibe resultados encontrados no Banco de Dados
    while(list($codigo, $tipo, $area, $finalidade, $complemento, $endereço, $bairro, $cidade, $valor, $telefone, $informações, $foto, $lat, $lon)=mysql_fetch_array($res))
{

//MOSTRA OS RESULTADOS DENTRO DESTA TABELA HTML

echo "
apenas teste de resultados
$tipo - $area<br>
$finalidade<br>
$complemento<br>
$endereço<br>
$bairro<br>
$cidade<br>
$valor<br>
$telefone<br>
$informações";

}

mysql_free_result($res);

?>

Este meu código ele não filtra os valores marcados pelo internauta ele me mostra todos os resultados cadastrados

Então é isso como eu pego o valor de cada opção marcada para ser procurada no banco de dados.

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Exemplificando o que o ESerra disse...

<select name="resultado">
    <option value="comprar">Comprar</option>
    <option value="alugar">Alugar</option>
</select>
E
<select name="resultado">
    <option value="casa">Casa</option>
    <option value="terreno">Terreno</option>
    <option value="apartamento">Apartamento</option>
    <option value="rural">Rural</option>
</select>

O select das cidades terá de ser da mesma maneira. O valor enviado pelo formulário será sempre o setado em "value".

Editado por mJi
Link para o comentário
Compartilhar em outros sites

  • 0

Já tinha feito assim...

<tr>
<td>
<select name="resultado">
    <option value="comprar">Comprar </option>
    <option value="alugar">Alugar </option>
</select>
</td>

<td>
<select name="resultado">
    <option value"casa">Casa</option>
    <option value"terreno">Terreno</option>
    <option value"apartamento">Apartamento</option>
    <option value"rural">Rural</option>
</select>
</td>

<td>
<select name="resultado">
    <option value"cidade">Cidades </option>
</select>
</td>

Vamos supor que conforme os meus devidos selects o usuário queira COMPRAR uma CASA na CIDADE X.

Em meu banco de dados possue 20 anuncios cadastrados sendo 12cidade X e 8 cidade Y ele só pega os dados do ultimo select selecionado que no caso é o da minha cidade.

Só que quando eu marco as opções a serem buscadas em meu banco de dados ele busca todos os resultados referentes a cidade X os 12...

Se eu marco a cidade Y ele busca os 8 e não filtra os resultados que o internauta quer.

minha página que buscará os resultados se chama procurar.php

Logo ela fica assim quando mando procurar os resultados...

procurar.php?resultado=comprar&resultado=casa&resultado=CIDADE X

Link para o comentário
Compartilhar em outros sites

  • 0

bom olha só o que fiz ta quase funfando...

EU COLOQUEI UM NAME EM CADA SELECT DO FORMULÁRIO DE BUSCA ASSIM...

<table>
<form action="procurar.php" method="GET">
<tr>
<td>Finalidade</td>
<td>Tipo de Imóvel</td>
<td>Cidade</td>
</tr>

<tr><td><select name="finalidade">
          <option value="alugar">Alugar </option>
          <option value="comprar">Comprar </option>
</select>
</td>

<td><select name="tipo">
    <option value"casa">Casa</option>
    <option value"tipo">Terreno</option>
    <option value"tipo">Apartamento</option>
    <option value"rural">Rural</option>
</select>
</td>

<td><select name="cidade">
    <option value"todas_as_cidades">Todas as Cidade Cadastradas</option>
</select>
</td>

<td>
<input type="submit" value="procurar">
</td>

</tr>
</form>
</table>
SCRIPT PHP QUE FAZ AS BUSCAS EM MEU BANCO DE DADOS Ele está junto com um script que fiz para paginar os resultados encontrados OK...
<?php
    $qtdlinkslaterais=9;
    $npp=10;
//pega o número da página a mostrar
$page=(!empty($_GET['page'])&&is_numeric($_GET['page']))?$_GET['page']:1;

//Conexão com o banco:  
include("../admin/noticias/configdb.php");

$busca=(!empty($_GET['finalidade']))?mysql_real_escape_string($_GET['finalidade']):'';
$busca=(!empty($_GET['tipo']))?mysql_real_escape_string($_GET['tipo']):'';
$busca=(!empty($_GET['cidade']))?mysql_real_escape_string($_GET['cidade']):'';

    if($busca=='')
    if($busca=='')
    if($busca=='')

//consulta para pegar o total de resultados encontrados
    $sql="SELECT COUNT(*) AS total FROM imoveis WHERE finalidade LIKE '%" . $finalidade . "%' OR tipo LIKE '%" . $tipo . "%' OR cidade LIKE '%" . $cidade . "%' order by valor";
$res=@mysql_query($sql, $conexao) or die("Erro no MySQL:<br/>" . mysql_errno());
    $total=mysql_result($res, 0, 'total');
    mysql_free_result($res);
    //se não encontrou resultados
    if($total==0)
    {
        echo "<div style='width:500px; border-right:0px blue solid; color:gray;'>
        Desculpe-nos. Pode ter havido um engano não encontramos nada relacionado com sua busca <font color='red' size='5'><u>" . $finalidade . " </u></font>.</br> <a href='/'>Tente novamente.</a></div> ";
        exit();
}

//pega total de páginas arredondando o número para cima
    $pages=ceil($total/$npp);

//maior que o total de páginas
    $page=max(min($pages, $page), 1);
    $inicio=($page-1)*$npp;

//Recupera resultados
    $sql="SELECT * FROM imoveis WHERE finalidade LIKE '%" . $finalidade . "%' OR tipo LIKE '%" . $tipo . "%' OR cidade LIKE '%" . $cidade . "%' order by valor LIMIT $inicio, $npp";
$res=@mysql_query($sql, $conexao) or die("Erro no MySQL:<br/>" . mysql_errno());
    $pmos= min($total, ($inicio+1));
    $umos=min($total, ($inicio+$npp));

//exibe informações
    echo "<div style='text-align:center; font-size:16px; padding:5px; margin-bottom:15px; color:gray;'>Foram encontrados <b>" . $total . "</b> resultado(s) para - <b><u> " . $finalidade . " </b></u></div> ";


//exibe resultados encontrados no Banco de Dados
    while(list($codigo, $tipo, $area, $finalidade, $complemento, $endereço, $bairro, $cidade, $valor, $telefone, $informações, $foto, $lat, $lon)=mysql_fetch_array($res))
{

//MOSTRA OS RESULTADOS DENTRO DESTA TABELA HTML

echo "
$codigo<br>";

}
echo "<div style='width:300px; text-align:center;float:left; margin-left:190px;font-size:20px;border-left:0px red solid;border-right:0px red solid;'>";

mysql_free_result($res);

//exibe painel de navegação por páginas
    if($page>1)
{
    $panterior=$page-1;
    echo "<a href=\"?resultado=" . $busca . "&page=" . $panterior . "\"> Anterior </a>";}

    $latesq=($page-$qtdlinkslaterais<1)?1:$page-$qtdlinkslaterais;
    $latdir=($page+$qtdlinkslaterais>$pages)?$pages:$page+$qtdlinkslaterais;
    for($i=$latesq; $i<=$latdir; $i++)
    {
        if($i==$page)
        {
            echo "<font color='blue' size='6'><b>" . $i . " </b></font> ";
            continue;}

echo "<a href=\"?resultado=" . $busca . "&page=" . $i . "\"> " . $i . "</a> ";
    }
    if($page<$pages)

{
        $pproxima=$page+1;
        echo "<a href=\"?resultado=" . $busca . "&page=" . $pproxima . "\"> Pr&oacute;xima</a>";}
?></div>

Porém ainda não esta muito certo uma vez que quando eu marco as opções a serem buscadas em meu banco ele apenas filtra a opção cidade me mostrando todos os resultados da cidade escolhida.

Vejam o link de como fica após eu mandar pesquisar. ELE PEGA OS VALORES [GET] MARCADOS NO FORMULARIO POREM SÓ FILTRA AS CIDADES...

procurar.php?finalidade=comprar&tipo=casa&cidade=CIDADE_ESCOLHIDA.

Link para o comentário
Compartilhar em outros sites

  • 0

Tenho uma dúvida semelhante, então pra evitar criação de novas postagens irei postar aqui MSN.

----

Meu caso é o seguinte:

Eu tenho esse select:

$buscar = "SELECT * FROM informacao WHERE nome LIKE '%$pesquisa%' AND id_cat = '$idCategoria' ";

Vai na tabela "informacao" compara o campo "nome" com o solicitado na $pesquisa de acordo com o campo $idCategoria.

--

Minha pergunta é o seguente, como adicionar mais 1 campo da tabela para que ele use no filtro?

No meu caso tenho um campo para usuários ativos = 1 , e desabilitados = 0: gostaria que o select pegasse apenas o usuários ativos. Porém não sei como re-formula-lo.

Queria que minha busca ficasse assim: retornasse suários ativos na minha categoria escolhida e com o nome solicitado na $pesquisa.

---

Grato.

Link para o comentário
Compartilhar em outros sites

  • 0
Tenho uma dúvida semelhante, então pra evitar criação de novas postagens irei postar aqui MSN.

----

Meu caso é o seguinte:

Eu tenho esse select:

$buscar = "SELECT * FROM informacao WHERE nome LIKE '%$pesquisa%' AND id_cat = '$idCategoria' ";

Vai na tabela "informacao" compara o campo "nome" com o solicitado na $pesquisa de acordo com o campo $idCategoria.

--

Minha pergunta é o seguente, como adicionar mais 1 campo da tabela para que ele use no filtro?

No meu caso tenho um campo para usuários ativos = 1 , e desabilitados = 0: gostaria que o select pegasse apenas o usuários ativos. Porém não sei como re-formula-lo.

Queria que minha busca ficasse assim: retornasse suários ativos na minha categoria escolhida e com o nome solicitado na $pesquisa.

---

Grato.

$buscar = "SELECT * FROM informacao WHERE nome LIKE '%$pesquisa%' AND id_cat = '$idCategoria' AND nome_do_campo = '1'";

Link para o comentário
Compartilhar em outros sites

  • 0

Olá ESerra conforme me você disse eu retirei os ifs e troquei na query o OR por AND só que ai ele não me retorna os resultados

meu código ficou assim

<?php
    $qtdlinkslaterais=9;
    $npp=10;
//pega o número da página a mostrar
$page=(!empty($_GET['page'])&&is_numeric($_GET['page']))?$_GET['page']:1;

//Conexão com o banco:  
include("../admin/noticias/configdb.php");

//pega o valor do campo de busca
$busca=(!empty($_GET['finalidade']))?mysql_real_escape_string($_GET['finalidade']):'';

//consulta para pegar o total de resultados encontrados
    $sql="SELECT COUNT(*) AS total FROM imoveis WHERE finalidade LIKE '%" . $busca . "%' AND tipo LIKE '%" . $busca . "%' AND cidade LIKE '%" . $busca . "%' order by valor";
$res=@mysql_query($sql, $conexao) or die("Erro no MySQL:<br/>" . mysql_errno());
    $total=mysql_result($res, 0, 'total');
    mysql_free_result($res);
    //se não encontrou resultados
    if($total==0)
    {
        echo "<div style='width:500px; border-right:0px blue solid; color:gray;'>
        Desculpe-nos. Não foi encontrado nenhum imóvel.</br> <a href='./'>Voltar.</a></div> ";
        exit();
}
//pega total de páginas arredondando o número para cima
    $pages=ceil($total/$npp);

//maior que o total de páginas
    $page=max(min($pages, $page), 1);
    $inicio=($page-1)*$npp;
//Recupera resultados
    $sql="SELECT * FROM imoveis WHERE finalidade LIKE '%" . $busca . "%' AND tipo LIKE '%" . $busca . "%' AND cidade LIKE '%" . $busca . "%' order by valor LIMIT $inicio, $npp";
$res=@mysql_query($sql, $conexao) or die("Erro no MySQL:<br/>" . mysql_errno());
    $pmos= min($total, ($inicio+1));
    $umos=min($total, ($inicio+$npp));

//exibe resultados encontrados no Banco de Dados
    while(list($codigo, $tipo, $area, $finalidade, $complemento, $endereço, $bairro, $cidade, $valor, $telefone, $informações, $foto, $lat, $lon)=mysql_fetch_array($res))
{
//MOSTRA OS RESULTADOS DENTRO DESTA TABELA HTML

echo "
$finalidade - $tipo - $cidade<br>";

}
echo "<div style='width:300px; text-align:center;float:left; margin-left:190px;font-size:20px;border-left:0px red solid;border-right:0px red solid;'>";

mysql_free_result($res);

//exibe painel de navegação por páginas
    if($page>1)
{
    $panterior=$page-1;
    echo "<a href=\"?resultado=" . $busca . "&page=" . $panterior . "\"> Anterior </a>";}

    $latesq=($page-$qtdlinkslaterais<1)?1:$page-$qtdlinkslaterais;
    $latdir=($page+$qtdlinkslaterais>$pages)?$pages:$page+$qtdlinkslaterais;
    for($i=$latesq; $i<=$latdir; $i++)
    {
        if($i==$page)
        {
            echo "<font color='blue' size='6'><b>" . $i . " </b></font> ";
            continue;}

echo "<a href=\"?resultado=" . $busca . "&page=" . $i . "\"> " . $i . "</a> ";
    }
    if($page<$pages)

{
        $pproxima=$page+1;
        echo "<a href=\"?resultado=" . $busca . "&page=" . $pproxima . "\"> Pr&oacute;xima</a>";}
?></div>

Bom como viu se eu deixar o código deste jeito com o OR trocado por AND ele não da nehum erro porem me retorna a mensagem de que não foi encontrado nenhum resultado para a pesquisa

já com o OR na query ele me retorna os resultados obtidos somente do primeiro <select> da finalidade que é ALUGAR OU COMPRAR o restante ele não filtra - o tipo de imóvel (casa, apto ou terreno) e nem a cidade - ficando assim..

procurar.php?finalidade=alugar&tipo=Casa&cidade=Campo+Grande+-+MS

Se alguém tiver um modelo pode ser bem simplão mesmo rsrsrsrs

Não custa nada perguntar né rsrsrsr

Editado por Heltinhu
Link para o comentário
Compartilhar em outros sites

  • 0
$buscar = "SELECT * FROM informacao WHERE nome LIKE '%$pesquisa%' AND id_cat = '$idCategoria' AND nome_do_campo = '1'";

Nossa, não imaginava q pudesse ser tão simples e eu aqui quebrando cabeça no manual do PHP.

Eu estava tentado até fazer um select dentro de outro.

--

Achei que a "AND" só poderia ser utilizado uma única vez no select.

Obrigado. ESerra.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá pessoal, assim como o @ESerra, para evitar criação de novos post, estou com esse mesmo problema!

Ja pesquisei em vários lugares sem sucesso e tentei de diversas formas que vi nas pesquisas que fiz!

Eu tenho um form de busca que me traz 3 resultados diferentes, até ai td bem! O que eu gostaria de fazer, era separar esses resultados por cidades, que estão numa select! 

Código do Formulário

 

 <?php
	 echo "<form action= buscar.php  method = POST >";
     echo "<input id= Busca  name= Pesq  type= text class= g placeholder ='Empresa, Ramo de Atividade,Serviço ou Negócio'>";
      
       
	    echo "<select name= Cidade>";
        echo "<option value= Belo Horizonte> Belo Horizonte </option>";
        echo "<option value= Vitória> Vitória </option>";
        echo "<option value= Palmas > Palmas </option>";
        echo "<option value= Feira de Santana >Feira de Santana</option>";
        echo "<option value= Teresina >Teresina</option>";
       
        echo "</select>";
	
        echo "<input type= submit value= Pesquisar >";
    
        echo"</form>";
 ?>  

Código de Consulta

 

<?php
	
	$host = "localhost";
    $usuario = "root";
    $senha = ""; 
    $bd = "bd_grtx";	
 	$con = mysqli_connect($host , $usuario, $senha , $bd);
	$Pesq = $_POST['Pesq'];

	
	$sql = mysqli_query($con,"SELECT NomeEmpresa, Ender, Tel, Tel2, Tel3, Cid  FROM empresas_grtx WHERE NomeEmpresa Like '%".$Pesq."%' OR ( TextAre LIKE '%".$Pesq."%' OR RAtiv LIKE '%".$Pesq."%')");
	
	$row = mysqli_num_rows($sql);
	
	if ($row > 0) {
		while ($linha = mysqli_fetch_array($sql)) {
			$NomeEmpresa = $linha ['NomeEmpresa'];
			$Ender = $linha ['Ender'];
			$Tel = $linha ['Tel'];
			$Tel2 = $linha ['Tel2'];
			$Tel3 = $linha ['Tel3'];			
			$Cid = $linha ['Cid'];
				
				echo "<br/>";
				echo "<strong><tr><td></td></tr></strong>".@$NomeEmpresa;
				echo "<br/>";
				echo "<strong></strong>".@$Ender;
				echo "<br/>";
				echo "<strong></strong>".@$Tel;echo"&nbsp;&nbsp;";
				echo "<strong></strong>".@$Tel2;echo"&nbsp;&nbsp;";
				echo "<strong></strong>".@$Tel3;echo"&nbsp;&nbsp;";
				echo "<br/>";
				echo "<strong></strong>".@$RAtiv;
				echo "<br/>";
				echo "<strong></strong>".@$Cid;
				echo "<br/></br>";				
		}
	} 		
		else{
			echo"Desculpe , pesquisa não encontrada";		
		}
?>

Gostaria de saber se é preciso fazer mais uma variável , ou acrescentar algum operador OR ou AND! Ja tentei várias coisas e não deu certo.

Desde já , agradeço!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...