Ir para conteúdo
Fórum Script Brasil
  • 0

Select no banco de dados com multiplas opções


CoderV

Pergunta

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

Editado por CoderV
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...