Olá sou novo no fórum, comecei a programar faz pouco tempo, mas ás vezes tenho dúvidas, e problemas que não consigo resolver, por isso peço a ajuda de vocês para resolver esse problema.
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.
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 inseridoif($_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";
echo $query;
$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;}?>
Como eu poderia resolver esse problema, ou melhorar a validação?
Pergunta
pr99
Olá sou novo no fórum, comecei a programar faz pouco tempo, mas ás vezes tenho dúvidas, e problemas que não consigo resolver, por isso peço a ajuda de vocês para resolver esse problema.
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.
O código:
Como eu poderia resolver esse problema, ou melhorar a validação?
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.