MarceloZ 2 Denunciar post Postado Janeiro 12, 2015 Carissimos Tenho um sistema de busca que possui 4 campos de seleção finalidade , tipo , cidade e bairro na query se a gente coloca ... WHERE id_finalidade = '$finalidade' AND .... o resultado depende de todos os 4 campos serem preenchidos se a gente coloca OR ele lista tudo o que tiver naquela em uma seleção . Eu quero saber como faço uma busca independente se preencho 1 valor ou 2 valores e obter o resultado desejado Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Janeiro 12, 2015 Não entendi sua dúvida. Por que o OR não resolve seu problema? Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 12, 2015 Creio que ele fala de buscar N strings em M campos. Compartilhar este post Link para o post Compartilhar em outros sites
MarceloZ 2 Denunciar post Postado Janeiro 13, 2015 Eu quero ignorar os campos que não forem preenchidos e filtrar o resultado apenas nos campos selecionados o OR ele não obedece o filtro e ele lista tudo. então penso eu que teria que criar uma condição tipo para ignorar o que não foi preenchido e realizar o fitro . a minha duvida é como eu ignoro o que não foi preenchido tipo : if ($variavel == null)..... eu li algo com array query condicional mas não entendi direito $where = array();if( isset( $_POST['estado'] ) && ! empty( $_POST['estado'] ) ) {$where[] = sprintf( "id_estado = '%d'", $_POST['estado'] );}$query = 'SELECT * FROM cadastro';if( count( $where ) > 0 ) {$query .= ' WHERE ' . implode( ' AND ', $where ); Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Janeiro 13, 2015 Só concatenar a string de acordo com o que foi preenchido. if(isset($_POST['estado'])) { $consulta[] = "id_estado = '".$_POST['estado']."'"; } if(isset($_POST['id_finalidade'])) { $consulta[] = "id_finalidade"; } for ($i = 0; $i < count($consulta); $i++) { $operador = ($i == 0) ? "WHERE": "AND"; $consultaString .= $operador." ".$consulta[$i]; } $query = "SELECT * FROM cadastro".$consultaString; Compartilhar este post Link para o post Compartilhar em outros sites
MarceloZ 2 Denunciar post Postado Janeiro 13, 2015 Huumm , deu erro não sei identificar se o erro esta no concatenar string mas aparece pra mim que onde executa a while ... Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in 614 while($texto = mysql_fetch_assoc($query)) { :closedeyes: Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Janeiro 13, 2015 Como ficou a consulta gerada? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 13, 2015 http://wbruno.com.br/php/formulario-de-busca-filtro-dinamico-em-mysql-php/ Compartilhar este post Link para o post Compartilhar em outros sites
MarceloZ 2 Denunciar post Postado Janeiro 13, 2015 ficou vazia!! Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Janeiro 13, 2015 Copie o código atualizado para a gente :dormindo: Compartilhar este post Link para o post Compartilhar em outros sites
MarceloZ 2 Denunciar post Postado Janeiro 13, 2015 if(isset($_POST['buscar'])){ $finalidade = $_POST['finalidade']; $tipo = $_POST['tipo']; $cidade = $_POST['cidade']; $bairro = $_POST['bairro']; if(isset($finalidade)) { $consulta[] = "id_finalidade = '$finalidade'"; } if(isset($tipo)) { $consulta[] = "id_tipo = '$tipo'"; } if(isset($cidade)) { $consulta[] = "id_cidade = '$cidade'"; } if(isset($bairro)) { $consulta[] = "bairro = '$bairro'"; } for ($i = 0; $i < count($consulta); $i++) { $operador = ($i == 0) ? "WHERE": "AND"; $consultaString .= $operador." ".$consulta[$i]; } $query = "SELECT * FROM tb_imoveis".$consultaString; if ($query == '') { echo '<div id="alert">Nenhum resultado!</div>'; } else { while($texto = mysql_fetch_assoc($query)){ $id = $texto['id']; $finalidade2 = $texto['id_finalidade']; $tipo2 = $texto['id_tipo']; $cidade2 = $texto['id_cidade']; $bairro2 = $texto['bairro']; .... Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 13, 2015 para fins de debug: $query = "SELECT * FROM tb_imoveis".$consultaString; echo $query; Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Janeiro 13, 2015 faça isso que o @William falou, que é basicamente o que sugeri no post #7. Cole o resultado aqui para avaliarmos a sintaxe, mas acredito ja ver uma coisa. Você copiou meu exemplo e sequer mexeu :dormindo: Troque: $query = "SELECT * FROM tb_imoveis".$consultaString; Por: $query = "SELECT * FROM tb_imoveis ".$consultaString; A diferença está no espaço antes da concatenação. Provavelmente o WHERE está colado em tb_imoveis, dando pau na consulta. Compartilhar este post Link para o post Compartilhar em outros sites
MarceloZ 2 Denunciar post Postado Janeiro 13, 2015 o resultado é SELECT * FROM tb_imoveisWHERE id_finalidade = '1'AND id_tipo = '0'AND id_cidade = '0'AND bairro = '0' Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Janeiro 13, 2015 Meu raciocinio estava certo. Veja a solução dada no meu post #13. Compartilhar este post Link para o post Compartilhar em outros sites
MarceloZ 2 Denunciar post Postado Janeiro 13, 2015 sim , eu fiz isso mas a consulta retorna vazia! :S Eu troquei o AND por OR SELECT * FROM tb_imoveis WHERE id_finalidade = '1' OR id_tipo = '0' OR id_cidade = '0' OR bairro = '0' Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Janeiro 13, 2015 Mas qual o intuito? Você quer que seja OR? Finalidade 1 OU tipo 0 OU cidade 0 ou cidade 0? Mas como pode ver, tem algo errado na construção... não era pra estar mostrando o tipo, nem cidade nem bairro na consulta. Ao invés de isset($_POST['blablabla']), troque por empty. Porque mesmo vazio, a variável pode estar setada. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Janeiro 13, 2015 você não executou a query. $sql = "SELECT * FROM tb_imoveis ".$consultaString; $query = mysql_query($sql) or die(mysql_error(); while($texto = mysql_fetch_assoc($query)){E os códigos não estão batendo, vc tá mostrando um erro com _array, e o código q vc postou está com _assoc Compartilhar este post Link para o post Compartilhar em outros sites
MarceloZ 2 Denunciar post Postado Janeiro 13, 2015 Então ele esta funcionando exatamente como antes. não obedece o filtro. se seleciono , finalidade => venda resultado => lista todas as vendas se seleciono finalidade => venda , tipo => casa resultado => lista todas as vendas de casa e apartamento. Eu usei OR porque se uso AND o valor da query tem que ser absoluto se não o resultado vem vazio. finalidade = 1 E tipo = 0 .. se eu colocar assim if( isset( $_POST['finalidade'] ) && ! empty( $_POST['finalidade'] ) ) { Uhu consegui era isso mesmo if(isset($finalidade) && ! empty($finalidade) ) Obrigado Maykel-ctba e William Bruno Compartilhar este post Link para o post Compartilhar em outros sites