Ir para conteúdo

POWERED BY:

Arquivado

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

Guilhermi Vieira Dias

Estoque, update quantidade de produto

Recommended Posts

Eai gente!

 

To tentando fazer um controle de estoque bem simples com PHP, Smarty e MySql, quero atualizar a quantidade em estoque de determinado produto mas não ta dando certo, não ta inserindo no banco, se puderem me ajudar...

 

aqui meu produtos_entrada.php

<?php

    require_once 'session.php';
    require_once 'sm.php';
    require_once 'model/Marcas.php';
    require_once 'model/Categorias.php';
    require_once 'model/Produtos.php';

    $produto = new Produtos();
    $produto->setId($_GET["id"]);
    $produto->load();

    if(isset($_POST["quantidade_atual"])){
        if(empty($_POST["quantidade_atual"]) or 
            empty($_POST["quantidade_entrada"])){

            echo "<script> alert('Todos os campos devem ser preenchidos');
                  history.go(-1);
                  </script>";
                  exit;
        }

        $produto->setQuantidade_atual($_POST["quantidade_atual"]);

         $qtd1 = $_POST["quantidade_atual"];
         $qtd2 = $_POST["quantidade_entrada"];

         $entrada = $qtd1 + $qtd2;

         if($produto->update("set quantidade_atual = '{$entrada}'")){
            echo "<script> alert('Entrada realizada');
                    window.location.href='produtos_estoque.php';
                    </script>";
         }else{
            echo "<script> alert('Entrada não realizada');
                    window.location.href='produtos_estoque.php';
                    </script>";
         }
         exit;
    }

    $campos = array('quantidade_atual'=>$produto->getQuantidade_atual());

    $sm->assign("produto", $campos);
    $sm->display("produtos_entrada.tpl");

    ?>

produtos_entrada.tpl

{include file="cabecalho.tpl"}
{include file="menu.tpl"}
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<hr>
<div>
        <legend> ENTRADA DE PRODUTOS</legend>
        
        <form class="form form-actions" method="post" enctype="multipart/form-data">
        <p class="linhasForm">
            <label for="quantidade_atual"> QUANTIDADE ATUAL </label>
            <input type="text" name="quantidade_atual" size=6 
                   id="quantidade_atual" value="{$produto.quantidade_atual}" />
        </p>

        <p class="linhasForm">
            <label for="quantidade_entrada"> QUANTIDADE ENTRADA </label>
            <input type="text" name="quantidade_entrada" size=6 
                   id="quantidade_entrada"/>
        </p>
        
        <p class="linhasForm">
            <label> </label>
            <input class="btn btn-inverse" type="submit" value="Atualizar estoque"/>
            <input class="btn btn-inverse" type="reset" value="Limpar"/>
        </p>
        </form>
    
    
</div>

ProdutosADO.php

<?php

require_once 'ProdutosTO.php';

class ProdutosADO extends ProdutosTO{

	protected $sqlInsert  = "insert into produtos
							(descricao, quantidade_min, quantidade_atual,
							 precocusto, precovenda, marca_id, categoria_id,
							 medida) values 
								('%s','%s','%s','%s','%s','%s',
									'%s','%s')";

	protected $sqlSelect = "select * from produtos %s";

	protected $sqlUpdate = "update produtos set descricao = '%s', quantidade_min = '%s',
							quantidade_atual = '%s', precocusto = '%s',
							precovenda = '%s', marca_id = %s,
							categoria_id = %s, medida = '%s' 
							where id = %s";

	

	protected $sqlDelete = "delete from produtos where id = %s";


	public function insert(){
		$sql = sprintf($this->sqlInsert, $this->getDescricao(), $this->getQuantidade_min(), $this->getQuantidade_atual(), 
						$this->getPrecocusto(), $this->getPrecovenda(), $this->getMarcaId(), $this->getCategoriaId(), $this->getMedida());
		return $this->runExecID($sql);
	}

	public function select($options = ""){
		$sql = sprintf($this->sqlSelect, $options);
		return $this->runQuery($sql);
	}

	public function update(){
		$sql = sprintf($this->sqlUpdate, $this->getDescricao(),
						$this->getQuantidade_min(),
						$this->getQuantidade_atual(),
						$this->getPrecocusto(),
						$this->getPrecovenda(),
						$this->getMarcaId(),
						$this->getCategoriaId(),
						$this->getMedida(),
						$this->getId());


		return $this->runExec($sql);
	}	

	

	public function delete(){
		$sql = sprintf($this->sqlDelete, $this->getId());
		return $this->runExec($sql);
	}

