Criando filtro dinâmico para exibir produtos em php e mysql

Criando filtro dinâmico para exibir produtos em php e mysql

27/12/2010 | POR Alexandre H Jodai | 32 Comentários | 29.280 VISITAS

Olá, galeria nesta VA você vai aprender:

  • Criar combo select com dados do banco de dados.
  • Utilizar GROUP BY em instrução SQL
  • Montar uma SQL com variaveis
  • Utilizar comando php number_format()
  • Utilizar SWITCH e CASE

Boa aula!

Visite o site deste autor: saomiguelpaulista.net

32 respostas para “Criando filtro dinâmico para exibir produtos em php e mysql” deixe a sua!
  • Eduardo Matos Em: 27 de dezembro de 2010 as 11:24

    Você pode usar SELECT DISTINCT fabricante FROM cadastro ao invés de GROUP BY. Apesar dos dois funcionarem, o GROUP BY foi feito pra ser usado com expressões agregadoras, tipo COUNT() e SUM() por exemplo.

  • Cristian Etchebest Em: 27 de dezembro de 2010 as 11:50

    Muito boa a vídeo aula Alexandre, até o dog estava querendo te dar os parabéns heheh…
    Brincadeiras a parte, fiquei com uma duvidas no decorrer do vídeo próximo dos 18:29 segundos, percebi que você cortou o vídeo, mas pulou direto para o combo dinâmico, eu achei que você iria criar uma forma de buscar a opção do cliente se ele queria buscar por marca ou valores… Será que um Radio Button resolve o caso ou o ideal é ter duas combos?
    Obrigado e continue assim.
    (Gostaria, se não for pedir demais, se você poderia mais adiante, em outra vídeo aula, uma explicação de como trabalhar com soma e médias de dados, datas e tempos, principalmente tempos resgatado do banco MySQL. Já pesquisei na internet, mas a maioria que li é sobre datas e como tuas aulas são bem explicadas acredito que será muito mais fácil de aprender ) .
    Obrigado novamente.

  • João carlos Em: 27 de dezembro de 2010 as 18:50

    Boa aula! ^^

  • João carlos Em: 27 de dezembro de 2010 as 19:04

    showwww

  • Alexandre H Jodai Em: 27 de dezembro de 2010 as 19:20

    Galera,
    Gostaria de comentar a perfeita colocação do amigo Eduardo Matos,
    Apesar do meu código, pela lógiva, funcionar. Devemos seguir as normas da W3C como explicado pelo Eduardo.
    No lugar do SQL do combo dinâmico colocar:

    <?php
    $fab = $conecta->seleciona("SELECT DISTINCT fabricante FROM cadastro");
      while($obj = mysql_fetch_array($fab)){
        echo '<option value="'.$obj['fabricante'].'">'.$obj['fabricante'].'</option>';
    }
    ?>
    

    Para quem quiser entender o que o Eduardo disse sobre SUM() e COUNT() insira este código no lugar do combo dinâmico:

     <div class="menu">
    	<form name="formCombo" action="" method="post" enctype="multipart/form-data">
         <select name="fabricante">
          <option value="" selected="selected">Selecione um fabricante</option>
          <?php
    	  $fab = $conecta->seleciona("SELECT DISTINCT fabricante FROM cadastro");
    	  while($obj = mysql_fetch_array($fab)){
    	  echo '<option value="'.$obj['fabricante'].'">'.$obj['fabricante'].'</option>';
    	  }
    	  ?>      
         </select>
         &nbsp;&nbsp;&nbsp;
         <input type="submit" name="botao" value="Filtrar"/>
        </form>
        </div>
        <div class="menu">
        <?php
    	/* AQUI UTILIZAMOS O SUM(). ELE IRÁ SOMAR TODOS OS VALOR DO CAMPO QUE COLOCARMOS ENTRE AS PARENTESÊS, NO NOSSO CASO 'valor'
    	 DEPOIS COLOCO 'as TotalValor', POIS ESTOU AGRUPANDO O RESULTADO EM UM NOVO CAMPO TEMPORÁRIO E PEÇO PARA
    	 AGRUPAR 'GROUP BY' PELO 'fabricante'. SERÁ LISTADO A SOMA DE TODOS OS VALORES REFERENTES A CADA FABRICANTE */
        $SomaFab = $conecta->seleciona("SELECT fabricante, SUM(valor) as TotalValor FROM cadastro GROUP BY fabricante");
    	while($listSoma = mysql_fetch_array($SomaFab)){
    	echo $listSoma['fabricante'].' - R$ '.number_format($listSoma['TotalValor'],2,",",".").'<br />';
    	}
    	?>
        </div>
       <div class="menu">
        <?php
    		/* NO EXEMPLO ABAIXO, FOI UTILIZADO O MESMO PROCESSO PARA SOMAR OS VALOR, MAS DESTA VEZ SERÁ APRESENTADO APENAS O VALOR TOTAL
    		DO FABRICANTE SELECIONADO NO COMBO*/
        $SomaFab = $conecta->seleciona("SELECT fabricante, SUM(valor) as TotalValor FROM cadastro WHERE fabricante = '".$fabricante."'");
    	$listSoma = mysql_fetch_array($SomaFab);
    	echo $listSoma['fabricante'].' - R$ '.number_format($listSoma['TotalValor'],2,",",".").'<br />';
    		?>
        </div>
           <div class="menu">
        <?php
    	/*
    	O METODO COUNT(), FUNCIONA DA MESMA MANEIRA, DIFERENCIANDO QUE, ELE APENAS CONTARÁ QUANTOS REGISTROS EXISTE EM DETERMINADO CAMPO.
    	ESTE METODO PODEMOS UTILIZAR PARA MOSTRAR QUANTOS PRODUTOS EXISTEM EM DETERMINADAs CATEGORIAs
    	*/
        $ContaFab = $conecta->seleciona("SELECT fabricante, COUNT(Id) as TotalProdutos FROM cadastro GROUP BY fabricante");
    	while($listConta = mysql_fetch_array($ContaFab)){
    	echo $listConta['fabricante'].' ('.$listConta['TotalProdutos'].')<br />';
    	}
    	?>
        </div>
           <div class="menu">
        <?php
    	//O METODO COUNT(), PARA O FABRICANTE SELECIONADO
    
        $ContaFab = $conecta->seleciona("SELECT fabricante, COUNT(Id) as TotalProdutos FROM cadastro WHERE fabricante = '".$fabricante."'");
    	$listConta = mysql_fetch_array($ContaFab);
    	echo $listConta['fabricante'].' ('.$listConta['TotalProdutos'].')<br />';
    	?>
        </div> 
    

    Obrigado, Eduardo

    @Cristian – Obrigado pelo comentário! Eu prefiro com combo select, mas de preferência utilizando-se AJAX, (Existe uma VA do Robson explicando combo com AJAX) é muito mais intuitivo e agiliza para o usuário.
    No script acima, já tem a explicação sobre somar dados. Sobre média, pode-se utilizar MAX() e MIN() no SQL. Quanto a data e tempo é fácil, mas não para explicar aqui. Prometo uma VA com estas explicações, beleza.

  • Joao Lima Em: 28 de dezembro de 2010 as 7:38

    Muito bom mesmo!!!show de bola

    Parabens pela didática Alexandre

  • Guilherme Em: 29 de dezembro de 2010 as 10:08

    Vide Aula Show cara curti muito!
    Posta os scripts para a galera ai, valeeu té mais

  • fac Em: 30 de dezembro de 2010 as 11:19

    Posta os scripts para a galera ai

  • Anselmo Lima Em: 1 de janeiro de 2011 as 15:10

    Ótima seqüência de vídeos aulas! Estamos esperando mais rsrs….

  • Portal Norte Mineiro Em: 4 de janeiro de 2011 as 15:51

    Muito bom mesmo, há muito tempo procurava por isso e agora posso, finalmente, completar o que eu queria fazer. Valeu!!!

    Vai completar a vitrine virtual com carrinho de compras? Seria interessante dar continuidade a essas aulas, um carrinha de compras ficaria muito bom mesmo!

  • fac Em: 7 de janeiro de 2011 as 20:36

    por favor muestra mi lo que tienes ecrire al fichero funcoes.php

  • Ewerton NUnes Em: 11 de janeiro de 2011 as 14:48

    Fera as aulas…Nota 10…Como faço para fazer downloads das mesmas e ter guardado para posterior consulta?????Por favor me respondam!!!!

  • Alexandre H Jodai Em: 13 de janeiro de 2011 as 17:04

    Pessoal,

    Todos os scripts das minhas vídeo aulas, disponibilizei no fórum da Upinside.
    É só se cadastrar e copiar.

    abraços

  • Polizello Em: 17 de janeiro de 2011 as 21:44

    Parabens pela V.A excelente mesmo, gostaria de saber como faço para criar uma busca interna para esta galeira, tereia como criar uma VA ou tutorial para isso…

    Parabens mais um vez!

  • helio Em: 18 de janeiro de 2011 as 11:47

    muito boa a video aula mas como se faz para adicionar as imagens no banco de dados

  • Daniel Em: 19 de fevereiro de 2011 as 16:34

    Muito boa a aula.. gostei muito!!!

  • Jean Salim Em: 25 de fevereiro de 2011 as 15:08

    Amigo como faço a filtragem para valores diferentes, exemplo:

    Tenho 2 valores, preciso filtrar o valor _aluguel_anual e o valor_aluguel_venda.

    Como ficaria a string e a query.

    Se puder me ajudar, ficarei super super grato.

  • Jean Salim Em: 25 de fevereiro de 2011 as 15:10

    Desculpe, o valor é valor_aluguel_anual e valor_aluguel_temporada.

  • Robson V. Leite Em: 28 de fevereiro de 2011 as 9:49

    @Jean Salim: Fica da mesma forma meu querido, apenas envie os 2 valores pelo VAR, e ao recuperar o where no sql vc acresenta os 2.

    WHERE valor_aluguel_anual = Variavel AND valor_aluguel_temporada = variavel2

  • Anderson Em: 19 de março de 2011 as 9:31

    a cara eu ia comprar o curso dinamico com PHP, mas pra compra tem que fazer muita coisa
    responder uma par de questionarios la pra consegui comprar o curso ¬¬, deu preguiça mas quem sabe outro dia xD

  • Moisés Jr. Em: 24 de março de 2011 as 11:48

    Bom dia, parabéns pela vídeo aula…me ajudou muito. Gostaria de mais uma informação. Como faço para linkar os resultados desse filtro com os detalhes do produto individualmente? Criei uma pagina detalhes e gostaria de resgatar os valores cadastrados.

    Obrigado.

  • Paulo Em: 13 de abril de 2011 as 21:55

    Perfeito!

  • Marcos Em: 21 de abril de 2011 as 1:10

    muuuuuitoo boa video aula Alexandre, parabéns pela boa didática e parabéns robson pelo site, estou aprendendo muito com vocês!

    Seria interessante implementar nesta aula de vitrine de protudos, uma forma do usúario clicar no produto e ir para uma página com descrições completas deste produto, ou seja, uma página mestre que pega o id do produto selecionado e exibe as descrições cadastradas no banco e até mais imagens do mesmo.

    poderia gravar uma aula com este recurso?

    desde já, agradeço e mais uma vez… Parabéns!

  • helio Em: 17 de maio de 2011 as 11:17

    otima video aula como se faz para clicar na imagem ou no preço e mandar para outra pagina

  • Alexandre H Jodai Em: 20 de maio de 2011 as 17:08

    @Moises, @Marcos e @Helio – O processo é simples para o que vocês querem. Basta inserir um link na foto e passar via GET um parametro com o ID de cada produto, após resgatar o paramentro em outra página e filtrar os dados no banco de dados. Exemplo:

    // pagina da vitrine
    
    $ID = $list['Id'];
    <a href="detalhe.php?id = '.$ID.'">FOTO ou PREÇO</a>
    
    // pagina detalhe.php
    
    $ID = $_GET['id'];
    $consulta = $conecta->seleciona("SELECT * FROM cadastro WHERE Id =".$ID);
    $obj = mysql_fetch_array($consulta)
      // Aqui exibi os dados
    
    

    Abraço

  • Endreo Em: 20 de julho de 2011 as 12:43

    Ei amigo, eu utilizo esse sistema para um shop que estou fazendo, queria saber se você pode me ajudar a fazer uma paginação de resultados mostrando 10 itens por pagina 5 na primeira linha e mais 5 na segunda linha, já tentei vários scripts, vários códigos e não consigo.

    Obrigado!

  • nilton Em: 23 de julho de 2011 as 2:27

    ola amigo alexandre gostei muito dasa sua video aulas a segui passo a passo so tem uma problema como sou inciante nao consegui resolver esta printando o seguinte erro
    quando seleciono um produto para filtrar
    Notice: Undefined index: fabricante in C:\Arquivos de programas\EasyPHP-5.3.6.0\www\loja\loja_virtual.php on line 8

  • Cicero Em: 29 de outubro de 2011 as 8:36

    Olá a todos, muito boa a aula, parabéns. No entanto estou com um problema. Coloquei os dois combos na mesma página e adicionei os scripts para o fabricante (uma variável $string_valor e outra $string_fab, para distinguir, cada uma com o script idêntico ao da aula para cada uma). Porém utilizando o código $res = $conecta->seleciona(“SELECT * FROM cadastro $string_valor”); obviamente ele só filtra pelo valor e se mudar a variável para o fabricante ele só filtra por fabricante. Meu objetivo lógico é o seguinte: temos dois combos. Se a pessoa selecionar só o valor filtre apenas para o valor desejado. Se a pessoa selecionar apenas o fabricante filtre apenas para o fabricante desejado. Se a pessoa selecionar um valor e um fabricante filtre o resultado de ambos (por ex.: notebook DELL numa faixa de até R$1.000,00). Acredito que seja problema na construção da query.

    código disponível em: http://www.pocciotti.com/estudos/codigo.txt

    Desde já agradeço a atenção!

  • victor de souza Em: 4 de dezembro de 2011 as 22:01

    cara, como faço para que as miniaturas da vitrine venha com o ID para poder abrir uma pagina de exibir detalhes! através do $_GET , se tiver outro modo dês de já agradeço!!!

  • Douglas Fernandes Em: 23 de março de 2012 as 22:21

    Beleza Alexandre H Jodai,
    Bom quero te dar os parabéns pelo excelente conteúdo que você está postando aqui,
    e to com uma dúvida sobre o recurso if do $msg, fiz tudo que nem no vídeo mais não aparece o resultado na tag.

  • Alexandre H Jodai Em: 27 de março de 2012 as 23:11

    @Douglas, como vai?
    O IF é uma condicional, server para validações, por isso deve-se sempre verificar se a validação está sendo realizada corretamente. Sempre ao utilizar condicionais “if, else”, insira um “echo” com mensagens de erro para que você posso se localizar melhor em que parte está ocorrendo o erro.

    Abraço

  • andre Em: 11 de maio de 2012 as 12:24

    Alexandre muito parabéns pela suas videos sua muito boa….
    queria saber se vc tem o script do banco de dados das video aula da vitrine e carrinho de compra.
    fiz todo o script em php mas não estou conseguindo criar o banco de dados

Deixe seu comentário!