Ir para conteúdo
Fórum Script Brasil
  • 0

Verificar checkbox marcada apos sumeter form


Carlos Rocha

Pergunta

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 preço 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&ccedil;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?

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

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&ccedil;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 já 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.preço) 
                    from produtopreco pp
                      inner join fornecedores f on f.id=pp.idFornecedor
                    where 
                      $produtoid
                    group by 
                       pp.idFornecedor
                    order by 
                       sum(pp.preço) 
                  ");
                   
$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.preço) 
                    LIMIT $inicio, $lpp
                  ");
    if ($total == "0") {?><tr><td colspan=8 align="center" valign="middle" bgcolor="#FFFFFF"><center><font color=red>=>N&atilde;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.preço, $valor1 * pp.preço
                 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,$preço,$precototal)=mysql_fetch_row($sql2))
  {
   print  $nomeproduto."<br>Preço unitário= R$ ".formata_moeda($preço)."<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?

Link para o comentário
Compartilhar em outros sites

  • 0

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&ccedil;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 já 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.preço) 
                    from produtopreco pp
                      inner join fornecedores f on f.id=pp.idFornecedor
                    where 
                      $produtoid
                    group by 
                       pp.idFornecedor
                    order by 
                       sum(pp.preço) 
                  ");
                   
$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.preço) 
                    LIMIT $inicio, $lpp
                  ");
    if ($total == "0") {?><tr><td colspan=8 align="center" valign="middle" bgcolor="#FFFFFF"><center><font color=red>=>N&atilde;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.preço
                 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,$preço)=mysql_fetch_row($sql2))
  {
   $precototal=$quantidade[$idPro]*$preço;   
   print  $nomeproduto."<br>
           Preço unitário= R$ ".formata_moeda($preço)."<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>";                                                                                   
}
?>

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...