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!
gostei muito desta aula
pessoal, onde coloco estas configurações de validação??
isso é q é ensinar a validar.
O deve ser assim, pq na postagem não está indo o código completo:
while ( eregi( “[[::]]”,pesquisa, $match ) )
Novo script à ser avaliado:
<?php print( '’ ) ?>
Expressões Regulares
<?php
$pesquisa = "Agora é a hora do trabalho";
print( "A sequência de teste é: '$pesquisa'” );
// buscar por quaisquer palavras que começam com ‘t’
print( “Palavras que começam com ‘t’ encontradas: “);
while ( eregi( “[[::]]”,
$pesquisa, $match ) )
{
print( $match[ 1 ] . ” ” );
// remover a primeira ocorrência de uma palavra que começa
// com ‘t’ para encontrar outros casos na cadeia
$pesquisa = ereg_replace( $match[ 1 ], “”, $pesquisa );
} // end while
?>
Já tentou analisar a documentação do PHP para o preg_match e outros, e entender como funciona cada um deles? A documentação do PHP é muito boa de ler e fácil de entender. Logicamente não vai te dar tudo o que você quer exatamente, mas irá mostrar o caminho.
Dá uma olhada em:
http://www.php.net/preg_match
Olá caro amigo Diego, estou inicializando meus conhecimentos em PHP há pouco tempo, estou tentando fazer uma validação para um campo telefone, por exemplo: (XX)XXXX-XXXX, e por exemplo, se o usuário colocar um phone tipo (11)1111-1111, este campo seja inválido.
veja este Script
<?php
extract($_POST);
// determina se numero de telefone é valido e imprime
// uma mensagem de erro se não for
// VALIDAR TELEFONE NO SEGUINTE FORMATO: DDD33333333
if(!preg_match('^\(+[0-9]{3}\) [0-9]{4}-[0-9]{4}$^', $phone))
{
print("
Número de telefone inválido
Um número de telefone válido deve ser na forma:
(555)5555-5555
Clique no botão Voltar, digite um telefone válido.
número e reenviar.
Obrigado.”);
die(”
“);//termina execução do script
}
?>
Bom é o seguinte, ele não me retorna um valor válido para a variável telefone, vc pode me dá uma dica? Espero por alguma resposta, e vou tentado aqui outros métodos. Fico muito grato por qualquer informação.
Pegando o exemplo dado no post, basta você acrescentar o restante da condição. Dá uma olhada aqui no meu blog sobre “Estruturas de Controle no PHP” e procura exatamente pelo “IF” para que você possa entender realmente como funciona ele.
Veja que só fiz acrescentar o ELSE e também retirei o espaço depois dos parênteses. Outro ajuste que fiz em relação ao seu, é que o usuário poderá especificar o DDD com 2 ou 3 caracteres, ou seja, pode incluir o 0 (zero) ou não se ele quiser. Se você quiser deixar específico, basta alterar onde tem “{2,3}” para “{3}”.
Qualquer dúvida é só falar! Grande abraço!
Obrigado meu amigo , vou tentar agora mesmo.
Agora Diego vamos dizer que essa variável telefone NÃO TENHA um número padrão, como (082)5555-5555, e sim somente seja qualquer outro numero, menos (11)1111-1111, (222)2222-2222, etc? Pode me dá essa dica?
Jogue o $_POST que tem o valor do telefone direto dentro da validação.
Agora se você quer também “excluir” os valores padrões como 1111..22222…333.. dos telefones, você tem que criar uma outra validação dentro do IF para verificar exatamente se o telefone possui esses valores.
Como eu falei antes, dá uma lida sobre “Estruturas de Controle no PHP” que você saberá como fazer isso. =)
Meu amigo, vc é o cara, agora deu tudo certo e muito obrigado mais uma vez. Grande abraço.
De nada Erick! Não deixe de assinar meu blog e ficar por dentro das atualizações quase que diárias. =)
Olá
Podes me ajudar?
preciso do seguinte ao a pessoa entrar no site ela coloca sua data d nascimento e se o resultado for mais de 18 anos ela vai pro site correto caso contrário vai a outro site?
pode me ajudar?
Tem diversos algoritmos que fazem isso pela internet, mas basicamente faz com que você pegue o ano atual e subtraia o ano dado pelo visitante. Se a diferença for de 18 ou mais, só voce jogar o comando de redirecionamento dentro do IF, ou então vai cair no ELSE.
Tenta fazer o código e postar aqui, que eu te ajudo caso não consiga. Ou até mesmo se conseguir para compartilhar com os outros visitantes. =)
Ai Diego,
Vlw pelas dicas.