Jump to content
Fórum Script Brasil
  • 0

Select no banco de dados com multiplas opções


CoderV

Question

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

6 answers to this question

Recommended Posts

  • 0

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 if

ex

return array($veicQuery,$catQuery);

ou concatena tudo as variavel e retorna uma só.

Link to comment
Share on other sites

  • 0

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 caso

o 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.

Link to comment
Share on other sites

  • 0

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

exemplo

If (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";

Link to comment
Share on other sites

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

exemplo

If (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;
        }
    }
}
?>

Link to comment
Share on other sites

  • 0

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.

Link to comment
Share on other sites

  • 0

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 problema

talvez 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;
        }
    }
}
?>

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