Ir ao conteúdo
  • Cadastre-se
PauloR19

Como fazer uma validação para que o estoque de saída nunca se ja maior do que o

Recommended Posts

Tenho um formulário com um ComboBox que tem entrada e saida, queria fazer uma validação para que o se o usuário escolhesse saída ele nunca colocasse uma quantia maior do que a da entrada, como eu faria isso?, desde já obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@PauloR19 Olá, seja bem vindo ao nosso Fórum do Clube do Hardware.

 

Por gentileza poderia postar um exemplo  desse formulário? Código e etc  e se possível print do que aparece...

Basicamente eu penso que você pode  usar jQuery para obter o valor das opções e comparar.. se saida for maior, exibe uma mensagem de erro.

 

Mas sem um exemplo exato do que está fazendo fica meio complicado ajudar!

No aguardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

cadastro_estoque.php

<?php
    $id_estoque = "";
    $quantidade = "";
    $tipo_registro = "";
    
    $saida = "";
    $entrada = "";
    $action_cad = "recebe_estoque";
    $obrigatoriedade = "required";
    $titulo = "Cadastro";
    //Verifica se a variável $result possui informações
    if(isset($result)){
 
    //Quantidades de linhas extraídas do banco de dados
    $qntLinhas = mysqli_num_rows($result);
        
    if($qntLinhas > 0){
        
        //Transforma o retorno do banco de dados em array
        $row = mysqli_fetch_array($result);
        
        //Atribui retorno do DB as variáveis
        $obrigatoriedade = "";
        $id_estoque = $row['id_estoque'];
        $quantidade = $row['quantidade'];
        $tipo_registro = $row['tipo_registro'];
    
        
        
        $action_cad = "alt_estoque";
        $titulo = "Edição";
        
        
        
    
        
    
        if($tipo_registro == 'entrada'){
            $entrada = 'selected';
        }else{
            $saida= 'selected';
        }
        
        
        
    }    
        
    }
?>
<form enctype="multipart/form-data" action="?menu=<?php echo $action_cad; ?>" method="POST">
 
    <center>
    <fieldset>
    
        <legend> <h2><?php echo $titulo; ?> de Estoque </h2></legend>
        
    <table border="0">    
        <tr align="center">
            <td colspan="2">
                <?php 
                if(isset($mensagem)){
                    foreach($mensagem as $valor){
                        echo "<div id='mensagem'> $valor <br></div>";
                    }
                }
                ?>
            </td>
        </tr>
        <tr>
        
            <td><label for="campoAdmin"> Código do administrador <font color="red">*</font></label></td>
        
            <td>
            <select id = "campoAdmin" name="admin" required>
                <?php  
        include('./base_de_dados/connect_bd.php');
            $dbc = conexao();
            
            $query = "SELECT id_admin, nome FROM administrador";
            $result = @mysqli_query($dbc, $query);
            
        
        ?>
                <option>Selecione  </option>
                <?php while($ad = mysqli_fetch_array($result)) { ?>
    <option value="<?php  echo $ad['id_admin']; ?>"><?php  echo $ad['nome']; ?></option>
                <?php } ?>
            </select>
            </td>
        </tr>
        
        <tr>
                    <?php  
        
            
            $query = "SELECT id_produto, nome FROM cadastro_produtos";
            $result = @mysqli_query($dbc, $query);
            
        
        ?>
            <td><label for="campoProduto"> Código do produto <font color="red">*</font></label></td>
            <td>
            <select id = "campoProduto" name = "produto" required>
                <option> Selecione </option>
                            <?php while($prod = mysqli_fetch_array($result)) { ?>
    <option value="<?php  echo $prod['id_produto']; ?>"><?php  echo $prod['nome']; ?></option>
                <?php } ?>
                </select>
            </td>
        </tr>
        
        <tr>
            <td><label for="campoQuantidade"> Quantidade: <font color="red">*</font></label></td>
            <td><input type="number" value="<?php echo $quantidade;  ?>" name="quantidade" id="campoQuantidade" placeholder="Digite a quantidade" required></td>
        </tr>
            <td><label for="campoAtivo"> Tipo de Registro: <font color="red">*</font></label></td>
            <td>
                <select id="campoRegistro" name="registro" required>
                    <option value="entrada" <?php echo $entrada; ?>> Entrada</option>
                    <option value="saida" <?php echo $saida; ?>> Saída</option>
                </select>
            </td>
            </table>
    </fieldset>    
<p>
                    <strong>Campos com <font color="red">*</font> são obrigatórios!</strong>
                </p>
        <tr>
            <td><input type="submit" value="Enviar"></td>
            <td><input type="reset" value="Limpar"></td>
            <input type="hidden" name="codigo" value="<?php echo $id_estoque;?>">
        </tr>
  </center>
    
 
 </form>

 

 

cad_estoque.php

<?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($_POST['registro'] == "saida"){
            if($_POST['quantidade_saida']>=$_POST['quantidade']){
                $erros[] = 'A quantidade de saida não pode ser maior quantidade de entrada!';
            }
        }else{
            $registro = $_POST['registro'];
            
        }
        
        
           if(empty($erros)){
            //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{
            
            $retorno = $erros;
            
        }
        
        return $retorno;
    }
    

 

adicionado 5 minutos depois

@PauloR19 @dif

adicionado 6 minutos depois

@dif

