← Tutoriais

[PHP] Validação de Dados com PHP - Uma Forma Realmente Fácil

Lida 9055 vezes

Offline

=IceBurn= 
Membro
Mensagens 897 Gostos 3
Feedback +3

Troféus totais: 32
Trófeus: (Ver todos)
Windows User Level 6 Linux User Mobile User Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5

Bem, eu sou algo "exagerado" com as validações de dados. Garanto sempre que no meu trabalho só passa mesmo aquilo quero e o que é correcto.

Quando digo exagerado, obviamente que tenho de colocar aspas na palavra, porque a segurança nunca é demais.

Até aparecer o PHP 5, fazíamos a validação usando basicamente expressões regulares, como preg_match() e/ou ereg() (em desuso), de facto continuo a usar bastantes expressões regulares e adoro usá-las para validar determinados dados.

A verdade é que com o PHP 5 trouxe-nos um conjunto de novas funções que nos poupam o uso de expressões regulares para aquelas validações mais comuns, o que resulta num código mais limpo, sem demasiadas expressões regulares.

O PHP a partir da versão 5.2.0 já vem com esta função por defeito, portanto se vos der erro quando tentarem usar a função filter_var(), exijam a actualização do PHP.

Hoje vou falar-vos da função filter_var(), usando para tal alguns exemplos.

De notar que estes são  exemplos básicos e apenas de validação, pois a função filter_var() é bastante flexível, mas vou deixar os exemplos mais complexos talvez para outro tutorial, para já dedique-mo-nos à validação:


Código: (php) [Seleccione]
<?php

/**
 * @author =IceBurn=
 * @copyleft 2010
 */
 

// Endereço de E-mail
echo filter_var'email@dominio.com'FILTER_VALIDATE_EMAIL ) !== false 'Válido' 'Incorrecto';


// URL
echo filter_var'http://maistrafego.pt/'FILTER_VALIDATE_URL ) !== false 'Válido' 'Incorrecto';


// Número Inteiro
echo filter_var'22'FILTER_VALIDATE_INT ) !== false 'Válido' 'Incorrecto';


// Float
echo filter_var'100.50'FILTER_VALIDATE_FLOAT ) !== false 'Válido' 'Incorrecto';


// Boolean
echo filter_var'true'FILTER_VALIDATE_BOOLEAN ) !== false 'Válido' 'Incorrecto';


// IPV4
echo filter_var'120.120.120.120'FILTER_VALIDATE_IPFILTER_FLAG_IPV4 ) !== false 'Válido' 'Incorrecto';


// IPV6
echo filter_var'2001:0db8:85a3:08d3:1319:8a2e:0370:7344'FILTER_VALIDATE_IPFILTER_FLAG_IPV6 ) !== false 'Válido' 'Incorrecto';


// Expressão regular
echo filter_var'Vai retornar válido'FILTER_VALIDATE_REGEXP, array( 'options'=>array( 'regexp' => '/^[à-úa-z\s]+$/i' ) ) ) !== false 'Válido' 'Incorrecto';


?>


E pronto, agora já ninguém tem desculpa para não fazer validações básicas aos dados submetidos. Obviamente que devem ter o cuidado de inserir cuidadosamente os dados na Base de Dados se for o caso, usando a função mysql_real_escape_string(), mas nunca usem addslashes(), mal aplicada é um erro tremendo que vos deixa vulneráveis a intrusões.


Espero que tenham gostado.
Offline

Júnio Branco 
Membro
Mensagens 563 Gostos 0
Feedback +2

Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Obrigado por partilhares :D
Já conhecia o mysql_real_escape_string() mas desconhecia completamente a função filter_var();

Offline

=IceBurn= 
Membro
Mensagens 897 Gostos 3
Feedback +3

Troféus totais: 32
Trófeus: (Ver todos)
Windows User Level 6 Linux User Mobile User Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5

É um prazer :)

São coisas diferentes DarkWolf, apenas mencionei a função mysql_real_escape_string() para advertir ao seu uso essencial, pois o filter_var() não dispensa o seu uso.

Assim de uma forma muito rápida:
filter_var() é para validar a informação (e não só)
mysql_real_escape_string() é para protecção antes de inserir a informação na Base de Dados MySQL
Offline

asturmas 
Administrador
Mensagens 19734 Gostos 50
Feedback +2

Troféus totais: 39
Trófeus: (Ver todos)
Mobile User Windows User Super Combination Combination Topic Starter 100 Poll Votes 50 Poll Votes 10 Poll Votes Poll Voter Poll Starter

Obrigado Ice isso vai me dar muito jeito num projecto que estou agora a desenvolver.
Offline

=IceBurn= 
Membro
Mensagens 897 Gostos 3
Feedback +3

Troféus totais: 32
Trófeus: (Ver todos)
Windows User Level 6 Linux User Mobile User Super Combination Combination Topic Starter Poll Voter Poll Starter Level 5

Fico :) por ser útil.