DannyND 1 Denunciar post Postado Março 28, 2014 Galera, reabri esse tópico porque estou com uma grande dúvida rs Estrou criando um sistema de filtros avançados para ecommerce, mas como faço o GET da faixa de valores de produtos: Exemplo: produtos com valores entre R$49,50 a R$ 379,40 e R$ 379, 41 até R$ 709,30 Variáveis na URL http://servidor/busca.php?precos=379.41:709.3|49.5:379.4 Como posso enviar "379.41:709.3|49.5:379.4" para o select? Compartilhar este post Link para o post Compartilhar em outros sites
Back-on 14 Denunciar post Postado Março 29, 2014 Você não entendeu rsrsrs Eu só consigo enviar uma variavel pelo link .. não consigo mandar uma, guardar e depois mandar outra rsrs.. como faço isso? tá osso Você pode sim utilizar mais de um dado por link, exemplo: link: index.php?id=123&nome=backon echo $_GET['id']; //Saída 123 echo $_GET['nome']; //Saída backon Você também pode trabalhar com Sessões para armazenar as pesquisar (y) edit ----------------- Só para esclarecer, a busca do submarino é feito em php juntamente com o ajax. Aquele "quadrado" que abre ao digitar a palavra é consequência do script que foi feito em Ajax. Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Março 29, 2014 Galera, reabri esse tópico porque estou com uma grande dúvida rs Estrou criando um sistema de filtros avançados para ecommerce, mas como faço o GET da faixa de valores de produtos: Exemplo: produtos com valores entre R$49,50 a R$ 379,40 e R$ 379, 41 até R$ 709,30 Variáveis na URL http://servidor/busca.php?precos=379.41:709.3|49.5:379.4 Como posso enviar "379.41:709.3|49.5:379.4" para o select? BETWEEN mysql set double 10,2 Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Abril 1, 2014 Sei que preciso usar o between, o que preciso é "explodir" e "implodir" esses dados da forma correta para entrar no between. Galera.. alguém sabe como acumular GET na URL? Exemplo: =27:100|109:299&common_filter%5BAtributos%5D=Usb|Portátil]://busca.submarino.com.br/busca.php?q=samsung&range_filter[Preço]=27:100|109:299&common_filter%5BAtributos%5D=Usb|Portátil Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Abril 1, 2014 Antes de eu postar o que estou pensando, você estaria confortável em trabalhar com PDO? Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Abril 1, 2014 Consegui passar as informações bia GET, agora preciso bolar uma forma de marcar no checkbox o que está na URL. <?php include "sistema/funcoes/conexao.php"; include "sistema/funcoes/funcoes.php"; $inputString = "samsung"; $subgruposb = $_GET['common_filter']['subgrupo']; $especificab = $_GET['common_filter']['especifica']; print "subgrupob: ".$subgruposb."<br>"; print "especificab: ".$especificab."<p>"; print "explode/implode para select<br>"; $subgruposc = explode("|",$subgruposb); $especificac = explode("|",$especificab); $subgruposd = implode(",",$subgruposc); $especificad = implode(",",$especificac); print "subgrupod: ".$subgruposd."<br>"; print "especificad: ".$especificad."<p>"; $sql = "select * from ti_produtos where cd_subgrupo in('".$subgruposd."') and ds_espec in('".$especificad."') "; print $sql; ?> <p> <div id="geral"> <div class="coluna_1"> <!--FILTOS--> <span class="titulo_menu">Filtros</span> <ul id="menu_int"> <li>Sub-Grupos <? #retorna subgrupos conecta(); $querys = "SELECT p.cd_produto,p.cd_subgrupo FROM ti_produtos as p,ti_subgrupos as s where p.id_status='A' and p.venda_proibida='N' and p.cd_grupo!='0' and p.cd_subgrupo=s.cd_subgrupo and p.nm_produto like '%samsung%' group by p.cd_subgrupo"; $chamadas = mysql_query($querys); ?> <form> <ul class="filto"> <? while($subgrupos = mysql_fetch_array($chamadas)): $qtdests = est_subgrupo($subgrupos[cd_subgrupo]); if(isset($subgruposb)): $conds = "|".$subgruposb; endif; ?> <li> <a href="teste_busca.php?inputString=<?=$inputString?>&common_filter[subgrupo]=<?=$subgrupos[cd_subgrupo].$conds?>"> <IMG SRC="images/check_filtro.png" BORDER="0" ALT=""> <span><?=ds_subgrupo($subgrupos[cd_subgrupo])?> (<?=$qtdests?>) <?=" - "."cod. ".$subgrupos[cd_subgrupo]?></span></a> </li> <?endwhile;?> </ul> </form> </li> </ul> <ul id="menu_int"> <li>Especificações <? #retorna especificações $queryes = "SELECT p.cd_itprod,p.cd_grupo,p.ds_espec FROM ti_produtos as p,ti_grupos as es where p.id_status='A' and p.venda_proibida='N' and p.cd_grupo!='0' and p.cd_grupo=es.cd_grupo and p.nm_produto like '%samsung%' group by p.cd_grupo"; $chamadaes = mysql_query($queryes); ?> <ul class="filto"> <? while($especifica = mysql_fetch_array($chamadaes)): $qtdestes = est_especifica($especifica[cd_grupo]); $ds_espec = $especifica['ds_espec']; if(isset($especificab)): $condes = "|".$especificab; endif; ?> <li> <a href="teste_busca.php?inputString=<?=$inputString?>&common_filter[subgrupo]=<?=$subgruposb?>&common_filter[especifica]=<?=$especifica[cd_grupo].$condes?>"> <IMG SRC="images/check_filtro.png" BORDER="0" ALT=""> <span><?=$ds_espec?> (<?=$qtdestes?>)</span></a> </li> <?endwhile;?> </ul> </li> </ul> </div> </div> Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Abril 1, 2014 Perfeito. A primeira coisa: com PHP, você pode já tornar variáveis de post/get de mesmo nome em arrays sem precisar de explode: /meuteste.php?var[]=primeiro&var[]=segundo&var=[]terceiro Ou: <form action="meuteste.php" method="get"> <input name="var[]"><br> <input name="var[]"><br> <input name="var[]"><br> <input name="var[]"><br> <button type="submit">Testar!</button> </form> meuteste.php <?php var_dump($_GET); Isso posto, não sei como está seu formulário, mas você poderia formular o filtro de categorias da seguinte forma: <?php $categorias = array( array('id' => 1, 'nome' => 'eletrodomésticos'), array('id' => 2, 'nome' => 'computadores e periféricos'), array('id' => 3, 'nome' => 'celulares') ); ?> <fieldset> <legend>Categoria</legend> <ul> <?php foreach($categorias as $categoria): ?> <li> <label for="categ-<?php echo $categoria['nome']; ?>"> <input value="<?php echo $categoria['id']; ?>" id="categ-<?php echo $categoria['nome']; ?>" <?php echo in_array($categoria['id'], $_GET['categorias']) ? "checked" : ""?> type="checkbox" name="categorias[]"> <?php echo $categoria['nome']; ?> </label> </li> <?php endforeach; ?> </ul> básico sobre PDO: // conexão com MySQL $conn = new PDO("mysql:host=IP-do-host;dbname=Nome-do-Banco", "usuario", "senha"); // Em PDO, é comum trabalharmos com um conceito chamado prepared statements $stmt = $conn->prepare("select * from tabela where campo = ?"); $stmt->execute(array("valor_do_campo")); var_dump($stmt->fetchAll()); Então vamos quebrar o processo em dois passos: A montagem da consulta preparada A passagem dos valores O básico da consulta você já sabe... $sql = "select id, descricao, foto from produto"; Conforme formos tendo critérios no nosso filtro, devemos montar a consulta desses critérios e armazenar os valores que serão passados para a consulta preparada: $criteria = array(); $replacements = array(); if (isset($_GET['categorias']) and sizeof($_GET['categorias'])) { $criteria[] = sprintf("categoria in (%s)", str_pad("", sizeof($_GET['categorias']) * 3 - 2, "?, "))); $replacements = array_merge($replacements, $_GET['categorias']); } if (isset($_GET['valores-min']) and sizeof($_GET['valores-min']) and isset($_GET['valores-max']) and sizeof($_GET['valores-max']) { foreach ($_GET['valores-min'] as $key=>$initial) { $final = $_GET['valores-max'][$key]; $values_criteria[] = "valor between ? and ?"; $replacements = array_merge($replacements, array($initial, $final)); } $criteria[] = sprintf("(%s)", join(" or ", $values_criteria)); } // para entender os critérios que temos montados até aqui: print_r($criteria); // se tivermos critérios, acrescentamos na consulta: if (sizeof($criteria)) { $sql .= " where " . join(" and ", $criteria); } // para checar se a consulta foi montada conforme o esperado: echo $sql; $stmt = $pdo->prepare($sql); $stmt->execute($replacements); var_dump($stmt->fetchAll()); Acho que por ora é isso... Compartilhar este post Link para o post Compartilhar em outros sites
DannyND 1 Denunciar post Postado Abril 2, 2014 Vou fazer uns testes.. valeu =D Consegui da forma abaixo, porém não sei como fazer para limpar apenas um dos itens selecionados. <?phpinclude "sistema/funcoes/conexao.php";include "sistema/funcoes/funcoes.php";$inputString = "samsung"; #teste para texto digitado$subgruposb = $_GET['common_filter']['subgrupo'];$especificab = $_GET['common_filter']['especifica'];$subgruposc = explode("|",$subgruposb);$especificac = explode("|",$especificab);$subgruposd = implode(",",$subgruposc);$especificad = implode(",",$especificac);if(isset($subgruposb)): $condSubg = " and cd_subgrupo in ('".$subgruposd."') "; $condSugb_l = "&common_filter[subgrupo]=$subgruposb";endif;if(isset($especificab)): $condEspec = " and cd_grupo in ('".$especificad."') "; $condEspec_l = "&common_filter[especifica]=$especificab";endif;$sql = "select * from ti_produtos where nm_produto like '%$inputString%' ".$condSubg." ".$condEspec." ";print "montando a query: ".$sql;?><p><div id="geral"><div class="coluna_1"><!--FILTOS--><span class="titulo_menu">selecionados</span><br><?conecta();$subgs = explode(",", $subgruposd);$conta_subgs = count($subgs);for($i=0; $i < $conta_subgs; $i++){ if($subgs[$i] <> ''){ echo ds_subgrupo($subgs[$i])." <A HREF='#'>x</A>"."<br>"; }}$especs = explode(",", $especificad);$conta_especs = count($especs);for($i=0; $i < $conta_especs; $i++){ if($especs[$i] <> ''){ echo ds_grupo($especs[$i])." <A HREF='#'>x</A>"."<br>"; }}?><A HREF="teste_busca.php?inpuString=samsung">limpar selecionados</A><p><span class="titulo_menu">Filtros</span><ul id="menu_int"> <li>Sub-Grupos <? #retorna subgrupos conecta(); $querys = "SELECT p.cd_produto,p.cd_subgrupo FROM ti_produtos as p,ti_subgrupos as s where p.id_status='A' and p.venda_proibida='N' and p.cd_grupo!='0' and p.cd_subgrupo=s.cd_subgrupo and p.nm_produto like '%samsung%' group by p.cd_subgrupo"; $chamadas = mysql_query($querys); ?> <form> <ul class="filto"> <? while($subgrupos = mysql_fetch_array($chamadas)): $qtdests = est_subgrupo($subgrupos[cd_subgrupo]); if(isset($subgruposb)): $conds = "|".$subgruposb; endif; ?> <li> <a href="teste_busca.php?inputString=<?=$inputString.$condEspec_l?>&common_filter[subgrupo]=<?=$subgrupos[cd_subgrupo].$conds?>"> <IMG SRC="images/check_filtro.png" BORDER="0" ALT=""> <span><?=ds_subgrupo($subgrupos[cd_subgrupo])?> (<?=$qtdests?>) <?=" - "."cod. ".$subgrupos[cd_subgrupo]?></span></a> </li> <?endwhile;?> </ul> </form> </li></ul><ul id="menu_int"> <li>Especificações <? #retorna especificações $queryes = "SELECT p.cd_itprod,p.cd_grupo,p.ds_espec FROM ti_produtos as p,ti_grupos as es where p.id_status='A' and p.venda_proibida='N' and p.cd_grupo!='0' and p.cd_grupo=es.cd_grupo and p.nm_produto like '%samsung%' group by p.cd_grupo"; $chamadaes = mysql_query($queryes); ?> <ul class="filto"> <? while($especifica = mysql_fetch_array($chamadaes)): $qtdestes = est_especifica($especifica[cd_grupo]); $ds_espec = ds_grupo($especifica['cd_grupo']); if(isset($especificab)): $condes = "|".$especificab; endif; ?> <li> <a href="teste_busca.php?inputString=<?=$inputString.$condSugb_l?>&common_filter[especifica]=<?=$especifica[cd_grupo].$condes?>"> <IMG SRC="images/check_filtro.png" BORDER="0" ALT=""> <span><?=$ds_espec?> (<?=$qtdestes?>)</span></a> </li> <?endwhile;?> </ul> </li></ul></div></div> Resultado: Vou fechar esse tópico e abrir outro com essa questão. Obrigada à todos. Compartilhar este post Link para o post Compartilhar em outros sites