Ir ao conteúdo

Posts recomendados

Postado

Boa tarde, eu to desenvolvendo um site de imobiliária e gostaria de colocar filtros na busca do imóvel, ex: quant. quartos, quant. banheiros, localidade, tipo e assim por diante, são em torno de 15 filtros, o meu maior dilema é como fazer isso, os campos de filtros não são obrigatórios e eu não tenho um submit de cada item, isso significa que após o usuário digitar no input ou marcar algum select a filtragem aconteceria, eu tenho duas tabelas uma de imóvel com os dados e outra de arquivo onde tem o nome da imagem.

Pensei em fazer select para cada tipo de situação possível no filtro mas eu não sei se essa é a melhor forma de se tratar isso, se alguém puder me dar um luz eu agradeceria muito, abaixo eu coloquei a imagem do filtro pra terem uma noção de como funciona.

 

filtro.png

  • Moderador
Postado

@Rebeca Julia Bronzatti

Podes colocar condições no SQL e/ou usar o "OR " na consulta.

Pois o OR, considera pelo menos uma das instruções.

 

Uma vez, eu tive esse mesmo problema.. e foi resolvido desta forma:

 

SELECT foto.idImovel
      ,foto.foto FROM foto
INNER JOIN imovel ON foto.idImovel = imovel.idImovel
INNER JOIN tipo ON imovel.idTipo = tipo.idTipo
INNER JOIN bairro ON imovel.idBairro = bairro.idBairro
WHERE TRUE
   AND IF( '$tipo' != 0 , imovel.idTipo = '$tipo' , TRUE ) 
   AND IF( '$dormitorio' != 0 , imovel.idDormitorio = '$dormitorio' , TRUE ) 
   AND IF( '$bc' != 0 , imovel.idBairro = '$bc' , TRUE ) 
GROUP BY foto.idImovel

Veja, na minha instrução, eu busco dados de 3 tabelas diferentes e faço uma condição, onde se Verdadeiro,  e SE o tipo de imóvel for selecionado ele mostra  o resultado..

 

Basicamente acredito que é isso que você tem quer fazer. Ponha uma condição para cada filtro.

Sim, a instrução vai ficar grande, mas pode resolver... melhor do que fazer uma consulta para cada.

 

Lembrando, que esse código é só um exemplo do que EU usei, você precisa entender como ele funciona e implementar no seu código.

 

PS: meu filtro era bem mais simples do que esse.. apenas  3 escolhas

 

  • Moderador
Postado

@Rebeca Julia Bronzatti Sem um botão de submit, você é obrigada a usar  os eventos de change dos campos select e os clicks nos botões de suites e quartos.. 

Nos eventos, você usa jquery e ajax para enviar estes dados ao PHP!

Postado

@DiF consegue me dar uma luz com o change, eu consegui recuperar o valor de um input mas eu não faço ideia de como pegar um evento do select, eu dei uma adaptada do meu input, mas ele não funcionou, desculpa a pergunta ser meio besta e talvez seja até obvia mas sou bem leiga quanto a ajax e jquery

$("#select_idade").change(function(){
               $.ajax({
                url: "busca_banco.php", //Página que fará a busca no banco de dados
                type: 'POST',
                data: { filtro: $(this).val() } //Variáveis postadas para o arquivo definido
                success:function(data)
                    {
                       $("#resultados").html(data);
                    },error:function(data)
                    {
                       $("#resultados").html("Houve um erro!");
                    }
    });
    });
<select name="idade" id="select_idade">
            <option value="19" selected>19</option>
            <option value="18">18</option>
        </select>

 

  • Moderador
Postado

@Rebeca Julia Bronzatti Olá.

 

Seu método de ajax, não está errado em partes. Esse método é antigo.

 

Não lembro em qual versão, mudou.  A estrutura atual é assim:

 

$.ajax({

}).done().fail()

};

Para pegar um valor de um select você faz assim:

$(this).find('option:selected').val();

Mas repare que ali na sua imagem do primeiro post, você tem 3 selects diferentes. No seu código, do post #05, você define o change apenas para um. 

 

Nesse caso, você deve generalizar o elemento. Assim ele vai pegar os valores do select independente de qual mexeu.

 

Então seu código seria algo assim:

$("select").change(function(){
  
     //Pega o valor do option selecionado, do select "atual"
     let valor = $(this).find('option:selected').val();


     $.ajax({
         url: "busca_banco.php", //URL
         type: 'HTML',  //Tipo HTML
         method: 'POST', //Método POST
         data: { filtro: valor } 
     
     }).done(function(data){
          $("#resultados").html(data);
     }).fail(function(data){
           $("#resultados").html("Houve um erro!");
     });
     
});

 

Postado

Acabei conseguindo fazer o evento change assim que mandei a pergunta então só ignora fazendo um favor, agora to em outro problema (pra variar kkkk), eu não consigo executar uma busca com os dois eventos juntos, se eu executar com um ele até funciona mas da que o outro não está definido, o que pra mim não faz sentido, caso eu preencha os dois ele ainda executa somente o último campo marcado 

 <body>
        <form method="POST" id="form-pesquisa" action="">
        <input type="text" id="pesquisa" style="width: 35%; height: 40px; text-align: center; font-size: 25px;"/>
        <select name="idade" id="select_idade">
            <option value="19" selected>19</option>
            <option value="18">18</option>
        </select>
        </form>
        <div class="resultado" style="border: 1px solid #222; width: 35%; margin-top: 30px; height: 30px;">
        </div>
   </body>
$(function(){
    $("#select_idade").change(function(){
               var select_idade = $(this).val();
               if(select_idade != ''){
                   var select = {
                       idade : select_idade
                   }
                   $.post('busca_banco.php', select, function(retorna){
                       $(".resultado").html(retorna);
                   });
               }else{
                   $(".resultado").html('');
               }
    });
    
    //Pesquisar sem refresh na página
    $("#pesquisa").keyup(function(){
        
        var pesquisa = $(this).val();
        
        //Verifica se há algo digitado

        if(pesquisa != ''){
            var dados = {
                palavra : pesquisa
            }           
   
        $.post('busca_banco.php', dados, function(retorna){
           //Mostra dentro da div os resultados obtidos
            $(".resultado").html(retorna);
        });
    }else{
        $(".resultado").html('');
    }
    });
});
$idade = $_POST['idade'];

$busca = $_POST['palavra'];

$busca_select = "SELECT * FROM teste WHERE TRUE
    AND IF('$idade' != 0, TRUE)
    AND IF('$busca' !=0, TRUE)";
$result_busca = mysqli_query($cnn, $busca_select);
if(mysqli_num_rows($result_busca)<=0){
    echo '<div style = "width:80%; overflow:auto; border-bottom:1px solid #333">
        Não existe resultado
        </div>
        ';
}else{
    while ($rows = mysqli_fetch_assoc($result_busca)){
        echo '<div style = "width:35%; overflow:auto; border-bottom:1px solid #333">
        '.$rows['idade'].' - '.$rows['palavra'].' <br>
        </div>
        ';
    }
}

 

  • Moderador
Postado
38 minutos atrás, Rebeca Julia Bronzatti disse:

desculpa a pergunta ser meio besta e talvez seja até obvia mas sou bem leiga quanto

Não se desculpe. Nenhuma pergunta é besta, quando não se tem conhecimento. Jamais sinta vergonha de perguntar!

:thumbsup:

  • Amei 1
  • mês depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!