Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

[Resolvido] Verificar checkbox marcada apos sumeter form

Recommended Posts

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.