I have the function inserir
, and it has input and output validation, it first makes a select
with the function count
with a where
referencing the product code, then it drops in the if($quantidade_db >= $quantidade || mysqli_num_rows($result) == 0)
if the amount of the bank is greater or equal amount entered by the user or if mysqli_num_rows == 0
it goes to the insert, if the condition is false, it shows a message on the screen "value exceeds the quantity in stock".
The validation works for the output, but for input, for example, the user registers the product with the input flag twice with the quantity of 50, but again it registers the same product with the input flag but with the quantity of 101, the message "value exceeds the quantity in stock" will appear.
In the input the user must enter the amount he wants, and not fall into else
to display the message.
How could I solve this problem, or improve validation?
The code:
<?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{
//erro estoque
echo"<script>alert('Valor Ultrapassa a quantidade em estoque'); history.go(-1)</script>";
}
}else{
$retorno = $erros;
}
return $retorno;
}?>