Carcleo 4 Denunciar post Postado Setembro 1, 2010 Ola pessoal. Preciso de ajuda. Tenho o form abaixo que é alimentado pelo banco. São checkbox com name e value vindos do banco apartir do id de cada produto. Acontece, que cada checkbox, o seu name, começa com "produtoid" mais o id de cada produto. Desta forma, cada checkbox tem seu proprio name. O que eu não estou conseguindo fazer é o seguinte: Após clikar na checkbox, é aberto uma div com uma textbox dentro. Essa TEXTBOX (para colocar a quantidade de produtos), tem seu name começado por valor mais o numero id do produto tambem Esse id do produto é gerado por um laço while. Minha dificuldade esta depois de submeter o formulario. Fazer as contas de quantidade x preco para APENAS os ids dos produtos marcados nas checkboxs. segue o codigo: <? $produtos=mysql_query(" SELECT id, nome FROM produtos "); $quantos_produtos=mysql_num_rows($produtos); if ($quantos_produtos==0){print "Num deu!";} else { ?> <form name="verpreco" id="verpreco" method="post" action="?acao=verpreco"> <input type="hidden" value="$quantos_produtos" name="quantos_produtos" /> <table width="500" border="1" align="center"> <tr> <td colspan="10" align="center" valign="middle">Pesquisa de preços de fornecedores:</td> </tr> <tr><td colspan="10">Produto:</td></tr> <? $i=1; while (list($id, $nome) = mysql_fetch_row($produtos)) { ?> <td width="48" valign="top"> <input type="checkbox" name="produtoid<?=$id;?>" id="produtoid<?=$id;?>" value="<?=$id;?>" onclick="mostra('valordiv<?=$id;?>')"/><?=$nome;?><br> <div id="valordiv<?=$id;?>" name="valordiv<?=$id;?>" style="display:none"> Valor<?=$id;?>: <input type="text" size="10" onkeypress="BloqueiaLetras();" name="valor<?=$id;?>"> </div> </td> <? $produtos_checkbox[]="valordiv".$id; $produtos_valor[]="valor".$id; if( $i%10==0 ) {echo '</tr><tr>';} $i++; } $produtos_checkbox2=implode(";",$produtos_checkbox); $produtos_valor2=implode(";",$produtos_valor); ?> <tr> <td colspan="10" align="center" valign="middle"><input type="button" value="Pesquizar" onclick="verifica_quantidade_produto('<?=$produtos_valor2;?>')" /></td> </tr> </table> </form> <? } ?> <? if($acao=="verpreco") { } Como resolvo isso? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Setembro 1, 2010 Ola pessoal. Resolvi parte do problema com a adapataçao abaixo. Porem agora, vai ficando mais dificil. Preciso agora de pegar as quantidades dos produtos inseridas nas textboxs relativas a cada uma das chekbox e multiplicar pelo valor unitario. <? $produtos=mysql_query(" SELECT id, nome FROM produtos "); $quantos_produtos=mysql_num_rows($produtos); if ($quantos_produtos==0){print "Num deu!";} else { ?> <form name="verpreco" id="verpreco" method="post" action="?acao=verpreco"> <input type="hidden" value="$quantos_produtos" name="quantos_produtos" /> <table width="500" border="1" align="center"> <tr> <td colspan="10" align="center" valign="middle">Pesquisa de preços de fornecedores:</td> </tr> <tr><td colspan="10">Produto:</td></tr> <? $i=1; while (list($id, $nome) = mysql_fetch_row($produtos)) { ?> <td width="48" valign="top"> <input type="checkbox" name="produtoid[<?=$id;?>]" id="produtoid[<?=$id;?>]" value="<?=$id;?>" onclick="mostra('valordiv<?=$id;?>')"/><?=$nome;?><br> <div id="valordiv<?=$id;?>" name="valordiv<?=$id;?>" style="display:none"> Valor<?=$id;?>: <input type="text" size="10" onkeypress="BloqueiaLetras();" name="valor<?=$id;?>"> </div> </td> <? $produtos_checkbox[]="valordiv".$id; $produtos_valor[]="valor".$id; if( $i%10==0 ) {echo '</tr><tr>';} $i++; } $produtos_checkbox2=implode(";",$produtos_checkbox); $produtos_valor2=implode(";",$produtos_valor); ?> <tr> <td colspan="10" align="center" valign="middle"><input type="button" value="Pesquizar" onclick="verifica_quantidade_produto('<?=$produtos_valor2;?>')" /></td> </tr> </table> </form> <? } ?> <? if($acao=="verpreco") { print "-------------------------------------------------"; //aqui, verifico de ja foi clikado na paginaçao e se a variavel iproduto(do link da paginação) veio. Se sim, decodifica, se não, prossegue o código. if ($idproduto) { $produtoid=urldecode($idproduto); } else { $produtoid=$_POST['produtoid']; foreach( $produtoid AS $key => $value) { $var[]="pp.idProduto=".$value." or"; } $produtoid=implode(' ',$var); print $produtoid; $produtoid= substr($produtoid,0, -3); } //aqui,faço uma pesquisa pelos nomes dos produitos para exibir no cabeçalho da tabela $pesquisaprodutos=mysql_query(" select distinct(nome ) from produtos p inner join produtopreco pp on pp.idProduto=p.id where $produtoid "); while(list($nomesdeprodutos) = mysql_fetch_row($pesquisaprodutos)) { $varnome[]=$nomesdeprodutos." e "; } $nomes=implode(' ',$varnome); $produtonome= substr($nomes,0, -2); //aqui, começo a tabela print "<table align='center' width=400 bgcolor='#0080C0'>"; print "<tr ><td align=center colspan=3>Preços dos fornecedores para os produtos $produtonome</td></tr>"; //aqui começo a paginação. $sql = mysql_query(" select distinct(pp.idFornecedor), f.nome, sum(pp.preco) from produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor where $produtoid group by pp.idFornecedor order by sum(pp.preco) "); $total = mysql_num_rows($sql); // Esta função irá retornar o total de linhas na tabela $lpp = 10; // Especifique quantos resultados você quer por página $paginas = ceil($total / $lpp); // Retorna o total de páginas if(!isset($pagina)) { $pagina = 0; } // Especifica uma valor para variavel pagina caso a mesma não esteja setada $inicio = $pagina * $lpp; // Retorna qual será a primeira linha a ser mostrada no MySQL $sql = mysql_query(" select distinct(pp.idFornecedor), f.nome from produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor where $produtoid group by pp.idFornecedor order by sum(pp.preco) LIMIT $inicio, $lpp "); if ($total == "0") {?><tr><td colspan=8 align="center" valign="middle" bgcolor="#FFFFFF"><center><font color=red>=>Não foi encontrado nenhum registro para a sua pesquisa</font></center></td></tr><?php } else { print "<tr BGCOLOR='#CCCCCC'>"; print " <td align=center>Produto</td> "; print " <td align=center>Preço Total</td> "; print " <td align=center>Fornecedor</td> "; print "</tr>"; while(list($idFornecedor, $nomefornecedor)=mysql_fetch_row($sql)){ $sql2=mysql_query(" select p.nome, pp.preco, $valor1 * pp.preco from produtopreco pp inner join produtos p on p.id=pp.idProduto inner join fornecedores f on f.id=pp.idFornecedor where pp.idFornecedor = $idFornecedor and ($produtoid) "); print "<tr BGCOLOR='#FFFFFF'>"; print " <td align=center>"; $precototal2=0; while (list($nomeproduto,$preco,$precototal)=mysql_fetch_row($sql2)) { print $nomeproduto."<br>Preço unitário= R$ ".formata_moeda($preco)."<br>Quantidade=".$valor1."<br>Preço Total= R$ ".formata_moeda($precototal)."<p>"; $precototal2+=$precototal; } print "</td>"; print " <td align=center>R$ ".formata_moeda($precototal2)." </td> "; print " <td align=center>$nomefornecedor </td> "; print "</tr>"; } } if($pagina > 0) { $menos = $pagina - 1; $url = "$PHP_SELF?acao=verpreco&pagina=$menos&idproduto=".urlencode($produtoid); echo "<a href=".$url.">Anterior</a>"; // Vai para a página anterior } for($i=0;$i<$paginas;$i++) { // Gera um loop com o link para as páginas $url = "$PHP_SELF?acao=verpreco&pagina=$i&idproduto=".urlencode($produtoid); echo " | <a href=".$url.">$i</a>"; } if($pagina < ($paginas - 1)) { $mais = $pagina + 1; $url = "$PHP_SELF?acao=verpreco&pagina=$mais&idproduto=".urlencode($produtoid); echo " | <a href=".$url.">Próxima</a>"; } print "</table>"; } ?> O que tenho que alterar agora? Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Setembro 2, 2010 Ola pessoal. Consegui. Agora pesso a atenção do pessoal para uma possivel melhora de performance. Melhorar o tempo de resposta. Grato. segue a soluçao: <? function array_envia($array) { $tmp = serialize($array); $tmp = urlencode($tmp); return $tmp; } function array_recebe($url_array) { $tmp = stripslashes($url_array); $tmp = urldecode($tmp); $tmp = unserialize($tmp); return $tmp; } ?> <? $produtos=mysql_query(" SELECT id, nome FROM produtos "); $quantos_produtos=mysql_num_rows($produtos); if ($quantos_produtos==0){print "Num deu!";} else { ?> <form name="verpreco" id="verpreco" method="post" action="?acao=verpreco"> <input type="hidden" value="$quantos_produtos" name="quantos_produtos" /> <table width="500" border="1" align="center"> <tr> <td colspan="10" align="center" valign="middle">Pesquisa de preços de fornecedores:</td> </tr> <tr><td colspan="10">Produto:</td></tr> <? $i=1; while (list($id, $nome) = mysql_fetch_row($produtos)) { ?> <td width="48" valign="top"> <input type="checkbox" name="produtoid[<?=$id;?>]" id="produtoid[<?=$id;?>]" value="<?=$id;?>" onclick="mostra('valordiv<?=$id;?>')"/><?=$nome;?><br> <div id="valordiv<?=$id;?>" name="valordiv<?=$id;?>" style="display:none"> Valor<?=$id;?>: <input type="text" size="10" onkeypress="BloqueiaLetras();" name="valor<?=$id;?>"> </div> </td> <? $produtos_checkbox[]="valordiv".$id; $produtos_valor[]="valor".$id; if( $i%10==0 ) {echo '</tr><tr>';} $i++; } $produtos_checkbox2=implode(";",$produtos_checkbox); $produtos_valor2=implode(";",$produtos_valor); ?> <tr> <td colspan="10" align="center" valign="middle"><input type="button" value="Pesquizar" onclick="verifica_quantidade_produto('<?=$produtos_valor2;?>')" /></td> </tr> </table> </form> <? } ?> <? if($acao=="verpreco") { print "-------------------------------------------------"; //aqui, verifico de ja foi clikado na paginaçao e se a variavel iproduto(do link da paginação) veio. Se sim, decodifica, se não, prossegue o código. if ($idproduto) { $produtoid=urldecode($idproduto); $quantidade=array_recebe($_GET['quanti']); } else { $produtoid=$_POST['produtoid']; foreach( $produtoid AS $key => $value) { $var[]="pp.idProduto=".$value." or"; $campo = 'valor'.$value; $quantidade[$value]=$_POST[$campo]; } $produtoid=implode(' ',$var); $produtoid= substr($produtoid,0, -3); } //aqui,faço uma pesquisa pelos nomes dos produitos para exibir no cabeçalho da tabela $pesquisaprodutos=mysql_query(" select distinct(nome ) from produtos p inner join produtopreco pp on pp.idProduto=p.id where $produtoid "); while(list($nomesdeprodutos) = mysql_fetch_row($pesquisaprodutos)) { $varnome[]=$nomesdeprodutos." e "; } $nomes=implode(' ',$varnome); $produtonome= substr($nomes,0, -2); //aqui, começo a tabela print "<table align='center' width=400 bgcolor='#0080C0'>"; print "<tr ><td align=center colspan=3>Preços dos fornecedores para os produtos $produtonome</td></tr>"; //aqui começo a paginação. $sql = mysql_query(" select distinct(pp.idFornecedor), f.nome, sum(pp.preco) from produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor where $produtoid group by pp.idFornecedor order by sum(pp.preco) "); $total = mysql_num_rows($sql); // Esta função irá retornar o total de linhas na tabela $lpp = 10; // Especifique quantos resultados você quer por página $paginas = ceil($total / $lpp); // Retorna o total de páginas if(!isset($pagina)) { $pagina = 0; } // Especifica uma valor para variavel pagina caso a mesma não esteja setada $inicio = $pagina * $lpp; // Retorna qual será a primeira linha a ser mostrada no MySQL $sql = mysql_query(" select distinct(pp.idFornecedor), f.nome from produtopreco pp inner join fornecedores f on f.id=pp.idFornecedor where $produtoid group by pp.idFornecedor order by sum(pp.preco) LIMIT $inicio, $lpp "); if ($total == "0") {?><tr><td colspan=8 align="center" valign="middle" bgcolor="#FFFFFF"><center><font color=red>=>Não foi encontrado nenhum registro para a sua pesquisa</font></center></td></tr><?php } else { print "<tr BGCOLOR='#CCCCCC'>"; print " <td align=center>Produto</td> "; print " <td align=center>Preço Total</td> "; print " <td align=center>Fornecedor</td> "; print "</tr>"; while(list($idFornecedor, $nomefornecedor)=mysql_fetch_row($sql)){ $sql2=mysql_query(" select pp.idProduto, p.nome, pp.preco from produtopreco pp inner join produtos p on p.id=pp.idProduto inner join fornecedores f on f.id=pp.idFornecedor where pp.idFornecedor = $idFornecedor and ($produtoid) "); print "<tr BGCOLOR='#FFFFFF'>"; print " <td align=center>"; $precototal2=0; while (list($idPro, $nomeproduto,$preco)=mysql_fetch_row($sql2)) { $precototal=$quantidade[$idPro]*$preco; print $nomeproduto."<br> Preço unitário= R$ ".formata_moeda($preco)."<br> Quantidade=".$quantidade[$idPro]."<br> Preço Total= R$ ".formata_moeda($precototal)."<p>"; $precototal2+=$precototal; } print "</td>"; print " <td align=center>R$ ".formata_moeda($precototal2)." </td> "; print " <td align=center>$nomefornecedor </td> "; print "</tr>"; } } if($pagina > 0) { $menos = $pagina - 1; $url = "$PHP_SELF?acao=verpreco&pagina=$menos&quanti=".array_envia($quantidade)."&idproduto=".urlencode($produtoid); echo "<a href=".$url.">Anterior</a>"; // Vai para a página anterior } for($i=0;$i<$paginas;$i++) { // Gera um loop com o link para as páginas $url = "$PHP_SELF?acao=verpreco&pagina=$i&quanti=".array_envia($quantidade)."$&idproduto=".urlencode($produtoid); echo " | <a href=".$url.">$i</a>"; } if($pagina < ($paginas - 1)) { $mais = $pagina + 1; $url = "$PHP_SELF?acao=verpreco&pagina=$mais&quanti=".array_envia($quantidade)."&idproduto=".urlencode($produtoid); echo " | <a href=".$url.">Próxima</a>"; } print "</table>"; } ?> Compartilhar este post Link para o post Compartilhar em outros sites