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

(Resolvido) filtro com combobox


biza

Pergunta

imagina que tenho 4 combobox e somente selecciono uma eu gostava de ver listado tudo que fosse a respeito dessa combo, conforme fosse seleccionando as combos e refinando parâmetros gostava que a query fosse filtrando de maneira a ir ao detalhe do produto . Alguém me ajuda por favor

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

fit , imagina que tens um stand de carros usados , e o utilizador tem combobox's, para servir de filtro as suas procuras.

Ele selecciona categorias, e nas categorias estão carros ligeiros ao clicar num botao de procura ele lista todos os carros que são ligeiros, agora imagina , que ele refina a procura e quer, categoria ligeiro, marca BMW, e procurar aparecem todos os carros dessa categoria e bmw's...

Eu gostaria de saber como fazer para ele me passar esses valores todos para uma pagina e em caso de não seleccionar uma combo ele mostrar os valores afectos as combos seleccionadas. fica o exemplo:img.png

Link para o comentário
Compartilhar em outros sites

  • 0

biza,

Acho que está tentando fazer uma query dinâmica, onde o utilizador irá passar a quantidade de parametros que quiser, ou seja, ele pode escolher qualquer combo.

segue abaixo um exmplo. agora basta adaptar a modelagem do seu banco.

faça um teste se seria isso mesmo.

<?php


//Recupera os dados do form
$idCagegoria   = $_GET['idCategoria'];
$idMarca       = $_GET['idMarca'];
$idModelo      = $_GET['idModelo'];
$idCombustivel = $_GET['idCombustivel'];

//inicia a variavel $where
$where  = 'WHERE CARROS.ID > 0';

//incrementa a variavel $where conforme o preenchimento dos dados no form
$where .= (isset($idCagegoria))  ? ' AND idCategoria = $idCagegoria'     : '';
$where .= (isset($idMarca))      ? ' AND idMarca = $idMarca'             : '';
$where .= (isset($idModelo))     ? ' AND idModelo = $idModelo'           : '';
$where .= (isset($idCombustivel))? ' AND idCombustivel = $idCombustivel' : '';

//define dinamicamente a query a ser executa
$strSql = "SELECT * FROM CARROS $where";

//Executa a query
$query = mysql_query($strSql);

?>

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

caro romero já tenho a ideia formada de como devo fazer , e devo agradecer muito a você pois estou aprendendo muito. O problema é que eu faço join de 4 tabelas para mostrar os resultados dos carros agora dai a minha duvida , pois postando as coisas da forma que voce me mostrou so vai mostrar1 tabela ai fica o codigo feito por mim para mostrar os resultados e que estava dando errado.

<?
$categoria   = $_GET['categorias'];
$marca       = $_GET['marcas'];
$modelo     = $_GET['modelos'];
$combustivel = $_GET['combustivel'];



$p = @$_GET["p"];
if(isset($p)) {
$p = $p;
} else {
$p = 1;
}
$qnt = 6;

//
$inicio = ($p*$qnt) - $qnt;
$dir ="cars/";


$sql="SELECT viaturas.id, viaturas.modelo, viaturas.imagem1, viaturas.potencia, viaturas.preço, viaturas.quilometros, viaturas.ano, viaturas.cor_car, categorias.cat, marcas.marca, combustivel.combustivel FROM viaturas JOIN categorias ON viaturas.cat_id=categorias.t_id JOIN marcas ON viaturas.id_marca=marcas.m_id JOIN combustivel ON viaturas.id_combustivel=combustivel.c_id WHERE viaturas.cat_id='$categorias' AND viaturas.id_marca='$marcas' AND viaturas.id='$modelos' AND viaturas.id_combustivel='$combustivel' ORDER BY marcas.marca";
mysql_query($sql)or die ('Erro na query '.mysql_error());
$sql_query = mysql_query($sql);
                                            
                                            
                                            
                                            while($linha = mysql_fetch_array($sql_query)){

echo' 
<div id="carros">
<div id="img"><a href="index2.php?pag=car&id='.$linha["id"].'"><img src="'.$dir.'' .$linha["imagem1"]. '" width="190" height="108" class="border" /></a></div>
<div id"espaco2" class="titulosE">'.$linha["marca"].'-'.$linha["modelo"].' '.$linha["potencia"].'</div>
<div id"espaco2">
<table width="76%" border="0" cellspacing="6" cellpadding="0">
  <tr>
    <td width="10%" class="items">Categoria:</td>
    <td width="19%" class="respostas">'.$linha["cat"].'</td>
    <td width="17%" class="items">preço:</td>
    <td width="17%" class="respostas">'.$linha["preço"].'€</td>
    <td width="12%" class="items">Quilometros:</td>
    <td width="25%" class="respostas">'.$linha["quilometros"].'Km</td>
  </tr>
  <tr>
    <td class="items">Marca:</td>
    <td class="respostas">'.$linha["marca"].'</td>
    <td class="items">Combustivel:</td>
    <td class="respostas">'.$linha["combustivel"].'</td>
    <td class="items">Ano:</td>
    <td class="respostas">'.$linha["ano"].'</td>
  </tr>
  <tr>
    <td class="items">Modelo:</td>
    <td class="respostas">'.$linha["modelo"].'</td>
    <td class="items">Cor da Carroçaria:</td>
    <td class="respostas">'.$linha["cor_car"].'</td>
  </tr>
</table>
</div>
</div>
';
                                            }
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Biza,

