Tenho a função inserir
, e nela tem uma validação de entrada e saída, primeiro ela faz um select com a função count
com um where
referenciando o código do produto, depois ela cai na condição ```if($quantidade_db >= $quantidade || mysqli_num_rows($result) == 0) se a quantidade do banco for maior ou igual quantidade inserida pelo usuário ou se
mysqli_num_rows == 0` ela vai para a inserção, se a condição for falsa, mostra uma mensagem na tela “valor ultrapassa a quantidade em estoque”.
A validação funciona para a saída, mas para entrada, por exemplo, o usuário cadastra o produto com a flag de entrada duas vezes com a quantidade de 50, mas novamente ele cadastra o mesmo produto com a flag de entrada mas com a quantidade de 101, a vai aparecer a mensagem “valor ultrapassa a quantidade em estoque”.
Na entrada o usuário deve digitar a quantidade que ele quiser, e não cair no else
para exibir a mensagem.
Como eu poderia resolver esse problema, ou melhorar a validação?``
O código:
<?php
require_once('./base_de_dados/connect_bd.php');
function inserir(){
//Conectando com o banco de dados
$dbc = conexao();
$retorno = array();
$erros = array();
$admin;
$produto;
$registro;
$quantidade;
//função empty verifica se não tem registro inserido
if($_POST['produto'] == ""){
$erros[] = 'O campo codigo administrador é obrigatório!';
}else{
$produto = $_POST['produto'];
}
if($_POST['admin'] == ""){
$erros[] = 'O campo codigo produto é obrigatório $teste!';
}else{
$admin = $_POST['admin'];
}
if($_POST['registro'] == ""){
$erros[] = 'O campo Registro é obrigatório!';
}else{
$registro = $_POST['registro'];
}
if(empty($_POST['quantidade'])){
$erros[] = 'O campo quantidade é obrigatório!';
}else{
$quantidade = $_POST['quantidade'];
}
if(empty($erros)){
$query = "select SUM(ret.quantidade) AS quantidade,
ret.nome_produto,
ret.id_produto
from(SELECT
SUM(p.quantidade) AS QUANTIDADE,
p.tipo_registro,
p.id_produto,
c.nome AS nome_produto,
c.imagem
FROM estoque p JOIN administrador u
ON u.id_admin = p.id_admin
JOIN cadastro_produtos c
ON c.id_produto = p.id_produto
WHERE p.tipo_registro = 'entrada'
GROUP BY
p.tipo_registro,
p.id_produto,
c.nome,
c.imagem
UNION
SELECT
-SUM(p.quantidade) AS QUANTIDADE,
p.tipo_registro,
p.id_produto,
c.nome AS nome_produto,
c.imagem
FROM estoque p JOIN administrador u
ON u.id_admin = p.id_admin
JOIN cadastro_produtos c
ON c.id_produto = p.id_produto
WHERE p.tipo_registro = 'saida'
GROUP BY
p.tipo_registro,
p.id_produto,
c.nome,
c.imagem)ret
WHERE ret.id_produto = $produto
group by ret.nome_produto,
ret.id_produto";
$result = @mysqli_query($dbc, $query);
$row = mysqli_fetch_array($result);
$quantidade_db = $row['quantidade'];
if($quantidade_db >= $quantidade || mysqli_num_rows($result) == 0){
//inserir no banco de dados
$query = "INSERT INTO estoque(id_estoque, quantidade, tipo_registro, id_admin, id_produto, dt_movimentacao) VALUES (NULL, $quantidade,'$registro', '$admin' ,'$produto',CURRENT_TIMESTAMP)";
$result = @mysqli_query($dbc, $query);
echo "$query";
if($result){
$retorno[] = 'Cadastro realizado com sucesso!';
}else{
$erros[] = 'Ocorreu algum erro ao cadastrar o estoque!';
}
/** if($quantidade_db <= $quantidade || mysqli_num_rows($result) <= 0){
//inserir no banco de dados
$query = "INSERT INTO estoque(id_estoque, quantidade, tipo_registro, id_admin, id_produto, dt_movimentacao) VALUES (NULL, $quantidade,'$registro', '$admin' ,'$produto',CURRENT_TIMESTAMP)";
$result = @mysqli_query($dbc, $query);
echo "$query";
if($result){
$retorno[] = 'Cadastro realizado com sucesso!';
}else{
$erros[] = 'Ocorreu algum erro ao cadastrar o estoque!';
}
}else{
//erro estoque
echo"<script>alert('Primeiro Digite a entrada'); history.go(-1)</script>";
}
**/
}else{
$retorno = $erros;
}
return $retorno;
}?>