Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Conte

Erro atualização estoque

Recommended Posts

boa noite galera.

preciso de uma ajuda de voces.

 

tenho no meu codigo a atualizaçao de estoque de + de um produto.

 

so que mesmo tendo estoque ele da como estoque insuficiente.

segue meu codigo para que possam me ajudar.

 

form:

<form action="gerar_pedido.php?id=<?php echo $id ?>" method="post" name="pedido">
 <div align="center">
 <input type="hidden" name="finalizado" value="2" />
 <?php while ($ositens1=mysql_fetch_array($sql_os1)) { ?>
 <input type="hidden" name="produto[]" value="<?php echo $ositens1[produto]; ?>" />
 <input type="hidden" name="qtd[]" value="<?php echo $ositens1[qtd]; ?>" />
 <?php } ?>
 <input type="submit" value="Gerar Pedido" />
 </div>
</form>

 

gera_pedido.php

 

<?php
   include"../includes/conecta.php";
$id = $_GET['id'];
$ok = true;
$finalizado = $_POST['finalizado'];

		$produto = $_POST['produto'];
		$qtd = $_POST['qtd'];

		$posicoes = count($produto);//pega a quantidade de itens
		for( $i = 0; $i < $posicoes; $i++){

		$anuncie_sql1 = mysql_query("select * from produto WHERE nome = '$produto[$i]'") or die(mysql_error());
		$vetor1 = mysql_fetch_array($anuncie_sql1);

		if($vetor1[qtde] < $qtd) {
    		echo"Estoque insuficiente<br>";
		$ok = false;
		}
		}
		if($ok == true){
       	//monta a query
		for( $i = 0; $i < $posicoes; $i++){

		$sql_up = "update produto SET qtde=(qtde - '{$qtd}') WHERE nome='$produto[$i]''";

       	$sql = mysql_query($sql_up) or die(mysql_error());//executa a query




		echo"Itens Atualizados com sucesso<br>";


	}
	$anuncie_sql = mysql_query("select * from os WHERE id = '$id'") or die(mysql_error());
		$vetor = mysql_fetch_array($anuncie_sql);

		$sql_prodfim = "update os SET finalizado='$finalizado' WHERE id='$id'";
		echo "estoque atualizado com sucesso";

		$sqlpf = mysql_query($sql_prodfim) or die(mysql_error());//executa a query
	}


?>

 

ele so da estoque insuficiente mesmo tendo estoque

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um possível erro é na sua query que diz

 

nome = '$produto[$i]'

 

verifique de executar essa sql para ver se estar retornando, quando se trabalha com nome pode escapacar caracter ou codificação, se o dado não tiver retornando certo use o LIKE ao invés de =

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dê um print_r($vetor) e veja o que está retornando, não deve estar retornando nada na realidade, na consulta troque:

'$produto[$i]'

 

Por:

'".$produto[$i]."'

Compartilhar este post


Link para o post
Compartilhar em outros sites

ESerra mesmo com sua sugestao continuou dando erro.

 

dei print_r no vetor e deu o seguinte resultado.

 

ArrayArray ( [0] => 30 [id_produto] => 30 [1] => 1020 [id_produto1] => 1020 [2] => teste [nome] => teste [3] => 150.00 [precocusto] => 150.00 [4] => 180.00 [precovenda] => 180.00 [5] => 100 [qtde] => 100 [6] => [descricao] => [7] => 2 [id_categoria] => 2 [8] => acessorios [categoria] => acessorios [9] => 1 [id_fornecedor] => 1 [10] => DESIGN FERRAGENS LTDA [fornecedor] => DESIGN FERRAGENS LTDA ) 

 

pelo vetor vi que ele esta baixando as infos do produto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa sua consulta não devia retornar mais de 1 item? só para eu me achar e tentar te ajudar.

 

você fez um for de 0 para quantidade de itens vamos supor que ele é de 10

 

vão retornar 0, 1 , 2 no caso o seu array só retornou um objeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

