Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

  • Moderador

@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

Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

  • Moderador

@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 <>

Link para o comentário
Compartilhar em outros sites

  • Moderador

@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.

Link para o comentário
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
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

  • Moderador

@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
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...