1
I have the function inserir
, and in it has an input and output validation, first she makes a select
with the function count
with a where
referencing the product code, then it falls into condition if($quantidade_db >= $quantidade || mysqli_num_rows($result) == 0)
if the seat quantity is greater or equal to the amount entered by the user or mysqli_num_rows == 0
it goes to the insert, if the condition is false, 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 amount of 50, but again he registers the same product with the input flag but with the quantity of 101, the message will appear "value exceeds the quantity in stock".
In the input the user must enter the amount he wants, and not fall into else
to display the message.
How I could 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;
}?>
Information not relevant to the question should be added in the comments. For example "if I haven’t been clear, ask me for more information". Start by learning more about Stackoverflow by visiting Tour.
– Florida