Bom dia. Estou desenvolvendo um SIG em uma empresa e uma parte de um Script esta pegando no meu pe. não sei exatamente o porque ele não esta funcionando, estou desde ontem de manha olhando ele e etentando fazer ele funcionar.
É assim: Um formulário lista uma série de lotes de produtos em uma tabela. Dentro desta tabela há campos hidden que guardam as informações como número de lote, código do produto e entre outros que deverão ser enviados para o segundo formulário via POST. Cada campo é nomeado de acordo com referência e linha, digamos cod_prod1, cod_prod2, assim por diante, sendo que esse número do nome é definido por uma variável incrementada durante o a montagem da tela, dentro do while, mais ou menos assim:
Bom, espero que de pra entender com essa parte o esquema da nomenclatura de campos. Enfim, o problema é no segundo formulario. Abaixo esta a parte do codigo que esta com problemas:
$contador=$_POST['conter']; // sim, é 'conter' mesmo, e não 'counter'. Digamos que o $contador seja 3
# AGORA SABEMOS O TOTAL DE MAXIMO DE LOTES QUE PODEM SER SELECIONADOS
# ASSIM O LACO já TEM UM SET-UP PRA FAZER O RETURN CERTO DE VEZES
# SEM CAUSAR UM LOOP INFINITO OU MAIOR QUE O NECESSARIO
// ELE TERA DE EXECUTAR TUDO DENTRO DESSE LACO PARA
// PEGAR UM A UM, TESTAR ELE PELA ORDEM E EXECUTAR
$sobras=$_POST['quantidadeOLD']; // esse $_POST é a quantidade solicitada no pedido
while ($contador>0)
{
// AQUI ELE MONTA OS NOMES COMPOSTOS DOS CAMPOS REFERENTES AO CONTADOR
$nomeadd='add'.$contador; // com $contador=3 , $nomeadd = add3, na proxima volta add2 e assim por diante
$nomelote='lote'.$contador; // o mesmo vale para os demais, isso para acompanhar o nome dado no form anterior
$nomeest='est'.$contador;
$nomeqt='qt'.$contador;
# AVERIGUA SE O CHECKBOX DESTA POSICAO ESTAVA MARCADO NO FORM ANTERIOR
if (isset($_POST[$nomeadd]))
{
#AQUI ELE VAI CONFERIR A CONTAGEM.
// não PODE SER MAIOR QUE O TOTAL
// não PODE SER MAIOR QUE O EM ESTOQUE
if ($_POST[$nomeqt]<=$sobras) // $nomeqt é A QUANTIDADE TOTAL FEITA NO PEDIDO
{
if ($_POST[$nomeqt]<=$_POST[$nomeest]) // $nomeest EHA QUANTIDADE TOTAL EM ESTOQUE
{
#SET-UP DE VARIAVEIS PRA INSERCAO
$sobras=$sobras-$_POST[$nomeqt]; // CALCULA QUANTO SOBRA NO PEDIDO
$memo="Alterado pedido:<BR>Lote: <b>".$_POST[$nomelote]."</b><br>Quantidade adicionada: <b>".$_POST[$nomeqt]."</b><br><i>Quantidade referente a alteração de lote.</i>";
$addprod=mysql_query("INSERT INTO detalhepedido (cod_cliente, cod_pedido, cod_para_nf, num_lote, desc_para_nf, unidade, quantidade, valor_unit, aliq_icms) VALUES ('{$_POST['cod_cliente']}','{$_POST['cod_pedido']}','{$_POST['cod_produto']}','{$_POST[$nomelote]}','{$_POST['desc_produto']}','{$_POST['unidade']}','{$_POST[$nomeqt]}','{$_POST['valorunit']}','0') ") or die (mysql_error());
$addobs=mysql_query("INSERT INTO observ_pedidos (user, dia, mes, ano, hora, obs, cod_pedido) VALUES ('{$_SESSION['login']}','{$dia}','{$mes}','{$ano}','{$hora}','{$memo}','{$_POST['cod_pedido']}')") or die (mysql_error());
if ($sobras==0)
{
$deletazerado=mysql_query("DELETE FROM detalhepedido WHERE quantidade='0'") or die (mysql_error());
}
else
{
$altpedido=mysql_query("UPDATE detalhepedido SET quantidade='{$sobras}' WHERE cod_pedido='{$_POST['cod_pedido']}' AND cod_para_nf='{$_POST['cod_produto']}' AND quantidade='{$_POST['quantidadeOLD']}' AND num_lote='0' ") or die (mysql_error());
}
###############
}
else
{
echo "<script type=\"text/javascript\">
alert('Quantidade solicitada é maior que a quantidade em estoque para o lote ".$_POST[$nomelote].".');
</script>";
}
}
else
{
echo "<script type=\"text/javascript\">
alert('Quantidade solicitada é maior que a do pedido para o lote ".$_POST[$nomelote].".');
</script>";
}
#RETIRA QUANTIDADE DO TOTAL E DO ESTOQUE E DO PEDIDO EM SI
// SE O ESTOQUE 0 FICAR COM QUANTIDADE ZERADA, FINALIZA AQUI
// FAZENDO O CONTADOR RECEBER '0' E FINALIZAR O LACO
// TAMBEM DELETA O LOTE '0' DO PEDIDO
}
$contador=$contador-1;
}
O que acontece é que esse ultimo if não atualiza corretamente a tabela. A variavel $sobras é calculada corretamente (chequei dando echo nela em todos os lacos e ela é decrementada corretamente). Acontece que se eu colocar nesse laco mais de um valor decremental é como se a linha que diz $sobras=$_POST['quantidadeOLD']; se executasse dentro de cada retorno do While, o que acaba que não atualiza a tal linha da tabela e duplica os dados, como se ela fosse atualizada apenas na ultima volta do laço mas com o valor anterior ao decrecimo do $sobras.
não sei se esta bem claro o problema, estou com a cabeça cheia desse script, mas há algum erro dentro desse while que eu não tenha percebido?
Pergunta
Anderuimm
Bom dia. Estou desenvolvendo um SIG em uma empresa e uma parte de um Script esta pegando no meu pe. não sei exatamente o porque ele não esta funcionando, estou desde ontem de manha olhando ele e etentando fazer ele funcionar.
É assim: Um formulário lista uma série de lotes de produtos em uma tabela. Dentro desta tabela há campos hidden que guardam as informações como número de lote, código do produto e entre outros que deverão ser enviados para o segundo formulário via POST. Cada campo é nomeado de acordo com referência e linha, digamos cod_prod1, cod_prod2, assim por diante, sendo que esse número do nome é definido por uma variável incrementada durante o a montagem da tela, dentro do while, mais ou menos assim:
Bom, espero que de pra entender com essa parte o esquema da nomenclatura de campos. Enfim, o problema é no segundo formulario. Abaixo esta a parte do codigo que esta com problemas:O que acontece é que esse ultimo if não atualiza corretamente a tabela. A variavel $sobras é calculada corretamente (chequei dando echo nela em todos os lacos e ela é decrementada corretamente). Acontece que se eu colocar nesse laco mais de um valor decremental é como se a linha que diz $sobras=$_POST['quantidadeOLD']; se executasse dentro de cada retorno do While, o que acaba que não atualiza a tal linha da tabela e duplica os dados, como se ela fosse atualizada apenas na ultima volta do laço mas com o valor anterior ao decrecimo do $sobras.
não sei se esta bem claro o problema, estou com a cabeça cheia desse script, mas há algum erro dentro desse while que eu não tenha percebido?
Editado por AnderuimmLink para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
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.