Jump to content
Fórum Script Brasil
  • 0

Sistema de Busca por filtros


Heltinhu

Question

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 to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 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".

Edited by mJi
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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

Edited by Heltinhu
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...