Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 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";
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;
}
?>.>
Meio confuso, uma sugestão é efetuar esta comparação com ternário.
$condicao = ( mysqli_num_rows($result)<=0 ) ? true : ( $quantidade <= $quantidade_db ) ? true : false;
if ($condicao !== false) {
# cadastra
} else {
# Mensagem
}
Seu problema é no PHP ou na Query SQL?
Esse é um projeto simples, comecei faz pouco tempo na programação, o problema é o seguinte, digamos que eu tenha cadastrado um produto no estoque, cadastrei a entrada dele duas vezes com a quantidade de 50, mas quando eu cadastro novamente a entrada com a quantidade 101, o site me dá a mensagem "valor ultrapassa a quantidade em estoque", a validação funciona para saída, mas não para entrada, queria ver uma forma de cadastrar a entrada, sem nenhuma restrição de quantidade.
validação funciona para saída, mas não para entrada, queria ver uma forma de cadastrar a entrada,
é exatamente isso que o @Williams sugeriu....
Você pode fazer a verificação antes de inserir, ou em tempo de execução do cadastro
Ex:
seusite.com.br/cadastrarProduto.php
<?php
//$sql = "SELECT COUNT(*) as qtd from produtos where id = 20";
//$bd->fetch()... bla bla bla
$qtd = $result['qtd'] ;
//Construção da pagina...
if($qtd > 100){
die('Produto já esta com a qtd máxima em estoque.');
}
//Chegou até aqui significa que tem menos de 100 Produtos, então pode inserir normal
//INSERT INTO....
Meio confuso, uma sugestão é efetuar esta comparação com ternário.
} else { # Mensagem } Seu problema é no PHP ou na Query SQL?