galera, alquem me de um help.

o trem nao ta dando certo nao.

 

fazendo um print_r do vetor ele esta vindo quando e 1.

quando e mais de 1 ele nao vem.

 

o que posso fazer, ou existe outra maneira de fazer isso???

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu estou com o seu código aberto tentando entender isso:

 

 for( $i = 0; $i < $posicoes; $i++){

  $anuncie_sql1 = mysql_query("select * from produto WHERE nome = '$produto[$i]'") or die(mysql_error());

}

 

digamos que a sua variavel produto tenha o nome de bola.

 

Você esta pesquisando onde o NOME do seu produto é igual bola[0], bola[1], bola[2]

 

ao invés de dar esse for por que não tenta recuperar tudo montar um array dar um foreach e fazer a consulta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz usando foreach e mesmo assim da falando que estoque insuficiente.

 

segue codigo feito com foreach.

 

<?php
include"../includes/conecta.php";
$id = $_GET['id'];
$ok = true;
$finalizado = $_POST['finalizado'];

$produto = $_POST[ 'produto' ];
$qtd = $_POST['qtd'];

$i = 0;
foreach($produto as &$prod){

$anuncie_sql1 = mysql_query("select * from produto WHERE nome = '".$produto[$i]."'") or die(mysql_error());
$vetor1 = mysql_fetch_array($anuncie_sql1);

print_r($vetor1);

if($vetor1['qtde'] < $qtd) {
echo"Estoque insuficiente<br>";
$ok = false;
}
$i++;
}
if($ok == true){
foreach($produto as &$prod){

$sql_up = "update produto SET qtde=(qtde - '{$qtd}') WHERE nome='$produto[$i]'";

$sql = mysql_query($sql_up) or die(mysql_error());//executa a query

		echo"Itens Atualizados com sucesso<br>";

$i++;

} 
$anuncie_sql = mysql_query("select * from os WHERE id = '$id'") or die(mysql_error());
		$vetor = mysql_fetch_array($anuncie_sql);

		$sql_prodfim = "update os SET finalizado='$finalizado' WHERE id='$id'";
		echo "estoque atualizado com sucesso";

		$sqlpf = mysql_query($sql_prodfim) or die(mysql_error());//executa a query
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você usou errado o foreach

 

<?php
include"../includes/conecta.php";
$id = $_GET['id'];
$ok = true;
$finalizado = $_POST['finalizado'];

$produto = $_POST[ 'produto' ];
$qtd = $_POST['qtd'];

foreach($produto as &$prod){

$anuncie_sql1 = mysql_query("select * from produto WHERE nome = '".$prod."'") or die(mysql_error());
$vetor1 = mysql_fetch_array($anuncie_sql1);


if($vetor1['qtde'] < $qtd) {
echo"Estoque insuficiente<br>";
$ok = false;
}
$i++;
}
if($ok == true){
foreach($produto as $prod){

$sql_up = "update produto SET qtde=(qtde - '{$qtd}') WHERE nome='$prod'";

$sql = mysql_query($sql_up) or die(mysql_error());//executa a query

                       echo"Itens Atualizados com sucesso<br>";

$i++;

} 
$anuncie_sql = mysql_query("select * from os WHERE id = '$id'") or die(mysql_error());
                       $vetor = mysql_fetch_array($anuncie_sql);

                       $sql_prodfim = "update os SET finalizado='$finalizado' WHERE id='$id'";
                       echo "estoque atualizado com sucesso";

                       $sqlpf = mysql_query($sql_prodfim) or die(mysql_error());//executa a query
               }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

não li tudo, nem interpretei, ..

 

Vamos pela lógica, o seu erro é "Estoque insuficiente<br>".

 

Então ele está entrando nesta condição:

 

if($vetor1['qtde'] < $qtd) {
echo"Estoque insuficiente<br>";

 

Da um do $vetor1 e do $qtd.

 

E posta aí pra gente.

 

Abraço.

 

Dicas:

* Use PDO, é simples.

* Utilize como referência um código, pode ser AI.(Sempre use ele para SELECT/UPDATE/DELETE). Utilizar o nome não é eficiente, entre outros motivos.

 

 

Pelo que entendi isto é para OS, certo?

 

Quando finaliza a OS teria que dar baixa nos itens utilizados nela?

 

Caso seja isto, poderia ser feito diretamente no BD(TRIGGER/FUNCTION).

 

EDIT:

 

Para ser menos chato, copiei o código e dei uma olhada:

 

<?php
   include"../includes/conecta.php";
   $id = $_GET['id'];
   $ok = true;
   $finalizado = $_POST['finalizado'];

   $produto = $_POST['produto'];
   $qtd = $_POST['qtd'];

   $posicoes = count($produto);//pega a quantidade de itens
   for( $i = 0; $i < $posicoes; $i++)
   {
       // AQUI ENTENDO QUE VOCÊ PERCORRE TODOS OS PRODUTOS PARA FAZER UMA BUSCA DE CADA VEZ.
       $anuncie_sql1 = mysql_query("select * from produto WHERE nome = '$produto[$i]'") or die(mysql_error());
       $vetor1 = mysql_fetch_array($anuncie_sql1);

       // PELO QUE VI NO ARRAY QUE VOCÊ POSTOU, ELE TEM A POSIÇÃO QTDE, QUE PRESUMO SER REFERENTE AO ESTOQUE ATUAL DESTE PRODUTO.
       // AGORA O QTD DEVERIA VIR DIFERENTE, POIS ASSIM VOCÊ SEMPRE ACESSA O MESMO VALOR, SEMPRE TEM GASTO A MESMA QUANTIDADE PARA TODOS OS PRODUTOS? OU COMO FUNCIONA?
       if($vetor1[qtde] < $qtd)
       {
           echo"Estoque insuficiente<br>";
           $ok = false;
       }
   }

   if($ok == true)
   {
       //monta a query
       for( $i = 0; $i < $posicoes; $i++)
       {
           $sql_up = "update produto SET qtde=(qtde - '{$qtd}') WHERE nome='$produto[$i]''";
           $sql = mysql_query($sql_up) or die(mysql_error());//executa a query
           // E SE DER ERRO? NÃO TEM ROLLBACK?
           echo"Itens Atualizados com sucesso<br>";
       }

       $anuncie_sql = mysql_query("select * from os WHERE id = '$id'") or die(mysql_error());
       $vetor = mysql_fetch_array($anuncie_sql);

       $sql_prodfim = "update os SET finalizado='$finalizado' WHERE id='$id'";
       echo "estoque atualizado com sucesso";

       $sqlpf = mysql_query($sql_prodfim) or die(mysql_error());//executa a query
   }
?>

 

Não olhei bem o funcionamento, nem ao certo o que está fazendo, mas parece que deveria vir uma array de quantidades, na mesma ordem dos produtos, e por que não no mesmo array hehe.

 

Atualmente você sempre verifica a mesma quantidade informada para os diferentes produtos.

 

Acredito eu que seu post vem assim(é um exemplo):

 

$produtos array('laranja','maçã', 'bergamota');

$qtde=12;

 

Então entra no for, e faz a busca para laranja, após isto verifica a quantidade com o 12.

Depois a busca da maçã, e verifica novamente com o 12.

..

 

É isto mesmo né?

Compartilhar este post


Link para o post
Compartilhar em outros sites

e ae cara.

no meu caso, o form cada item pode ter sua quantidade a ser baixada do estoque.

 

primeiro para finalizar a os ele tem que verificar se tem estoque e se um item nao tiver ele nao vai dar baixa.

 

entao pode vir tres, quatro produtos e cada um com uma quantidade.

 

mais e basicamente isso que tu colocou no codigo.

 

galera, alquem pode me dar uma sugestao para resolver meu problema, estou para ficar louco aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.