How to improve my input and output validation

Asked

Viewed 72 times

1

I have the function inserir, and in it has an input and output validation, first she makes a select with the function count with a where referencing the product code, then it falls into condition if($quantidade_db >= $quantidade || mysqli_num_rows($result) == 0) if the seat quantity is greater or equal to the amount entered by the user or mysqli_num_rows == 0 it goes to the insert, if the condition is false, shows a message on the screen "value exceeds the quantity in stock".

The validation works for the output, but for input, for example, the user registers the product with the input flag twice with the amount of 50, but again he registers the same product with the input flag but with the quantity of 101, the message will appear "value exceeds the quantity in stock".

In the input the user must enter the amount he wants, and not fall into else to display the message.

How I could solve this problem, or improve validation?

The code:

<?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";





        $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;
}?>
  • 1

    Information not relevant to the question should be added in the comments. For example "if I haven’t been clear, ask me for more information". Start by learning more about Stackoverflow by visiting Tour.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.