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

[RESOLVIDO] Problema em Script


Anderuimm

Pergunta

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:

$conter=0;
$estoques='';
echo "<br><table border=\"1\" bordercolor=\"#000000\" cellpadding=\"0\" cellspacing=\"0\" ><tr bordercolor=\"#000000\" >
    <th bordercolor=\"#000000\" border=\"1\"> &nbsp Sim &nbsp </th>
    <th bordercolor=\"#000000\" border=\"1\"> &nbsp Lote &nbsp </th>
    <th bordercolor=\"#000000\" border=\"1\"> &nbsp Data &nbsp </th>
    <th bordercolor=\"#000000\" border=\"1\"> &nbsp Estocado &nbsp </th>
    <th bordercolor=\"#000000\" border=\"1\"> &nbsp Retirado &nbsp </th>
    </tr>";
    #####  LISTAGEM DE LOTES COM NOMENCLATURA DINAMICA DE CAMPOS
    
    while ($estoques=mysql_fetch_array($encontralotes))
{
    $conter=$conter+1;
echo "<tr>
            <td align=\"center\"><input type=\"checkbox\" name=\"add{$conter}\" /></td>
            <td align=\"center\" ><input type=\"hidden\" name=\"lote{$conter}\" value=\"{$estoques['lote']}\" > &nbsp <b>{$estoques['lote']}</b> &nbsp </td>
            <td align=\"center\" > &nbsp <b>{$estoques['data_lote']}</b> &nbsp </td>
            <td align=\"center\" ><input type=\"hidden\" name=\"est{$conter}\" value=\"{$estoques['quantidade']}\"  &nbsp ><b>{$estoques['quantidade']}</b> &nbsp </td>
            <td align=\"center\" >&nbsp; <input type=\"text\" name=\"qt{$conter}\" size=\"7\" > &nbsp;</td>
      </tr>";
    
    
}
    #####  FIM DA LISTAGEM DE LOTES
    echo "</table>";
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&ccedil;&atilde;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 "&lt;script type=\"text/javascript\">
alert('Quantidade solicitada é maior que a quantidade em estoque para o lote ".$_POST[$nomelote].".');
</script>";        
                        }
                        
                    }
                    else
                    {
                    echo "&lt;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?

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

2 respostass a esta questão

Posts Recomendados

  • 0

Encontrei o erro... e foi burrice mesmo, erro de logica.

A tive de alterar isso e ele agora funciona normal:

De:

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&ccedil;&atilde;o de lote.</i>";
.
.
.
 $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());    // alterado AND quantidade='{$_POST['quantidadeOLD']}'

PARA

[code[ if ($_POST[$nomeqt]<=$_POST[$nomeest]) // $nomeest EHA QUANTIDADE TOTAL EM ESTOQUE

{

##SET-UP DE VARIAVEIS PRA INSERCAO

$sobrasOLD=$sobras; // << Linha adicionada

$sobras=$sobras-$_POST[$nomeqt];

$memo=Alterado pedido:<BR>Lote: <b>".$_POST[$nomelote]."</b><br>Quantidade adicionada: <b>".$_POST[$nomeqt]."</b><br><i>Quantidade referente a altera&ccedil;&atilde;o de lote.</i>";

.

.

.

$altpedido=mysql_query("UPDATE detalhepedido SET quantidade='{$sobras}' WHERE cod_pedido='{$_POST['cod_pedido]}' AND cod_para_nf='{$_POST['cod_produto']}' AND quantidade='{$sobrasOLD}' AND num_lote='0' ") or die (mysql_error()); // para AND quantidade='{$sobrasOLD}'[\code]

Ele não estava usando o valor decrescido, mas sim apenas o ultimo valor do somatorio. Agora o script funciona corretamente.

Obrigado, podem fechar o tópico, por favor.

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,2k
    • Posts
      652k
×
×
  • Criar Novo...