Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

PHP - Validar dados front no back-end ( $_POST() )

Olá pessoal, Em php estou enviando dados da tela de tela-view.ph para tela-controller.php via post, no entanto eu preciso validar os dados enviados para verificar se o se os campos obrigatórios estão vazios.

$foco = $_POST ["foco"];
$dtaFolha = $_POST ["dtaFolha"];
$notaDia = $_POST ["notaDia"];
$observacao = $_POST["observacao"];

para validar eu poderia fazer algo do tipo:

if (array_key_exists ( "foco", $_POST ) && $_POST["foco"] == true && empty( $_POST["foco"] ) ):
    $foco = $_POST["foco"];
endif;

mas isso acredito que não seja mto correto criar esse ifs para cada campo. Além disso poderia fazer essa validação via não permitindo envio de dados vazios via vou validar via javaScrip | jQuery no entanto estou visando segurança da aplicação e da entrada de dados por isso quero validar no back-end.

Logo o que preciso é: saber como validar os dados de entrada de forma generica ou seja um método para verificar se há algum dado obrigatório vazio? é uma boa pratica fazer essa validação direto no model?

att.

3 respostas
solução!

Olá amigo, boa noite. Você está correto ao se preocupar em fazer uma validação no back-end e front-end. Quanto mais seguro, melhor. Uma forma simples de fazer validação no front-end é através de expressões regulares utilzando o atributo "pattern" das tags HTML5. Com isso, você deixa a parte de verificação mais eurística para o back-end.

Já no back-end, você pode criar uma função genérica que analisa se o campo está vazio e ainda pode fazer uma segunda verificação, via expressão regular, dos dados inserido.

Como exemplo, no código abaixo demonstrarei a você como fazer verificação de um campo de nome composto através de uma função genérica.

<?php
//Verifica se os dados estão chegando via POST do formulário
if (isset($_POST['salvar'])) {

    //Array para armazenar as não-validação dos campos
    $erros;

    //Verifica se o campo está vazio e compara com a Regex    
    function VerificaVazioRegex($name_campo, $campo, $reg){
        //Verifica se o campo possui conteúdo para poder verificar a Regex
        if (empty($campo) || $campo == null || $campo == ""){                
            global $erros;
            $erros["$name_campo"] = "não pode ficar vazio.";                    
        }                
        else {
            //Verificação da string fornecida com a Regex
            if (!preg_match($reg, $campo)){
                global $erros;
                $erros["$name_campo"] = "possui caracteres, formato ou valor inválidos.";
            }                    
        }    
    }

    //Retira os caracteres em branco das bordas
    $nome = trim($_POST['cmp_nome']);

    //Laço para retirar os espaços em branco extras (duplos)
    while(strpos($nome, "  ") != 0){
        $nome = str_replace("  ", " ", $nome);
    }

    //Cria um padrão para verificação do nome
    $regex_nome = '/^[a-zA-Zá-üÁ-Ü]+(( [a-zA-Zá-üÁ-Ü]+)+)?$/';

    //Chama a função passando os dados do campo, bem como o padrão
    VerificaVazioRegex("Nome", $nome, $regex_nome);

}
?>

Observe que a função que faz a verificação armazena o nome do campo como uma chave no array $erros e como valor armazena o tipo do erro (vazio ou formato inválido). Ao final, você ainda pode criar um laço para informar as inconsistências ao usuário.

//Iteração para verificar as inconsistências no preenchimento do formulário        
    if (!empty($erros)){
        echo "As seguintes pendências foram encontradas:<br />";
        foreach ($erros as $chave => $valor){
            echo "O campo <span> $chave</span> $valor<br />";
        }
    }

Caso o array esteja vazio, significa que não foram encontradas inconsistências. A partir de então você pode prosseguir com o processamento do seu código.

Espero ter ajudado.

Olá, Hermogenes

Acho interessante usar a função filter_input_array [1] para validar os dados. Veja esse exemplo:

$args = array(
   'foco' => FILTER_VALIDATE_BOOLEAN,
   'dtaFolha' => FILTER_SANITIZE_STRING,
   'notaDia' => FILTER_SANITIZE_NUMBER_FLOAT,
   'observacao' => FILTER_SANITIZE_STRING,
);

 $data = filter_input_array(INPUT_POST, $args);

[1] http://php.net/manual/en/function.filter-input-array.php

Obrigado pessoal pela prontidão no resposta e me desculpem por de morar a responder. Com base em suas respostas montei dois métodos interessantes:

    function sanitarizarCampos($dadosForm ){
        // Cria as variáveis dinamicamente
        foreach ( $dadosForm as $chave => $valor ){

            // Se Houver uma lista <li> dentro form
            if (is_array ( $valor )){
                $arrayLista = sanitarizarCampos ( $valor ); // metodo recursivo
                                                         // atribui dados limpos no array
                $dadosForm [$chave] = $arrayLista;
            }
            else{
                // Remove todas as tags HTML
                // Remove os espaços em branco do valor
                $dado = trim ( strip_tags ( $valor ) );
                $dadosForm [$chave] = $dado;
            }
        }
        return $dadosForm;
    }




     function validarCampoVazio($valor ){
        // Verifica se tem algum valor nulo
        if (empty ( $valor ) || $valor == null || $valor == ""){

            $erro = 'Existem campos em branco. Favor preençha dos dado corretamente e não modifique o HTML';
            header("Location: 500.php");
        }
        else{
            return $valor;
        }
    }

Obrigado, estou querendo entrar ou montar um grupo do whats up para ir trocando experiências, sou de java e seria interessante conhecer mais do php. Caso tenha interesse postem aqui ou enviem email: hvivox@hotmail.com