Compartilhar este post


Link para o post
Compartilhar em outros sites

@PauloR19 Bem... o código é muito extenso para ser analisado linha a linha.

 

Por isso eu pedi que postasse a parte do formulário que tem esses combobox e pedi print da sua tela justamente para entender o que está ocorrendo.

 

Como disse anteriormente... pode ser que seja o caso de usar o jquery(javascript) para manipular estes dados.

PS: editei seu post porque os códigos devem ser postados com o botão CODE <>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, mas eu não tenho experiencia em jquery, sou um iniciante em programação em geral, não teria uma forma de fazer usando php?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@PauloR19 Até teria... mas é mais complicado.. pois terias criar um botão para validar... pois não tem controle de eventos...o que é inviável.

O jQuery não é um bicho de 7 cabeças... na verdade é 3 x mais fácil que o próprio javascript.

DE que qualquer forma... COMO é o formulário?  Digo, como está  disposto os dados em tela?

 

Eu posso te orientar nisso, mas preciso saber como é a parte do formulário( como ele está populado) Assim eu posso replicar um exemplo no JSfiddle de validação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou postar a parte do comboBox

 

	</tr>
			<td><label for="campoRegistro"> Tipo de Registro: <font color="red">*</font></label></td>
			<td>
				<select id="campoRegistro" name="registro" required>
					<option value="entrada" <?php echo $entrada; ?>> Entrada</option>
					<option value="saida" <?php echo $saida; ?>> Saída</option>
				</select>
			</td>
			

 

adicionado 0 minutos depois

dif

adicionado 0 minutos depois

@dif

adicionado 5 minutos depois

Sem título.png

adicionado 6 minutos depois

@dif 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@PauloR19 Pelo o que entendi eu faria um consulta antes de inserir e ver a quantidade de estoque. por exemplo.

 

Não sei se foi isso que quer.

// pega quantidade passada do formulario
$quantidade = $_POST['quantidade'];
// faz a consulta de quantos em estoque tem tal produto
$consulta_qtd = mysqli_query($conexao,"SELECT * FROM tabela WHERE id='$id'");
// retorna as linhas da consulta
$retorno = mysqli_fetch_array($consulta_qtd);
// atribui o valor do estoque da consulta
$qtdEstoque = $retorno['quantidade'];

if($qtdEstoque > $quantidade){
echo"<script>alert('Valor Ultrapassa a quantidade em estoque'); history.go(-1)</script>";
}else{
// codigo  para inserir no banco a saida
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@PauloR19

@FabianoS

 

Ah sim!  agora  caiu a ficha. Fiz uma má interpretação do problema.. mas  pela imagem postada e o código do @FabianoS aí que eu me liguei no que era.  O código resolve. Basicamente você  coloca esta parte do código no arquivo php que recebe os dados deste formulário. 

 

Só para contribuir com seu aprendizado, se você unir esse código com a técnica ajax em jQuery, sua aplicação se tornará mais interativa.

 

Por exemplo vou usar o seu mesmo código e apresentar a mensagem  "Valor Ultrapassa a quantidade em estoque".

No php você faz igual, só apagando o teste de IF:

if($qtdEstoque > $quantidade){
echo"<script>alert('Valor Ultrapassa a quantidade em estoque'); history.go(-1)</script>";
}else{
// codigo  para inserir no banco a saida
}

Assim você recuperando apenas o valor do estoque!

 

Antes de mais nada, você precisa primeiro importar a biblioteca jQuery. Para isso você pode usar o CDN do google que é um diretório de reposição. Sempre disponível. Então dentro de seu <head> OU no final da página depois de </body>  adiciona-se esta linha:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

Com isso você importou o jquery. agora podemos escrever o código!

 

<script type="text/javascript">
  //Quando o documento estiver pronto!
  $(document).ready(function(){
  
     //armazeno o combobox em uma variável
     var combobox = $("#campoRegistro");
  
     /*
       atribuo a função on() que recebe dois parâmetros
       change  e uma função que recebe um outro parâmetro "e"
       
     */
     combobox.on('change', function(e){
       //O mesmo que "return false" 
       e.preventDefault(); 
       
       //serializa os dados do formulário em uma variável!
       var dados = $("#seuFormulario").serialize();
       
          /*função ajax url(arquivo que recebe os dados)
            dataType(tipo de dado), method(post ou get), 
            data(o formulário serializado.)
            Função done() para retorno dos dados com sucesso.
          */
          $.ajax({
                   url: 'processaDados.php',
                   dataType: 'HTML',
                   method: 'POST',
                   data: dados 
          }).done(function(retorno){
                 if(retorno > $('#campoQuantidade').val()){
                           alert("Valor ultrapassa a quantidade de estoque!");
                 }
     }); 

  });
  
</script>  

Basicamente note ali na função do done()  que eu pego o retorno, ou seja, a quantidade de estoque da consulta retornada e comparo com o valor digitado no campo de quantidade. 

Usei um alert só para mostrar a mensagem de erro. Mas você pode implementar por exemplo, que o campo quantidade fique com borda vermelha e não permita digitar nenhum número abaixo do valor de estoque retornado pelo ajax.

 

Claro que é um pouco mais complexa no fundo é a mesma essência! :P 

Sugiro primeiro aplicar a solução do @FabianoS e depois tentar esta e ver sua aplicação se tornar mais interativa.

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×