	public function load(){
		$reg = $this->select("where id =".$this->getId());
		$this->setDescricao($reg[0]['descricao']);
		$this->setQuantidade_min($reg[0]['quantidade_min']);
		$this->setQuantidade_atual($reg[0]['quantidade_atual']);
		$this->setPrecocusto($reg[0]['precocusto']);
		$this->setPrecovenda($reg[0]['precovenda']);
		$this->setMarcaId($reg[0]['marca_id']);
		$this->setCategoriaId($reg[0]['categoria_id']);
		$this->setMedida($reg[0]['medida']);
		return $this;

	}

}

?>

Desculpem o tamanho do post, mas talvez assim fique melhor de entender

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quem é responsável por fazer update nos dados é a classe Produtos, e você não incluiu ela no tópico.

Formule a $sql e dê um print_r para ver a saída. Olhando só o que você postou não têm como saber, talvez você não esteja incluindo a clausula where no update.

Outra coisa que não têm relação com a dúvida, mas se você usa smarty, pq está enviando para a saída, dados com o echo? Crie uma classe de redirecionamento, que recebe a página, a mensagem e já interrompa o script. Isso torna o código mais limpo, além de permitir a customização.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que realmente não consigo fazer nem entender é como eu faço para que aquela soma das duas quantidades seja atualizada no banco como a quantidade atual do estoque. queria igualar o valor do campo quantidade_atual ao valor da variável $entrada que é resultado da soma dos valor que eu vou inserir.... Mas realmente já tentei fazer esse update de diversas formas e não rolou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste a sua classe produtos no fórum.

 

Provavelmente seu problema deve estar aqui:

$produto->setQuantidade_atual($_POST["quantidade_atual"]);

Você está setando a quantidade atual com o valor recebido de $_POST e está fazendo antes do cálculo;

Acho que não é isso que você quer.

 

Tente fazer isso:

$qtd1 = $_POST["quantidade_atual"];
$qtd2 = $_POST["quantidade_entrada"];
entrada = $qtd1 + $qtd2;
$produto->setQuantidade_atual($entrada);

Assim você seta na classe produto a quantidade atual com o valor dentro da variável $entrada.

 

Nâo sei como está sua classe produto mas essa linha

