Ícone do site Diego Macêdo

Validação de dados no PHP

Um dos princípios de segurança de um sistema Web é que você não deve acreditar 100% no que o usuário possa inserir nos campos de um formulário (dados enviados pelo POST) ou alteração da URL (dados enviados pelo GET). Nesta postagem, não vou focar segurança em si, mas vou mostrar como validar os dados dos usuários para que o seu site/sistema tenha um melhor controle dos dados manipulados.

Este tipo de validação pode ser feito diretamente pelo navegador do usuário com o Javascript, mas como você não deve confiar nisto, acaba não sendo 100% seguro, então irei mostrar como fazer no servidor, diretamente no PHP, mas com isto o desempenho acaba sendo menor. Mas aí você me pergunta qual tipo de controle eu iria utilizar, Javascript ou PHP? Eu respondo que utilize o PHP, mas se utilizar os dois em conjunto, melhor ainda.

Entenda o porque de utilizar os dois métodos. Quando você implementa o Javascript, ele irá atuar diretamente no navegador como eu disse anteriormente, evitando que os dados sejam enviados para o servidor, bloqueando ali mesmo qualquer tipo de padrão que você deseja. Mas mesmo que o usuário burle o Javascript, o PHP irá agir da mesma forma, bloqueando os dados inválidos/indesejáveis.

Acho que já deu pra entender qual é o objetivo das validações né? Então vamos ao que importa, as técnicas.

Tamanho mínimo de caracteres

A função strlen() conta quanto caracteres foi passado na string e utilizando em conjunto com o IF.

<?php
$nome = $_GET['nome'];
if(strlen($nome)<=2){
 echo "Preencha o nome com no mínimo 2 caracteres.";
}else{
 echo "Seu nome \"$nome\" tem ".strlen($nome)." caracteres.";
}
?>

Aceitando somente números

A função is_numeric() verifica se o valor passado é número, independente de ser do tipo float, integer, long, etc.

<?php
$idade = $_GET['idade'];
if(!is_numeric($idade)){
 echo "Preencha a idade somente com números.";
}else{
 echo "Sua idade é ".$idade." anos.";
}
?>

Evitando espaços em branco

Utilizaremos a função strstr() que irá pesquisar na string se ela possui um espaço vazio que está entre as aspas duplas ” “. Caso ache um espao, ele entrará na primeira condição, informando o erro.

<?php
$palavra = "teste teste";
if(strstr($palavra, " ")){
 echo "A palavra não pode ter espaços.";
}else{
 echo "Você escreveu ".$palavra;
}
?>

Evitando campo vazio

Neste caso, iremos utilizar a função empty(), que verifica se o campo esta vazio, mas caso você faça o teste de enviar apenas um espaço em branco, ele irá aceitar.

<?php
$palavra = "teste";
if(empty($palavra)){
 echo "A palavra não pode estar vazia.";
}else{
 echo "Você escreveu ".$palavra;
}
?>

Validando e-mails – Método 1 (Expressão Regular)

A validação de um e-mail através de expressão regular.

<?php
$email = "teste@dominio.com.br";

if(!preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $email)){
 echo "E-mail inválido.";    
}else{
 echo "Seu e-mail é ".$email;
}
?>

Validando e-mails – Método 2 (PHP)

A validação de um e-mail através do próprio filtro do PHP.

<?php
$email = "teste@dominio.com.br";

if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
 echo "E-mail inválido.";    
}else{
 echo "Seu e-mail é ".$email;
}
?>

Validando CEP

Aceita os CEPs do tipo XXXXX ou XXXXX-XXX através de expressão regular.

<?php
$cep = "55324-424";

if(!preg_match('/^[0-9]{5,5}([- ]?[0-9]{3,3})?$/', $cep)) {
  echo "CEP inválido.";
}
?>

Validando Data

Aceita somente data no formado XX/XX/XXXX através de expressão regular.

<?php
$data = "04/04/2011";
if(!preg_match('/^\d{1,2}\/\d{1,2}\/\d{4}$/', $data)) {
 echo "Data inválida.";
}
?>

Validando Telefone

Permite a utilização de string com telefone com DDD de 2 ou 3 dígitos (inclusão do zero na frente) no formato (XXX) XXXX-XXXX.

<?php
$telefone = "(82) 5555-5555";

if(!preg_match('^\(+[0-9]{2,3}\) [0-9]{4}-[0-9]{4}$^', $telefone)){
 echo "Telefone inváildo.";
}
?>

Validando CPF

Não é a melhor forma de validar o CPF, mas em breve vou atualizar este exemplo pra uma forma mais completa.

<?php
$cpf = "111.444.777-35";

if(!preg_match("^([0-9]){3}\.([0-9]){3}\.([0-9]){3}-([0-9]){2}$", $cpf)) {
 echo "CPF inválido.";
}
?>

Acho que estas validações irão ajudar no entendimento, mostrando o caminho para validar outros tipos de dados que venham a ser necessário para os seus sites e sistemas. Eu aceito sugestões de novas validações para que eu possa incluir nestes exemplos.

Grande abraço e bons estudos!

Sou bacharel em Sistemas de Informação pela Estácio de Sá (Alagoas), especialista em Gestão Estratégica da Tecnologia da Informação pela Univ. Gama Filho (UGF) e pós-graduando em Gestão da Segurança da Informação pela Univ. do Sul de Santa Catarina (UNISUL). Certificações que possuo: EC-Council CEH, CompTIA (Security+, CySA+ e Pentest+), EXIN (EHF e ISO 27001), MCSO, MCRM, ITIL v3. Tenho interesse por todas as áreas da informática, mas em especial em Gestão e Governança de TI, Segurança da Informação e Ethical Hacking.

Sair da versão mobile