CoderV Posted April 7, 2012 Report Share Posted April 7, 2012 (edited) Bom espero estar postando na area correta desculpe caso não esteja pois sou novo no fórum.Bom estou desenvolvendo um website e estou com um problema não sou experte em php nem nada me viro como posso.Mas a questão é a seguinte o formulário é uma busca de veiculos está abaixo o código da index onde econtra-se o formulário:<form action="" method="get" name="buscaRapida"> <div class="block-3 ident-bot-1"> <p> <label>CATEGORIAS</label> <select name="cat"> <!--aqui--> <?php $comboCategorias = new Requisitar(); $comboCategorias->comboHtml('categorias','categoria') ?> </select> </p> <p> <label>MARCAS</label> <select name="marc"> <?php $comboMarcas = new Requisitar(); $comboMarcas->comboHtml('marcas', 'marca') ?> </select> </p> <p> <label>VEICULO</label> <input type="text" name="veiculo" /> <label>ANO MINIMO</label> <input type="text" name="anoMin" /> <label>ANO MÁXIMO</label> <input type="text" name="anoMax" /> <label>VALOR MINIMO</label> <input type="text" name="valMin" /> <label>VALOR MÁXIMO</label> <input type="text" name="valMax" /> <input type="hidden"name="buscar" value="1" /> </p> </div> <p><input class="button" value="BUSCAR" type="submit" ></p> </form> Bom este formulário envia para a própria página que em determinado ponto chama uma classe e um método, abaixo o código da classe: <?php class Anuncios { public function buscaRapida($cat,$marc,$veiculo,$anoMin,$anoMax,$valMin,$valMax,$buscar){ if($buscar != ""){ if($cat == "" || $marc != "" || $veiculo != "" || $anoMax != "" || $anoMin!= "" || $valMax != "" || $valMin != ""){ echo 'Você deve especificar no mínimo um valor na pesquisa <br />'; echo $cat." ".$marc." ".$veiculo." ".$anoMin." ".$anoMax." ".$valMin." ".$valMax; return; } else { if($cat != "") { $catQuery = " `categoria` = $cat and "; } else { $catQuery = ""; } if($marc != "") { $marcQuery = " `marca` = 10 and"; } else { $marcQuery = ""; } if($veiculo != "") { $veicQuery = " `veiculo` like '%$veicQuery%' and "; } else { $veicQuery = ""; } if($anoMin != "" || $anoMin != "") { $anoQuery = " (`ano` >= $anoMin or `ano` <=$anoMax) and "; } else { $anoQuery = ""; } if($valMin != "" || $valMax != "") { } else { $valQuery = " (`valor` >= $valMin or `valor` <= $valMax) ";$valQuery = ""; } $query = "SELECT * FROM anuncios WHERE"; echo $query."<br />"; $queryAdd = $query + $catQuery + $marcQuery + $veicQuery + $anoQuery + $valQuery; echo $queryAdd."<br />"; $execQuery = mysql_query($queryAdd); var_dump($execQuery); } } else { return; } } } ?>Bom ele não está retornando nada talvez seja alguma pequena coisa mas não consegui enxergar ainda.Se alguém puder dar uma luz sobre o erro me ajudara um monte.Desde já agradeço Edited April 7, 2012 by CoderV Quote Link to comment Share on other sites More sharing options...
0 Peter Link Posted April 8, 2012 Report Share Posted April 8, 2012 Cara não sei se entendi direto mas você já chego a verificar se os ifs estao certo ?e como são varios if você quer q retorne varios resultado não é? ?tenta bota o return fora do else e retorna como array tudos os valores do ifexreturn array($veicQuery,$catQuery);ou concatena tudo as variavel e retorna uma só. Quote Link to comment Share on other sites More sharing options...
0 CoderV Posted April 8, 2012 Author Report Share Posted April 8, 2012 Na verdade eu queria que o select se moldase conforme os campos que o usuário seleciona ex:O usuário é obrigado a selecionar ao menos um campo pra evitar um full scan na tabela caso tenha muitos registros, mas casoo usuário busque por exemplo um carro da categoria 9, marca 10, veiculo com nome de civic ele irá buscar com esses 3 parametros e automaticamente monte o select.Eu alterei o código da seguinte forma mas o mesmo não funciona abaixo o código<?php class Anuncios { public function buscaRapida($cat,$marc,$veiculo,$anoMin,$anoMax,$valMin,$valMax,$buscar){ if($buscar != ""){ // verifica se o formulário está sendo enviado para evitar variáveis indefinidas $query = 'SELECT * FROM `anuncios` WHERE '; //concatena a variável $query com no minimo um parametro do formulário $queryAdd = $query . $cat == null ? + $cat = '' : + $cat = " `categoria` = $cat and ". $marc == null ? + $marc = '' : +$marc = " `marca` = $marc and "; $veiculo == null ? $veiculo = '' : $veiculo = " veiculo` like '%$veicQuery%' and "; $anoMin == null || $anoMax == null ? '' : " (`valor` >= $anoMin or `ano` <= $anoMax) and ". $valMin == null || $valmax == null ? '' : " (`valor` >= $valMin or `valor` <= $valMax) "; echo $queryAdd."<br />"; $execQuery = mysql_query($queryAdd); //var_dump($execQuery); } else { return; } } } ?>O código acima deveria montar o if conforme os campos fossem preenchidos.Ele não deverá retornar nada pelo método somente imprimira os valores da busca.Para ter uma idéia melhor o fórmulário é bem parecido com o deste site:http://www.webmotors.com.br/Já tentei de tudo mas não funciona de forma alguma. Quote Link to comment Share on other sites More sharing options...
0 JaguA Posted April 9, 2012 Report Share Posted April 9, 2012 monta If's para verificar se o campo de pesquisa é vazio.. se for ele ignora e passa para o proximo se não for ele concatena a variavel ao final de tudo ele pega essa variavel e joga no select ... caso tudo for null, ele mostraria uma mensagem de erro...exemploIf (campo1 = '') { // nada acontece } else { $variavel = WHERE campo1 = $campo1 } If (campo2 = '') { // nada acontece } else { $variavel = WHERE campo2 = $campo2 } bem so um exemplo, então concatena elas numa unica variavel e depois monta no select tpw "SELECT * FROM tabela $variavel"; Quote Link to comment Share on other sites More sharing options...
0 CoderV Posted April 9, 2012 Author Report Share Posted April 9, 2012 monta If's para verificar se o campo de pesquisa é vazio.. se for ele ignora e passa para o proximo se não for ele concatena a variavel ao final de tudo ele pega essa variavel e joga no select ... caso tudo for null, ele mostraria uma mensagem de erro...exemploIf (campo1 = '') { // nada acontece } else { $variavel = WHERE campo1 = $campo1 } If (campo2 = '') { // nada acontece } else { $variavel = WHERE campo2 = $campo2 } bem so um exemplo, então concatena elas numa unica variavel e depois monta no select tpw "SELECT * FROM tabela $variavel"; Eu montei da seguinte forma que creio eu estar no caminho certo. Primeiro eu verifico se todos os campos estão vazios de uma forma dinâmica ou seja ele verifica cada um indempendente e conta quantos foram preenchido o requisito é 1 campo para poder efetuar e pesquisa. Depois crio os campos com pedaços desse select caso não seja nulo o campo. e no final concateno as variáveis mas o problema é no and do sql, não consigo pensar como fazer para ele inserir o and conforme precise pois tem muitas condições a serem analizadas. Eu consegui fazer concatenar com o and mas se muda a ordem ele se perde abaixo o novo código da classe. Será que estou indo pelo caminho certo? ou existe uma forma mais facil de fazer isso ou mais funcional. grato desde já. <?php class Anuncios { public function buscaRapida($cat,$marc,$veiculo,$anoMin,$anoMax,$valMin,$valMax,$buscar){ if($buscar != ""){ $i = 0; $cat <> 0 ? $i = 1 : $i = $i; $marc <> 0 ? $i++ : $i = $i; $veiculo <> null ? $i++ : $i = $i; $anoMin <> null ? $i++ : $i = $i; $anoMax <> null ? $i++ : $i = $i; $valMin <> null ? $i++ : $i = $i; $valMax <> null ? $i++ : $i = $i; if($i>=1){ echo ''; }else{ echo 'Você precisa especificar ao menos um campo na pesquisa'; return; } if($cat == 0){$campoCat = '';}else{$campoCat = "`categoria` = $cat";} if($marc == 0){$campoMarc = '';}else{$campoMarc = " `marca` = $marc ";} if($veiculo == null){$campoVeiculo = '';}else{$campoVeiculo = " veiculo` like '%$veicQuery%' ";} if($anoMin == null || $anoMax == null){ $camposAno = ''; }else{ $camposAno = " (`ano` >= $anoMin or `ano` <= $anoMax) "; } if($valMin == null || $valMax == null){ $camposVal = ''; }else{ $camposVal = " (`valor` >= $valMin or `valor` <= $valMax) "; } $campoMarc <> '' ? $andMarc = ' and ' : $andMarc = ''; $campoVeiculo <> '' ? $andVeiculo = ' and ' : $andVeiculo = ''; $camposAno <> '' ? $andAno = ' and ' : $andAno = ''; $query = 'SELECT * FROM `anuncios` WHERE '; $queryFinal = $query. $campoCat.$andCat.$andMarc. $campoMarc.$andVeiculo. $andMarcF.$campoVeiculo.$andAno. $andMarcF.$camposAno. $camposVal; echo $queryFinal; } else { return; } } } ?> Quote Link to comment Share on other sites More sharing options...
0 CoderV Posted April 9, 2012 Author Report Share Posted April 9, 2012 Consegui resolver o problema agora está funcionando 100% só precisei adicinaro uma verificação para mais um and agora funciona todos indempendentes e dinamicos.Obrigado a todos que ajudaram. Quote Link to comment Share on other sites More sharing options...
0 CoderV Posted April 9, 2012 Author Report Share Posted April 9, 2012 Caso alguém tenha o mesmo problema abaixo está a classe e etc pra ter como exemplo.Ele monta o select conforme o usuário digite nos campos.Como eu disse no inicio não sou experte em php e essa foi a solução que encontrei para resolver o problematalvez com um framework fosse mais facil ou até alguma fnção u uma forma diferente pudese ser feito.Tem alguns comentários no meio e também alguns debugs hehe<?php class Anuncios { /* * Método para busca rápida por form * Parametros usados: * $cat = categoria do veiculo * $marc = marca do veiculo * $veiculo = veiculo * $anoMin = ano minimo do veiculo * $anomax = ano máximo do veiculo * $valMin = valor minimo do veiculo * $valMax valor máximo do veiculo * $buscar valor verdadeiro caso formulário seja enviado * SELECT * FROM `anuncios` WHERE ); */ public function buscaRapida($cat,$marc,$veiculo,$anoMin,$anoMax,$valMin,$valMax,$buscar){ if($buscar != ""){ /* * Inicia verificação dos campos nulos onde cada campo preenchido * soma 1 a variável $i */ $i = 0; $cat <> 0 ? $i = 1 : $i = $i; $marc <> 0 ? $i++ : $i = $i; $veiculo <> null ? $i++ : $i = $i; $anoMin <> null ? $i++ : $i = $i; $anoMax <> null ? $i++ : $i = $i; $valMin <> null ? $i++ : $i = $i; $valMax <> null ? $i++ : $i = $i; /* * Verifica a variável $i caso seja menor que 1 então nenhum campo foi preenchido * e retorna. * verificação feita para evitar full scan na tabela. */ if($i>=1){ echo ''; }else{ echo 'Você precisa especificar ao menos um campo na pesquisa'; return; } if($cat == 0){$campoCat = '';}else{$campoCat = "categoria = $cat";} if($marc == 0){$campoMarc = '';}else{$campoMarc = " marca = $marc ";} if($veiculo == null){$campoVeiculo = '';}else{$campoVeiculo = " veiculo like '%$veiculo%' ";} if($anoMin == null || $anoMax == null){ echo "<span style='background-color:#d4d4d4;padding:3px;;display:Block;'>Para pesquisar pelo ano do veiculo é preciso especificar<br /> o ano minimo e máximo do veiculo a busca ignorou os campos Ano da busca</span><br />"; $camposAno = ''; }else{ $camposAno = " (ano >= $anoMin or ano <= $anoMax) "; } if($valMin == null || $valMax == null){ echo "<span style='background-color:#d4d4d4;display:Block; padding:3px;'>Para pesquisar pelo valor do veiculo é preciso especificar<br /> o valor minimo e máximo do veiculo a busca ignorou os campos valores </span><br />"; $camposVal = ''; }else{ $camposVal = " (valor >= $valMin or valor <= $valMax) "; } $campoMarc <> '' ? $andMarc = ' and ' : $andMarc = ''; $campoVeiculo <> '' ? $andVeiculo = ' and ' : $andVeiculo = ''; $camposAno <> '' ? $andAno = ' and ' : $andAno = ''; $camposVal <> '' ? $andVal = ' and ' : $andVal = ''; $query = 'SELECT * FROM anuncios WHERE '; $queryFinal = $query. $campoCat.$andCat.$andMarc. $campoMarc.$andVeiculo. $campoVeiculo.$andAno. $camposAno.$andVal. $camposVal; echo $queryFinal; $queryAdd = $query + $cat == null ? $cat = '' : + $cat = " `categoria` = $cat and ". $marc == null ? $marc = '' : +$marc = " `marca` = $marc and "; $veiculo == null ? $veiculo = '' : $veiculo = " veiculo` like '%$veicQuery%' and "; $anoMin == null || $anoMax == null ? '' : " (`valor` >= $anoMin or `ano` <= $anoMax) and ". $valMin == null || $valMax == null ? '' : " (`valor` >= $valMin or `valor` <= $valMax) "; echo $queryAdd."<br />"; $execQuery = mysql_query($queryAdd); } else { return; } } } ?> Quote Link to comment Share on other sites More sharing options...
Question
CoderV
Bom espero estar postando na area correta desculpe caso não esteja pois sou novo no fórum.
Bom estou desenvolvendo um website e estou com um problema não sou experte em php nem nada me viro como posso.
Mas a questão é a seguinte o formulário é uma busca de veiculos está abaixo o código da index onde econtra-se o formulário:
Bom este formulário envia para a própria página que em determinado ponto chama uma classe e um método, abaixo o código da classe:Bom ele não está retornando nada talvez seja alguma pequena coisa mas não consegui enxergar ainda.
Se alguém puder dar uma luz sobre o erro me ajudara um monte.
Desde já agradeço
Edited by CoderVLink to comment
Share on other sites
6 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.