if($produto->update("set quantidade_atual = '{$entrada}'")){
....

Nâo sei mas não parece fazer sentido passar um string como parâmetro, contendo uma parte de uma sql para a função update, mas para confirmar isso só olhando a classe.

Compartilhar este post


Link para o post
Compartilhar em outros sites


<?php

require_once 'ProdutosADO.php';

class Produtos extends ProdutosADO{


    protected $sqlSelectJoin = "select * 
                                from produtos p
                                inner join marcas m on p.marca_id = m.id
                                inner join categorias c on p.categoria_id = c.id
                                order by descricao
                                %s";

    protected $sqlSelectJoin2 = "select *
                                from produtos p
                                inner join marcas m on m.id = p.marca_id
                                inner join categorias c on c.id = p.categoria_id
                                where 
                                quantidade_atual = quantidade_min %s";


    protected $sqlUpdateEntrada = "update produtos set quantidade_atual" ;                           

    public function selectJoin($options = "") {
        $sql = sprintf($this->sqlSelectJoin, $options);
        return $this->runQuery($sql);
    }

    

    public function selectJoin2($options = "") {
        $sql = sprintf($this->sqlSelectJoin2, $options);
        return $this->runQuery($sql);
    }

    public function updateEntrada(){
        $sql = sprintf($this->sqlUpdateEntrada, 
                        $this->getQuantidade_atual(),
                        $this->getId());

        print_r($sql);
        return $this->runExec($sql);
    }

}

?>

Essa a a classe Produtos.php

<?php

require_once 'ProdutosTO.php';

class ProdutosADO extends ProdutosTO{

	protected $sqlInsert  = "insert into produtos
							(descricao, quantidade_min, quantidade_atual,
							 precocusto, precovenda, marca_id, categoria_id,
							 medida) values 
								('%s','%s','%s','%s','%s','%s',
									'%s','%s')";

	protected $sqlSelect = "select * from produtos %s";

	protected $sqlUpdate = "update produtos set descricao = '%s', quantidade_min = '%s',
							quantidade_atual = '%s', precocusto = '%s',
							precovenda = '%s', marca_id = %s,
							categoria_id = %s, medida = '%s' 
							where id = %s";

	

	protected $sqlDelete = "delete from produtos where id = %s";


	public function insert(){
		$sql = sprintf($this->sqlInsert, $this->getDescricao(), $this->getQuantidade_min(), $this->getQuantidade_atual(), 
						$this->getPrecocusto(), $this->getPrecovenda(), $this->getMarcaId(), $this->getCategoriaId(), $this->getMedida());
		return $this->runExecID($sql);
	}

	public function select($options = ""){
		$sql = sprintf($this->sqlSelect, $options);
		return $this->runQuery($sql);
	}

	public function update(){
		$sql = sprintf($this->sqlUpdate, $this->getDescricao(),
						$this->getQuantidade_min(),
						$this->getQuantidade_atual(),
						$this->getPrecocusto(),
						$this->getPrecovenda(),
						$this->getMarcaId(),
						$this->getCategoriaId(),
						$this->getMedida(),
						$this->getId());


		return $this->runExec($sql);
	}	

	

	public function delete(){
		$sql = sprintf($this->sqlDelete, $this->getId());
		return $this->runExec($sql);
	}

	public function load(){
		$reg = $this->select("where id =".$this->getId());
		$this->setDescricao($reg[0]['descricao']);
		$this->setQuantidade_min($reg[0]['quantidade_min']);
		$this->setQuantidade_atual($reg[0]['quantidade_atual']);
		$this->setPrecocusto($reg[0]['precocusto']);
		$this->setPrecovenda($reg[0]['precovenda']);
		$this->setMarcaId($reg[0]['marca_id']);
		$this->setCategoriaId($reg[0]['categoria_id']);
		$this->setMedida($reg[0]['medida']);
		return $this;

	}

}

?>

e essa é a ProdutosADO.php

Mas de qualquer manei funcionou como tu tinha falado!

 

Valeu pela força brother!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na linha

if($produto->update("set quantidade_atual = '{$entrada}'")){
....

Você não precisa passar parâmetro para o $produto->update.

if($produto->update()){
...

Na classe ProdutosAdo que a produtos herda, o método update não precisa de parâmetro para ser executado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

Estou com um problema parecido, quando executo aparece o erro: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '+ 232 WHERE id='1'' at line 1' in C:\AppServ\www\sistema\action_entradaestoque.php:100 Stack trace: #0 C:\AppServ\www\sistema\action_entradaestoque.php(100): PDOStatement->execute() #1 {main} thrown in C:\AppServ\www\sistema\action_entradaestoque.php on line100.

 

 

Meus BD:

 

CREATE TABLE tab_entradaestoque(

id int auto_increment primary key not null,

nomeproduto varchar(100) not null,

codigoproduto varchar(12) not null,

nomefornecedor varchar(100) not null,

valorunitario float(10) not null,

quantidade int not null,

nfiscal int not null,

data_cadastro timestamp default CURRENT_TIMESTAMP

);

CREATE TABLE tab_controleestoque(

id int auto_increment primary key not null,

nomeproduto varchar(100) not null,

codigoproduto varchar(12) not null,

quantidadetotal int not null,

quantidadeentrante int not null,

quantidadesaida int not null

);

entradaprodutoestoque.php

<!DOCTYPE html>

<html>
<head>
<title> L's Food - Registro de Entrada - Estoque </title>
<Meta http-equiv = "Content-Type" content = "charset = UTF-8" />
<!-- JQUERY -->
<script type="text/javascript" src="bootstrap-3.3.4-dist/js/jquery-1.11.3.min.js"></script>
<script type="text/javascript" src="bootstrap-3.3.4-dist/js/jquery-1.11.3.js"></script>
<!-- TWITTER BOOTSTRAP CSS -->
<link rel="stylesheet" href="bootstrap-3.3.4-dist/css/bootstrap.css">
<link rel="stylesheet" href="bootstrap-3.3.4-dist/css/bootstrap.min.css">
<link rel="stylesheet" href="bootstrap-3.3.4-dist/css/bootstrap-theme.css">
<link rel="stylesheet" href="bootstrap-3.3.4-dist/css/bootstrap-theme.min.css">
<!-- TWITTER BOOTSTRAP JS -->
<script type="text/javascript" src="bootstrap-3.3.4-dist/js/bootstrap.js"></script>
<script type="text/javascript" src="bootstrap-3.3.4-dist/js/bootstrap.min.js"></script>
</head>
<body>
<div id="main">
<nav id="nav" class="navbar navbar-default navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="Home.html" style="padding-top: 10px;">
<img alt="Brand" src="images/logoMenu.jpg">
</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Cadastros <span class="caret"></span></a>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu">
<li><a href="http://localhost:8024/sistema/cadastro.php">Cadastrar Cliente</a></li>
<li><a href="http://localhost:8024/sistema/cadastrofornecedor.php">Cadastrar Fornecedor</a></li>
<li><a href="http://localhost:8024/sistema/cadastroprodutoestoque.php">Cadastrar Produto - Estoque</a></li>
<li><a href="http://localhost:8024/sistema/cadastroproduto.php">Cadastrar Produto - Venda</a></li>
<li><a href="http://localhost:8024/sistema/cadastrousuario.php">Cadastrar Usuário</a></li>
<li><a href="http://localhost:8024/sistema/index.php">Consultar Cliente </a></li>
<li><a href="http://localhost:8024/sistema/indexfornecedor.php">Consultar Fornecedor </a></li>
<li><a href="http://localhost:8024/sistema/indexprodutoestoque.php">Consultar Produto - Estoque</a></li>
<li><a href="http://localhost:8024/sistema/indexproduto.php">Consultar Produto - Venda</a></li>
<li><a href="http://localhost:8024/sistema/indexusuario.php">Consultar Usuário</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Lançamentos <span class="caret"></span></a>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu">
<li><a href="http://localhost:8024/LsFood/EfetuarVenda.php">Lançar Venda </a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Relatórios <span class="caret"></span></a>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu">
<li><a href="http://localhost:8024/LsFood/CadastroProduto.html">Cadastro de Produto </a></li>
<li><a href="http://localhost:8024/LsFood/CadastroProduto.html">Controle de Saída </a></li>
<li><a href="http://localhost:8024/LsFood/CadastroProduto.html">Faturamento </a></li>
</ul>
</li>
<button type="button" onClick="Logout()" style="margin-top:11px;margin-left: 888px;">Sair</button>
</ul>
</div>
</div>
</nav>
</div>
</nav>
</body>
</html>
<style type="text/css">
ul.nav li.dropdown:hover ul.dropdown-menu{
display: block;
}
#main{
min-height: 30%;
margin: 0 auto 55px;
}
</style>
<?php
include 'conexao.php';
// Recebe o id do produto via GET
$id_cliente = (isset($_GET['id'])) ? $_GET['id'] : '';
// Valida se existe um id e se ele é numérico
if (!empty($id_cliente) && is_numeric($id_cliente)):
// Captura os dados do cliente solicitado
$conexao = conexao::getInstance();
$sql = "SELECT id, nome, codigo, categoria FROM tab_produtoestoque WHERE id = :id";
$stm = $conexao->prepare($sql);
$stm->bindValue(':id', $id_cliente);
$stm->execute();
$cliente = $stm->fetch(PDO::FETCH_OBJ);
endif;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/custom.css">
</head>
<body>
<div class='container'>
<fieldset>
<legend><h1>Formulário - Registrar Entrada - Estoque</h1></legend>
<?php if(empty($cliente)):?>
<h3 class="text-center text-danger">Cliente não encontrado!</h3>
<?php else: ?>
<form action="action_entradaestoque.php" method="post" id='form-contato' enctype='multipart/form-data'>
<div class="form-group">
<label for="nome">Nome</label>
<input type="text" class="form-control" id="nome" name="nome" value="<?=$cliente->nome?>" placeholder="Infome o Nome">
<span class='msg-erro msg-nome'></span>
</div>
<div class="form-group">
<label for="codigo">Código</label>
<input type="text" class="form-control" id="codigo" maxlength="12" name="codigo" value="<?=$cliente->codigo?>" placeholder="Informe o Código">
<span class='msg-erro msg-codigo'></span>
</div>
<div class="form-group">
<label for="valor">Valor Unitário</label>
<input type="valor" class="form-control" id="valor" name="valor" placeholder="Informe o Valor Unitário">
<span class='msg-erro msg-valor'></span>
</div>
<div class="form-group">
<label for="quantidade">Quantidade </label>
<input type="quantidade" class="form-control" id="quantidade" name="quantidade" placeholder="Informe a Quantidade Adquirida"disable>
<span class='msg-erro msg-quantidade'></span>
</div>
<div class="form-group">
<label for="nfiscal">Nº Nota Fiscal </label>
<input type="nfiscal" class="form-control" id="nfiscal" maxlength="15" name="nfiscal" placeholder="Informe o Nº da Nota Fiscal de Compra">
<span class='msg-erro msg-nfiscal'></span>
</div>
<div class="form-group">
<label for="categoria">Fornecedor</label>
<select class="form-control" name="categoria" id="categoria">
<option value="">Selecione o Fornecedor</option>
<option value="Alimento">Alimento</option>
</select>
</div>
<input type="hidden" name="acao" value="editar">
<input type="hidden" name="id" value="<?=$cliente->id?>">
<button type="submit" class="btn btn-primary" id='botao'>
Gravar
</button>
<a href='indexprodutoestoque.php' class="btn btn-danger">Cancelar</a>
</form>
<?php endif; ?>
</fieldset>
</div>
<script type="text/javascript" src="js/custons.js"></script>
</body>
</html>
action_produtoestoque.php
<html>
<head>
<meta charset="utf-8">
<title>L's Food - Registro de Entrada - Estoque</title>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/custom.css">
</head>
<body>
<div class='container box-mensagem-crud'>
<?php
require 'conexao.php';
// Atribui uma conexão PDO
$conexao = conexao::getInstance();
// Recebe os dados enviados pela submissão
$acao = (isset($_POST['acao'])) ? $_POST['acao'] : '';
$nome = (isset($_POST['nome'])) ? $_POST['nome'] : '';
$valor = (isset($_POST['valor'])) ? $_POST['valor'] : '';
$codigo = (isset($_POST['codigo'])) ? $_POST['codigo'] : '';
$quantidade = (isset($_POST['quantidade'])) ? $_POST['quantidade'] : '';
$nfiscal = (isset($_POST['nfiscal'])) ? $_POST['nfiscal'] : '';
$categoria = (isset($_POST['categoria'])) ? $_POST['categoria'] : '';
// Valida os dados recebidos
if ($acao != 'excluir' && $acao != 'editar'):
if ($nome == '' || strlen($nome) < 3):
$mensagem .= '<li>Favor preencher o Nome.</li>';
endif;
if ($codigo == ''):
$mensagem .= '<li>Favor preencher o Código.</li>';
endif;
if ($categoria == ''):
$mensagem .= '<li>Favor preencher a Categoria.</li>';
endif;
if ($nfiscal == ''):
$mensagem .= '<li>Favor preencher o Número da Nota Fiscal de Compra.</li>';
endif;
if ($quantidade == ''):
$mensagem .= '<li>Favor preencher a Quantidade.</li>';
endif;
if ($valor == ''):
$mensagem .= '<li>Favor preencher o Valor Unitário.</li>';
endif;
if ($mensagem != ''):
$mensagem = '<ul>' . $mensagem . '</ul>';
echo "<div class='alert alert-danger' role='alert'>".$mensagem."</div> ";
exit;
endif;
endif;
// Verifica se foi solicitada a inclusão de dados
if ($acao == 'editar'):
$sql = 'INSERT INTO tab_entradaestoque (nomeproduto, codigoproduto, valorunitario, nomefornecedor, quantidade, nfiscal)
VALUES(:nome, :codigo, :valor, :categoria, :quantidade, :nfiscal)';
$stm = $conexao->prepare($sql);
$stm->bindValue(':nome', $nome);
$stm->bindValue(':codigo', $codigo);
$stm->bindValue(':categoria', $categoria);
$stm->bindValue(':valor', $valor);
$stm->bindValue(':quantidade', $quantidade);
$stm->bindValue(':nfiscal', $nfiscal);
$retorno = $stm->execute();
/* $conexao = conexao::getInstance();
$totalentrante = "SELECT quantidadeentrante FROM tab_controleestoque WHERE codigoproduto = '$codigo'";
$stm = $conexao->prepare($totalentrante);
$stm->bindValue(':codigoproduto', $codigo);
$stm->execute();
$cliente = $stm->fetch(PDO::FETCH_OBJ);
$valorentrante = $quantidade;
$valortotal = ($totalentrante + $valorentrante);
$sql = "UPDATE tab_controleestoque SET quantidadeentrante='$valortotal' WHERE codigoproduto = '$codigo'";
$stm = $conexao->prepare($sql);
$retornos = $stm->execute();*/
$sql = "UPDATE tab_controleestoque SET quantidadeentrante + $quantidade WHERE id='1'";
$stm = $conexao->prepare($sql);
$stm->bindValue(':quantidadeentrante', $quantidade);
$retorno = $stm->execute();
if ($retorno):
echo "<div class='alert alert-success' role='alert'>Entrada registrada com sucesso!</div> ";
else:
echo "<div class='alert alert-danger' role='alert'>Erro ao inserir entrada!</div> ";
endif;
echo "<meta http-equiv=refresh content='3;URL=indexprodutoestoque.php'>";
endif;
?>
</div>
</body>
</html>

Alguem tem ideia do que é esse erro?

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.