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

(Resolvido) update drento de uma while mysql/php


joetec

Pergunta

Senhores estou fazendo um controle de estoque e a parte dos relatorios parece que vai me dar trabalho.

segue o codigo onde está a dúvida.

while($escrever=mysql_fetch_array($resm))
{
/*Escreve cada linha da tabela*/

 echo "
<tr>
<td>$escrever[item]</td>
<td>$escrever[desc]</td>
<td>$escrever[unid]</td>
<td>$escrever[ref]</td>
<td>$escrever[estmin]</td>
<td>$escrever[estmax]</td>
<td>$escrever[data]</td>
<td>$escrever[ent]</td>
<td>$escrever[sai]</td>
<td>";
$saldo1="$escrever[ent]";
$saldo2="$escrever[sai]";
$sinicial2 = $sinicial + $saldo1 -( $saldo2); echo $sinicial2;
        
 echo"</td>
<td>$escrever[historico]</td>
</td> </tr>";

    [b]mysql_query("UPDATE  `estoque`.`saldoinicial` SET  `sinicial` =  '$sinicial2'");[/b]   };

Notem que o update acima está dentro da while e eu gostaria que ele atualize a cada linha o item sinicial da tabela saldoinicial só que isto só acontece após a ultima linha da while escrita, quando na verdade eu gostaria que ele atualiza- se ao final de cada linha.

já tentei de outras maneiras mas ainda não tive resultados. conto com a ajuda de todos.

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Parceiro,

Esse problema você pode resolver debugando seu código.

Imprima na tela a linha que está sendo executado o update.

$strSql = "UPDATE  `estoque`.`saldoinicial` SET  `sinicial` =  '$sinicial2'"
print $strSql . '<br />';
//mysql_query($strSql);
_Algumas questões são: Está implementando algum controle de acesso por schema estoque.saldoinicial Deixe só:
UPDATE saldoinicial
Ou esse é o nome da tabela? estoque.saldoinicial _Vc não está passando um argumento WHERE para procurar o registro a ser atualizado. Este UPDATE está atualizando todos os registros da coluna sinicial O correto seria mais ou menos isso:
UPDATE saldoinicial SET scinicial = '$sinicial2' WHERE coluna = '$valorASerProcurado'

Link para o comentário
Compartilhar em outros sites

  • 0

Caro Romero,

Fiz as modificações mas, ainda assim não tenho o efeito desejado. a minha idéia é fazer um relatório onde mostre dia a dia a partir de um período previamente selecionado as entradas e saída de material e o saldo restante a partir de cada entrada e saída de material. tal como em um extrato bancário. o único meio que encontrei para fazer isto seria armazenar o saldo que fica dentro de uma tabela no sql que eu pudesse atualizar este valor a cada alteração de saldo para que novamente o utilize para deduzir ou acrescentar novo valor conforme o caso. por isso acredito que devo fazer o update desta célula com o novo valor dentro da while só que mesmo dentro da while o update só ocorre após o ultimo loop. o que para mim deveria ocorrer ao final de cada loop para preencher a linha da tabela que mostra os dados.

segue como está o codigo agora.

