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

foreach gravando varias vezes no BD


rcamu

Pergunta

Pessoal to fazendo um formulário de entrada de produtos (espelho da NF) que tem a opção de clonar as linhas para incluir mais produtos. 

Esse formulário grava em 2 tabelas 1º cabeçalho da NF e a 2º grava os detalhes onde tem o ID do produto a quantidade o valor unitário o valor total e o ID do cabeçalho para isso uso o LAST_INSERT_ID() 

Só que estou com um problema montei o foreach conforme abaixo quando tenho apenas uma linha no formulário mas quando tem mais de um item ele fica doido, grava diversas vezes no banco com dados incorretos.

Onde estou errando? 

 mysql_query("INSERT INTO lc_controle (id,dia, mes, ano, dtConcat, clienteVa, clienteAt, userml, rastreador, entrega, total, frete, frete_real, nf, origem, tipo_pagto, descricao, tipo, tipo_venda) values
     ('null','$dia', '$mes', '$ano', '$dtConcat', '$clienteVa', '0', '$userml', '$rastreador', '$entrega', '$total', '$frete', '$frete_real', '$nf', 		'$origem', '$tipo_pagto', '$descricao','0','Varejo')");

mysql_query("SELECT LAST_INSERT_ID() INTO @ID");

foreach($_POST["cat_id"] as $cat_id) 
foreach($_POST["qtd"] as $qtd) 
foreach($_POST["valor_unid"] as $valor_unid) 
foreach($_POST["valor_total"] as $valor_total) 

mysql_query("INSERT INTO lc_detalhe (cat_id,qtd,valor_unid,valor_total,controle_id) values 
	('$cat_id','$qtd','$valor_unid','$valor_total',@ID)");


e o formulário 

 

<table border="0" cellpadding="2" cellspacing="4"> 
<tr> 
<td class="bd_titulo">ID</td><td class="bd_titulo">Produto</td><td class="bd_titulo">Quantidade</td><td class="bd_titulo">Valor Unitario</td><td class="bd_titulo">Valor Total</td></tr> 
<tr class="linhas"> 
<td><input type="text" name="id" style="text-align:center" disabled="true" /></td> 
<td><select name="cat_id[]"> 
<?php 
while ($row=mysql_fetch_array($qr)){ 
?> 
<option value="<?php echo $row['id']?>"><?php echo $row['nome']?></option> 
<?php }?></td> 
<td> 
<input type="text" name="qtd[]" class="qtd" required name="qtd" 
style="text-align:center" /> 
</td> 
<td> 
<input name="valor_unid[]" type="text" required name="valor_unid" 
maxlength="30" 
onblur="Calc(this)" 
class="valor_unid" /> 
</td> 
<td> 
<input type="text" name="valor_total[]" 
class="vtotal" readonly="readonly" 
style="text-align:center"/> 
</td> 
<td><a href="#" class="removerCampo" title="Remover linha"><img src="img/excluir.jpg" border="0" /></a></td> 
</tr> 
<tr><td colspan="4"> 
<a href="#" class="adicionarCampo" title="Adicionar item"><img src="img/+.jpg" border="0" /></a> 
</td></tr> 
<tr> 
<p><input type="submit" value="Cadastrar" /></p> 

 

Editado por rcamu
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Oi tudo bem?

Se ainda não conseguiu resolver segue uma solução, basta você criar um contador para calcular quantas linhas tem no seu array e fazer os inserts.

Atenção!! Não se utiliza mais o MySQL em breve ele não será mais suportado, então recomendo você migrar seus scripts para MySQLi.

mysql_query("INSERT INTO lc_controle (id,dia, mes, ano, dtConcat, clienteVa, clienteAt, userml, rastreador, entrega, total, frete, frete_real, nf, origem, tipo_pagto, descricao, tipo, tipo_venda) values
     ('null','$dia', '$mes', '$ano', '$dtConcat', '$clienteVa', '0', '$userml', '$rastreador', '$entrega', '$total', '$frete', '$frete_real', '$nf',         '$origem', '$tipo_pagto', '$descricao','0','Varejo')");

$ultimoId = mysql_insert_id();

$cat_id=$_POST["cat_id"];
$qtd=$_POST["qtd"];
$valor_unid=$_POST["valor_unid"];
$valor_total=$_POST["valor_total"];

for($i=0; $i<count($cat_id); $i++) {
    
    mysql_query("INSERT INTO lc_detalhe (cat_id,qtd,valor_unid,valor_total,controle_id) values 
    ('$cat_id[$i]','$qtd[$i]','$valor_unid[$i]','$valor_total[$i]','$ultimoId')");

}
	
Editado por sergiodesa
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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...