Utilize LEFT JOIN substituído o JOIN

e no WHERE, utilize o exemplo que te passei, desta forma terá que montar o $where de acordo com o que o utilizador preencher.

Faça o teste ae,

$sql="SELECT viaturas.id, viaturas.modelo, viaturas.imagem1, viaturas.potencia, viaturas.preço,   
             viaturas.quilometros, viaturas.ano, viaturas.cor_car, categorias.cat, marcas.marca, 
             combustivel.combustivel 
     FROM viaturas 
          LEFT JOIN categorias 
              ON viaturas.cat_id = categorias.t_id 
          LEFT JOIN marcas 
              ON viaturas.id_marca = marcas.m_id 
          LEFT JOIN combustivel 
              ON viaturas.id_combustivel = combustivel.c_id 
     $where
     ORDER BY marcas.marca";

PS: Uma boa dica é: procure identar seu código para que fique mais legivel e de facil entendimento.

Abraço

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

  • 0

caro romero,

desde já agradeço a sua atenção para com este meu problema. não querendo abusar de si mas já abusando ai vai,

o script da um erro dizendo o seguinte:

Erro na query Unknown column '$categoria' in 'where clause'.

Esta variavel não é a que vem da

<select name="categorias" class="select">
        <option value="0">Indiferente</option>
        </select>

.

A minha duvida é num form de edição como fazes para devolver o valor na combobox seleccionado, mas poder seleccionar as outras opções existentes.?!

Link para o comentário
Compartilhar em outros sites

  • 0

romero fiz a edição da forma que voê me disse :

<?
//catch das variaveis
$categoria   = $_GET['categorias'];
$marca       = $_GET['marcas'];
$modelo      = $_GET['modelos'];
$combustivel = $_GET['combustivel'];

echo $categoria,$marca,$modelo,$combustivel;    
//atributos de pagina
$p = @$_GET["p"];
if(isset($p)) {
$p = $p;
} else {
$p = 1;
}
$qnt = 6;
$inicio = ($p*$qnt) - $qnt;
$dir ="cars/";
//inicia a variavel $where
$where  = 'WHERE viaturas.id> 0';

//incrementa a variavel $where conforme o preenchimento dos dados no form
$where .= (isset($categoria))  ? ' AND viaturas.cat_id = $categoria': '';
$where .= (isset($marca))      ? ' AND viaturas.id_marca = $marca': '';
$where .= (isset($modelo))     ? ' AND viaturas.id = $modelo': '';
$where .= (isset($combustivel))? ' AND viaturas.id_combustivel = $combustivel': '';

$sql="SELECT viaturas.id, viaturas.modelo, viaturas.imagem1, viaturas.potencia, viaturas.preço,   
             viaturas.quilometros, viaturas.ano, viaturas.cor_car, categorias.cat, marcas.marca, 
             combustivel.combustivel 
     FROM viaturas 
          LEFT JOIN categorias 
              ON viaturas.cat_id = categorias.t_id 
          LEFT JOIN marcas 
              ON viaturas.id_marca = marcas.m_id 
          LEFT JOIN combustivel 
              ON viaturas.id_combustivel = combustivel.c_id 
     $where
     ORDER BY marcas.marca";
mysql_query($sql)or die ('Erro na query '.mysql_error());
$sql_query = mysql_query($sql);
mas esta dando esse erro: Erro na query Unknown column '$categoria' in 'where clause'. nas combobox eu utilizei o seguinte codigo:
<select name="categorias" class="select">
    <option value="0">Indiferente</option>
        <?
         $resulta = mysql_query( "SELECT * FROM categorias ORDER BY cat ASC" );
    while( $row = mysql_fetch_object($resulta)){
            echo'<option value="'.$row->t_id.'">'.$row->cat.'</option>    ';
        }
        mysql_free_result($resulta);
        ?>
        </select>
    </td>
    <td width="5%" class="caixa_filtros">Marca:</td>
    <td width="20%"><select name="marcas" class="select">
        <option value="0">Indiferente</option>
        </select></td>
    <td width="5%" class="caixa_filtros">Modelo:</td>
    <td width="20%"><select name="modelos" class="select">
        <option value="0">Indiferente</option>
        </select></td>
    <td width="8%" class="caixa_filtros">Combustivel:</td>
    <td width="22%">    <select name="combustivel" class="select">
        <option value="0">Indiferente</option>
        </select>

não sei o que esta a correr mal para não me estar a fazer a query

Link para o comentário
Compartilhar em outros sites

  • 0

resolvido erro de sintaxe.

assim é como deve ser.

$where .= isset($categoria)  ? " AND `viaturas`.`cat_id` = '{$categoria}'": '';
$where .= isset($marca)     ? " AND `viaturas`.`id_marca` = '{$marca}'": '';
$where .= isset($modelo)     ? " AND `viaturas`.`id` = '{$modelo}'": '';
$where .= isset($combustivel)? " AND `viaturas`.`id_combustivel` = '{$combustivel}'": '';

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
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...