Ir para conteúdo
Fórum Script Brasil
  • 0

Como melhorar minha validação de entrada e saída


pr99

Pergunta

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;
	}

		
?>

Como eu poderia resolver esse problema, ou melhorar a validação?

 

 

 

Editado por pr99
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá pr99,

O seu problema refere-se exatamente à condição que está sendo executada:

if($quantidade_db >= $quantidade || mysqli_num_rows($result) == 0){

Se está lhe retornando:

}else{
			
			//erro estoque
			echo"<script>alert('Valor Ultrapassa a quantidade em estoque'); history.go(-1)</script>";
		}

é porque as condições para a entrada do IF acima não estão sendo satisfeitas.

De um debug nos valores que estão sendo passados para verificar se satisfazem mesmo às condições necessárias para entrar na condicional.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...