Limpeza e validação de dados com PHP

Limpeza e validação de dados com PHP

Neste artigo vamos ver como funciona a sanitização e validação de dados com PHP. Você vai ver como é possível tratar dados recebidos a partir de formulários antes de fazer a gravação para o seu banco de dados. 

A padronização e validação de dados é um processo muito importante que garante a qualidade das informações do seu banco de dados.

Qual a diferença entre sanitização e validação?

No processo de sanitização, se remove os caracteres desnecessários. Uma vez feito este processo, se parte para o processo de validação, que consiste em verificar se o dado recebido atende as necessidades de nosso modelo de negócios.

Antes de iniciar a sanitização, é necessário verificar se o campo está sendo recebido. Para isso, fazemos uso da função isset()

 

$CEP = "";

if (isset($_POST["CEP"])){

$CEP = $_POST["CEP"];

}

 

Neste exemplo, verificamos se existe um campo enviado por POST chamado CEP.  Sem a utilização do isset(), caso o campo não exista e você tente fazer a leitura, vai receber um alerta de erro do tipo NOTICE chamado "Undefined index"

Uma vez recebido o dado, podemos proceder a limpeza. O processo de limpeza pode ser composto de remover espaços em branco desnecessários ou padronizar o conteúdo recebido.

Para a remoção de espaços desnecessários utilizamos a função trim(). Esta função remove espaços no começo ou no fim da string.

 

$nome = "  teste 123  ";

$nome = trim($nome);

echo $nome;

 

Para a padronição do conteúdo, podemos padronizar o conteúdo recebido para letras maíusculas ou minúsculas. Para mudar para maíusculo podemos usar strtoupper() e para mudar para minúsculo podemos usar strtolower().

 

$nome = "  teste 123  ";

$nome = trim($nome);

echo strtoupper($nome);

echo strtolower($nome);

 

A remoção de caracteres indesejados também faz parte do processo de sanitização. Por exemplo, você pode querer tratar uma informação do tipo Código Postal (CEP) apenas aproveitando a parte numérica. Uma forma simples seria remover os caracteres indesejados usando str_replace()

 

$CEP = "01532-001";

$CEP = str_replace("-","",$CEP);

echo $CEP;

 

Para este caso, não seria a melhor abordagem. Uma abordagem mais apropriada seria utilizar uma expressão regular, para isso utilizamos a função preg_replace();

 

$CEP = "CEP:01532-001";

$CEP = preg_replace("/[^0-9]/", "", $CEP);

echo $CEP;

 

Agora vamos falar sobre o processo de validação. Com os dados padronizados, o processo de validação pode compreender:

 

- A validação do tipo de dados

- A validação do tamanho da informação

- A validação se o formato está correto.

- Se a informação é unica, ou seja, se ela já não existe em seu banco de dados.

 

Pode ser necessário que uma determinada informação siga um certo tipo de dados, por exemplo o dado ser do tipo número ou data. Para verificar se uma informação é um número podemos usar a função isnumeric().

 

$campo1 = "123";

if (is_numeric($campo1)){

echo "Campo 1 é um número";

} else {

echo "Campo 1 não é um número";

}

$campo2 = "Teste 123";

if (is_numeric($campo2)){

echo "Campo 2 é um número";

} else {

echo "Campo 2 não é um número";

}

 

Para validarmos se uma data é valida podemos utilizar a classe DateTime. Podemos converter o valor num objeto e formatar a resposta para comparar com o valor original. 

 

$data = "30/02/2023";

$d = DateTime::createFromFormat("d/m/Y", $data);

if($d && $d->format("d/m/Y") == $data){

    echo "data valida";

}else{

    echo "data inválida";

}

 

O processo de validação do formato também pode ser feito utilizando filter_input. No exemplo a seguir validamos se um campo chamado idade recebido através de um POST está dentro de um intervalo considerado válido

 

$opcoes = array("options" => array("min_range" => 0, "max_range" => 18 ));

if($idade = filter_input(INPUT_POST, "idade", FILTER_VALIDATE_INT, $opcoes)){

    echo "A idade é até 18 anos";

}else{

    echo "A idade é maior que 18 anos";

}

 

Podemos também usar o filter_input para validar por exemplo se um determinado campo recebido por POST ou GET está no formato de um e-mail válido

 

if($email = filter_input(INPUT_POST, "email", FILTER_VALIDATE_EMAIL)){

    echo "E-mail válido";

}else{

    echo "E-mail inválido ou não informado";

}

 

Perceba que nos dois exemplos anteriores a função filter_input recebeu um número diferente de argumentos. Os 3 primeiros são obrigatórios, o primeiro é a forma como o dado está sendo recebido, se é através de POST ou GET, o segundo é o nome do campo e o terceiro é o tipo de filtro a ser aplicado. Já o quarto parâmetro é opcional, serve para refinar o filtro aplicado. Uma lista de filtros que podem ser utilizados nesta função pode ser consultado neste link:

 

https://categoriaoutros.com.br/?p=4299

 

Vamos ver agora como funciona a validação do tamanho de uma string. Para retornar a quantidade de caracteres de uma string utilizamos a função strlen();

 

$nome = "TESTE 123";

if (strlen($nome) < 10){

echo "ERRO";

} else {

echo "OK";

}

 

No exemplo acima o código retorna a mensagem ERRO sempre que a string informada tiver menos de 10 caracteres.

A validação se o formato está de acordo com uma determinada regra de negócio depende muito do seu modelo de negócio. Geralmente validações de formato simples podem ser resolvidas utilizando expressões regulares. No exemplo a seguir vamos ver como validar se uma informação está no formato de um CEP válido.

 

$CEP = "01532-001";

if (preg_match("/[0-9]{5,5}([- ]?[0-9]{4})?$/", $CEP))

echo "CEP inválido";

} else {

echo "CEP válido";

}

 

Validações mais específicas como o caso de verificar se um e-mail tem um determinado domínio ou se um determinado número de CPF está no formato certo exigem uma programação mais complexa para ser validados. No artigo a seguir eu mostro como é possível criar uma validação para números de CPF e CNPJ.

 

Validando CPF e CNPJ com PHP

 

 

Outros conteudos que podem ser de seu interesse

Listando arquivos com PHP
25/09/2022PHP

Listando arquivos com PHP

Veja as várias formas de listar arquivos com PHP

Saiba mais...
Enviar e-mails com anexos utilizando PHP
20/08/2023PHP

Enviar e-mails com anexos utilizando PHP

Veja duas formas de enviar e-mails com anexos utilizando PHP

Saiba mais...

Conteúdo sobre banco de dados sem complicação!