Carcleo 4 Denunciar post Postado Agosto 9, 2011 Bom Dia a todos. Estou precisando de uma ajuda. Tenho um código que mostra dentro de um while, os numeros das listas de produtos cadastradas na tabela produtos_lista. while lista 1 lista 2 lista 3 ... ... lista n Bom. Dentro desse while, eu tenho outro while que faz uma consulta para saber os fornecedores que tem produtos cadastrados em cada uma dessas listas. $dados_fornece = " SELECT distinct(CONCAT(f.nome,f.razaosocial)), f.id, f.pgto_forma, f.pgto_prazo, pl.id_lista from produtos_lista pl inner join produtos p on pl.id_produto = p.id inner join fornecedores f on f.id = p.fornecedor where pl.id_lista = $id_lista order by f.nome, f.razaosocial, pl.id_lista desc ; Essa query, vai gerar outro while. while fornece 1 fornece 2 fornece 3 ... ... fornece n E, dentro desse while, para cada fornecedor, eu gero outro while para mostrar seus produtros: $sql_produtos_lista = " SELECT pl.id_lista, p.foto, pl.id_produto, p.nome, f.nome, f.razaosocial, g.nome, p.quantidadecaixa, pl.preco_produto, pl.condicao, pl.observacao from produtos_lista pl inner join produtos p on pl.id_produto = p.id inner join fornecedores f on f.id = p.fornecedor inner join grupos g on p.grupo = g.id_grupo where pl.id_lista = $lista_id and f.id=$id_fornecedor order by pl.id_lista desc, f.nome, f.razaosocial, p.nome "; echo "<form action=\"carrinho.php?op=adicionar\" method=\"post\" name=\"envia_tudo\">"; echo "<tr> <td colspan=\"10\"> $nome_fornecedor </td> </tr>"; $sql_produtos_lista_query = $MySQL->query($sql_produtos_lista); while(list($id_lista, $foto, $id_produto, $nome_produto, $nome_fornece, $razao_fornece, $nome_grupo, $quantidadecaixa, $preco, $condicao, $observacao) = mysql_fetch_row($sql_produtos_lista_query)){ echo "<input type=\"hidden\" name=\"{$i}[id_prod]\" id=\"{$i}[id_prod]\" value=\"$id_produto\"> <input type=\"hidden\" name=\"{$i}[quan]\" id=\"{$i}[quan]\" value=\"\"> <input type=\"hidden\" name=\"{$i}[id_lista]\" name=\"{$i}[id_lista]\" value=\"$id_lista\"> "; include("../global/funcoes_php/foto_ver.php"); $icone = "<img border=0 src='../img/saiba_mais.png' alt='Saiba Mais'>"; if ($observacao=="") {$observacao="Sem observação";} if ($condicao==1) {$condicao="Complemento";} if ($condicao==2) {$condicao="Encarte";} echo "<tr> <td align=center>$id_lista</td> <td align=center>$condicao</td> <td align=let>$nome_produto</td> <td align=center>$quantidadecaixa</td> <td align=right>R$ ". number_format($preco/$quantidadecaixa, 2, '.', '')."</td> <td align=right>R$ ". number_format($preco, 2, '.', '')."</td> <td align=right> <input type=text id={$i}[quant] value=0 size=2 style=\"text-align: center;\" onKeyPress=\"BloqueiaLetras();\" onchange=\"calculo(this.value, $preco,'{$i}[quant]','{$i}[quan]','{$i}[label_preco]');\" > </td> <td align=right>R$ <label id=\"{$i}[label_preco]\">0.00</label></td> <td align=center valign=\"middle\"> <a href=\"#\" onclick=\"this.href=' carrinho.php?op=adicionar&id_produto=$id_produto&id_da_lista=$id_lista&quantidade='+document.getElementById('{$i}[quant]').value\" > Enviar </a> </td> <td align=center>$observacao</td> </tr> "; $i++; } Tudo funciona bem. Porem, a cada vez que passa de uma lista para outra, no primeiro while, os campos {$i} [id_prod], ganham um novo 0[id_prod]. Aí, como já foi lançado o 0[id_prod]. no carrinho, embora esse id_prod faça parte de outra lista de prodtos ele não entra. Exite um forma de eu conseguir evitar esse problema? Segue o código completo: <? if ($acao== "mostra_produtos"){ $sql = " SELECT pl.id_lista, p.foto, pl.id_produto, p.nome, f.nome, f.razaosocial, g.nome, p.quantidadecaixa, pl.preco_produto, pl.condicao, pl.observacao from produtos_lista pl inner join produtos p on pl.id_produto = p.id inner join fornecedores f on f.id = p.fornecedor inner join grupos g on p.grupo = g.id_grupo where pl.id_lista = $id_lista order by pl.id_lista desc, f.nome, f.razaosocial, p.nome "; $sql2=mysql_query($sql); if(mysql_num_rows($sql2)==0) { echo "<table border=1 width=800 align=center> <tr><td colspan=13 align=center><h3>Ainda não há produtos cadastrados</h3></td></tr> </table>"; } else { $dados_fornece = " SELECT distinct(CONCAT(f.nome,f.razaosocial)), f.id, f.pgto_forma, f.pgto_prazo, pl.id_lista from produtos_lista pl inner join produtos p on pl.id_produto = p.id inner join fornecedores f on f.id = p.fornecedor where pl.id_lista = $id_lista order by f.nome, f.razaosocial, pl.id_lista desc "; $dados_fornece_query = $MySQL->query($dados_fornece); echo "<table border=1 width=800 align=center> <tr><td colspan=13 align=center><h3> Para enviar varios produtos ao mesmo tempo, informe a quantidade de ítens na coluna Quantidade e clique no botão Enviar todos para o carrinho</h3></td></tr> <tr> <td align=center>Lista</td> <td align=center>Condição</td> <td align=center>Produto</td> <td align=center>Qtde. caixa</td> <td align=center>Preço por<br>unidade na caixa</td> <td align=center>Preço Caixa</td> <td align=center>Quantidade</td> <td align=center>Sub Total</td> <td align=center>Adicionar</td> <td align=center>Observação</td> </tr> "; $i=0; while(list($nome_fornecedor, $id_fornecedor, $pgto_forma, $pgto_prazo, $lista_id)=mysql_fetch_row($dados_fornece_query)) { $sql_produtos_lista = " SELECT pl.id_lista, p.foto, pl.id_produto, p.nome, f.nome, f.razaosocial, g.nome, p.quantidadecaixa, pl.preco_produto, pl.condicao, pl.observacao from produtos_lista pl inner join produtos p on pl.id_produto = p.id inner join fornecedores f on f.id = p.fornecedor inner join grupos g on p.grupo = g.id_grupo where pl.id_lista = $lista_id and f.id=$id_fornecedor order by pl.id_lista desc, f.nome, f.razaosocial, p.nome "; echo "<form action=\"carrinho.php?op=adicionar\" method=\"post\" name=\"envia_tudo\">"; echo "<tr> <td colspan=\"10\"> $nome_fornecedor </td> </tr>"; $sql_produtos_lista_query = $MySQL->query($sql_produtos_lista); while(list($id_lista, $foto, $id_produto, $nome_produto, $nome_fornece, $razao_fornece, $nome_grupo, $quantidadecaixa, $preco, $condicao, $observacao) = mysql_fetch_row($sql_produtos_lista_query)){ echo "<input type=\"hidden\" name=\"{$i}[id_prod]\" id=\"{$i}[id_prod]\" value=\"$id_produto\"> <input type=\"hidden\" name=\"{$i}[quan]\" id=\"{$i}[quan]\" value=\"\"> <input type=\"hidden\" name=\"{$i}[id_lista]\" name=\"{$i}[id_lista]\" value=\"$id_lista\"> "; include("../global/funcoes_php/foto_ver.php"); $icone = "<img border=0 src='../img/saiba_mais.png' alt='Saiba Mais'>"; if ($observacao=="") {$observacao="Sem observação";} if ($condicao==1) {$condicao="Complemento";} if ($condicao==2) {$condicao="Encarte";} echo "<tr> <td align=center>$id_lista</td> <td align=center>$condicao</td> <td align=let>$nome_produto</td> <td align=center>$quantidadecaixa</td> <td align=right>R$ ". number_format($preco/$quantidadecaixa, 2, '.', '')."</td> <td align=right>R$ ". number_format($preco, 2, '.', '')."</td> <td align=right> <input type=text id={$i}[quant] value=0 size=2 style=\"text-align: center;\" onKeyPress=\"BloqueiaLetras();\" onchange=\"calculo(this.value, $preco,'{$i}[quant]','{$i}[quan]','{$i}[label_preco]');\" > </td> <td align=right>R$ <label id=\"{$i}[label_preco]\">0.00</label></td> <td align=center valign=\"middle\"> <a href=\"#\" onclick=\"this.href=' carrinho.php?op=adicionar&id_produto=$id_produto&id_da_lista=$id_lista&quantidade='+document.getElementById('{$i}[quant]').value\" > Enviar </a> </td> <td align=center>$observacao</td> </tr> "; $i++; } } echo " <tr> <td align=center valign=\"middle\" colspan=10 height=50> <input type=\"submit\" value=\"Enviar todos para o carrinho\"> </form> </td> </tr> "; echo "</table>"; } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Agosto 9, 2011 já dizia uma máxima de programação: se você tem 1 loop encaixado, tome cuidado, algo pode não estar certo se você tem 2 loops encaixados(3 whiles como seu caso), então refatore o código. [lógico que existem ressalvas] seu código não está legal por vários motivos. -> include dentro do laço ? -> indentação confusa -> afinal de contas, vai usar procedural ou OO ? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Agosto 9, 2011 Viu o tamanho da confuzão que eu me enfiei? Bom, depois que é enviado, via POST o formulario, eu pego os campos no outro action e filtro o array $_POST por campo quan enviado com valor 1: $dados = filtrar_array_por_valor($_POST, 'quan', 1); Fazendo um nova array. Daí terei que mudar esse funçao tambem né? <? function filtrar_array_por_valor($array, $index, $value) { //if (!array_key_exists(0, $array) ) {$array[0]=0;} if(is_array($array) && count($array) > 0) { foreach(array_keys($array) as $key) { $temp[$key] = $array[$key][$index]; if ($temp[$key] >= $value) { $newarray[$key] = $array[$key]; } } } return $newarray; } ?> Irmão, estou bem perdido. Compartilhar este post Link para o post Compartilhar em outros sites