Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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
  • Autor do tópico
  • 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

    Editado por dif
    Inserir o código com o botão CODE <>

    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
  • Autor do tópico
  • 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
  • Autor do tópico
  • 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
    }

     

    Editado por FabianoS
    • 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.

     

    Editado por dif
    • 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






    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

    ×