$resm = mysql_query("SELECT * FROM materiais, entsai,saldoinicial
WHERE materiais.item =$item
AND entsai.item =$item
AND entsai.data
BETWEEN  '$dataini'
AND  '$datafim'");

while($escrever=mysql_fetch_array($resm))
{

 print "
<tr><td>$escrever[item]</td><td>$escrever[desc]</td><td>$escrever[unid]</td><td>$escrever[ref]</td><td>$escrever[estmin]</td>
<td>$escrever[estmax]</td><td>$escrever[data]</td><td>$escrever[ent]</td><td>$escrever[sai]</td>
<td>";
$saldo1="$escrever[ent]";
$saldo2="$escrever[sai]";
$sinicial2 = ($sinicial + $saldo1) - $saldo2; print $sinicial2;
$strSql = "UPDATE `saldoinicial` SET  `sinicial` =  '$sinicial2'";
mysql_query($strSql);
    print $strSql;
 print "</td>
<td>$escrever[historico]</td>
</td></tr>";

 };

coloquei a pagina no miarroba para vocês verem o resultado da pesquisa. (lembro que não está pronta)

http://estoque.webcindario.com/localizar.php

localizem o item 20 e busquem o relatório no período de 2010/08/01 a 2010/08/31

Link para o comentário
Compartilhar em outros sites

  • 0

Parceiro,

Vamos ver se entendi seu problema:

1 – Você tem uma tabela entsai que registra: data da movimentação, o material, a operação: (entrada ou saída), e a quantidade?

2 – você tem uma tabela materiais que armazena: o material e quantidade do material em estoque?

Para saber a quantidade de materiais que saíram e entraram, acredito que a maneira mais fácil seria fazer uma query com a função sum() na coluna quantidade de sua tabela entsai pasando a data inicial e final como parametro.

Mais o menos da seguinte forma:

SELECT SUM(qtd) FROM entsai WHERE operacao = 'saida' and dataMovimento between '2010-08-01' and '2010-08-31'

SELECT SUM(qtd) FROM entsai WHERE operacao = 'entrada' and dataMovimento between '2010-08-01' and '2010-08-31'

Seria isso?

Link para o comentário
Compartilhar em outros sites

  • 0

aproximadamente isto. a diferença é que eu não tenho na tabela uma coluna para indicar a operação e sim uma coluna para entrada e outra para saída.

Estava pensando em usar a função SUM para para pegar o saldo inicial e em outras ocasiões como o saldo total mas, a minha idéia e pegar o saldo de um período a cada operação por exemplo.

hoje meu saldo é X mas fazendo a consulta para o período do mês de agosto preciso pegar o saldo que eu tinha no final do mês de julho ai eu uso SUM para somar todo valor anterior a agosto da coluna entrada e todo valor da coluna saída e subtrair um pelo outro que seria o saldo inicial. o qual eu armazeno em uma célula da tabela saldoinicial no BD estoque. para poder somar com a próxima entrada e subtrair pela próxima saída. fazendo aquele efeito de extrato bancário

Saldo inicial 20

dia entrada saída saldo

1____ 5____0_____ 25 o problema é que a cada linha o saldo muda por isso o saldo inicial tem que alterar a cada linha escrita assim estou tentando usar o update dentro da while

2____0____10_____15 exemplo no dia 1 ao lado faco a seguinte operação 20(saldoinicial) +5( entrada) - 0(saida)=25(saldo) antes de passar para dia 2 preciso alterar o saldo inicial

3____3____0______18 para o novo saldo no caso 25 ai entra o update assim no dia 2 poso fazer a mesma operacão 25(saldoinicial) +0( entrada) - 10(saida)=15(saldo)

4____12___0______30 e repetidamente até o final da consulta. só que o update que altera o valor do saldo inicial só ocorre uma vez e não a cada linha como deveria ocorrer.

andei olhando alguns scripts de estoque e nenhum possui este tipo de relatório e não gostaria de desistir por isso a insistência. obrigado a ajuda.

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

  • 0

Parceiro,

No próprio exemplo que você descreveu você já mostrou uma solução.

Crie um campo saldo na sua tabela entsai, dessa forma, para toda ação de entrada e saída de materiais você salva a quantidade de materiais em estoque na coluna saldo.

Eu criei a tabela e fiz uns testes.

Id data            entrada saída  saldo
1  2010-01-01  5           0       30
2  2010-01-05  0           10     20
3  2010-01-10  15         0       35
4  2010-02-01  5           0      40
Nesta query, passo o mês e ano como parâmetro e retorno o ultimo registro de saldo da transação de saída/entrada do mês de janeiro. Dessa forma o ultimo registro retrata o saldo final do mês. 'Saldo do mês de janeiro de 2010'
SELECT saldo 
FROM  entsai 
             WHERE year(data) = 2010 and month(data) = 1
             ORDER BY data DESC
             LIMIT 1

Nesta query retorna a media do saldo para um determinado período de datas.

'Media do saldo por periodo'

SELECT AVG(saldo) 

FROM entsai

WHERE data between '2010-01-01' and '

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

  • 0

Caro Romero,

O que eu queria realmente era criar o saldo por meio de calculo após extrair os dados da tabela mas realmente esta difícil, já fiz varias pesquisas na net e parece que eu estou tentando neste caso fazer algo que não existe.

Vou optar pela sua sugestão e criar a coluna saldo.

Obrigado pelo tempo dispensado.

espero conseguir concluir o trabalho que postarei aqui no forum.

Link para o comentário
Compartilhar em outros sites

  • 0

joetec,

Pensando aqui, fiz um exeplo que acredito ajudar a extrair o saldo de materiais para um periodo,

você entra com dois periodos e faz o processamento.

$dtInicial = '2010-01-05';
$dtFinal = '2010-01-10';

'Retorna o ultimo saldo antes do periodo'
select saldo AS ultimoSaldo  
FROM entsai 
WHERE data < '$dtInicial' 
ORDER BY id DESC


'Retorna a quantidade de entrada e saida para o perido'
SELECT SUM(entrada) AS qtdEntrada,SUM(saida) AS qtdSaida 
FROM entsai 
WHERE data between '$dtInicial' AND '$dtFinal'

' Realiza a expressão e obtém o saldo do período           '
' saldoDoPeriodo = (ultimoSaldo + qtdEntrada) - qtdSaida'

Link para o comentário
Compartilhar em outros sites

  • 0

senhores e consegui depois de muita tentativa e erros e ajuda do romero fazer o script do jeito que queria assim não precisarei armazenar dia a dia o saldo do estoque.

deixo minha contribuição e lembro que postarei mais dúvidas pois este projeto é grande.

$dataini = $_POST["dataini"]; //recebe valor da pag. selecionar.php
$datafim = $_POST["datafim"];  //recebe valor da pag. selecionar.php

echo"<table border=1><tr>
<td>Item</td>
<td>Descrição</td>
<td>Unidade</td>
<td>Referência</td>
<td>Estoque mínimo</td>
<td>Estoque máximo</td>
<td>Data da movimentacão</td>
<td>Entrada de Material</td>
<td>Saída de Material</td>
<td>Saldo</td><td>Historico</td> </td>
</tr>";    //   cria o cabeçario da tabela

$result = mysql_query("SELECT SUM( ent )as entrada, SUM(sai) as saida
FROM entsai  WHERE data < $dataini");  // Pega o total de item de entrada e saida de materiais da data
//anterior  a pesquisada para subtrair um pelo outro e encontrar o saldo atual

while($row = mysql_fetch_array($result))
{
       $entrada = $row['entrada'];
        $saida =$row['saida'];
}; // salva a quandidade de material das colunas entrada e saida nas variaveis.

$saldo = $entrada - $saida; // Faz a subtração dos valores encontrados
$inseri_saldo = mysql_query( "UPDATE `saldoinicial` SET  `sinicial` =  $saldo where indice = 1");//cria a varial que atualiza o saldo para o valor encontrado
$inseri_saldo;// inseri o valor encontrado na subtração


$resm = mysql_query("SELECT * FROM materiais, entsai,saldoinicial
WHERE materiais.item =$item
AND entsai.item =$item
AND entsai.data
BETWEEN  '$dataini'
AND  '$datafim'");   //   Cria a varialvel que seleciona os dados a serem mostrado na tabela

while($escrever=mysql_fetch_array($resm))
{
 print "
<tr><td>$escrever[item]</td>
<td>$escrever[desc]</td><td>$escrever[unid]</td>
<td>$escrever[ref]</td><td>$escrever[estmin]</td>
<td>$escrever[estmax]</td><td>$escrever[data]</td>
<td>$escrever[ent]</td><td>$escrever[sai]</td>
<td>";  // Faz o looping para escrever na tabela os itens selecionados
$saldo1= "$escrever[ent]";  //
$saldo2="$escrever[sai]";  //   salva a valor de ent , sai e historico nas variaveis durante o looping.
$historico= "$escrever[historico]";//

$res = mysql_query("SELECT *   FROM  `saldoinicial`   WHERE indice =1;"); //  cria a variavel que seleciona o saldo inicial inserido anteriormente
while($escrever=mysql_fetch_array($res))
{
$sinicial ="$escrever[sinicial]"; };  // Faz o looping para salvar a varialvel com o saldo inicial
$sinicial2 = ( $sinicial + $saldo1) - $saldo2;  // Faz o calculo para saber o saldo atual
$atualiza = mysql_query("UPDATE `saldoinicial` SET  `sinicial` =  $sinicial2 where indice = 1"); //Cria a variavel para atualizar  no BD o saldo inicial
$atualiza;  //atualiza o saldo inicial
print "$sinicial2";// escreve o saldo atual em cada linha da tabela a cada looping
print "</td>
<td>$historico</td>
</td></tr>";
 };

O resultado prévio pode ser visto no link abaixo.

http://estoque.webcindario.com/localizar.php localizem o item 20 e busquem o relatório no período de 2010/08/01 a 2010/08/31

Editado por *FIT*
Adicionar a tag [code]! *FIT*
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,9k
×
×
  • Criar Novo...