Bruno Lustosa tem 29 anos, e programa desde os 8. Conhece diversas linguagens de programação, entre elas PHP, sendo certificado pela Zend(ZCE - Zend Certified Engineer). Trabalha com redes e desenvolvimento a 9 anos, e atualmente, coordena a área de desenvolvimento da HóspedeVIP, uma central de reserva de hotéis pela Internet.
Praticamente toda aplicação, seja ela web ou não, precisa fazer validação de dados, por vários motivos:
Segurança: Todo dado informado pelo usuário deve ser validado sempre, para evitar problemas como XSS e injeção de SQL nas consultas;
Consistência: O formato das informações também é importante. Toda data contém 3 campos (dia, mês e ano), e todos eles são numéricos. Uma letra ou outro caractere em uma data pode causar problemas em seu script;
Interface: Validando as informações, fica fácil exibir uma mensagem de erro ao usuário informando o problema. É bem melhor do que uma página que não funciona como o esperado e "cospe" erros na tela.
E ao invés de reinventar a roda, e criar do zero toda a infraestrutura de validação de dados, porque não usar algo já pronto e testado? É aí que as classes Validate e Validate_ptBR entram em cena.
A classe Validate serve para fazer a validação de dados mais genéricos, como números, email, datas e outros, e a classe Validate_ptBR valida informações específicas do Brasil, como CEP, CPF, CNPJ, entre outros.
As duas classes podem ser instaladas através do próprio framework PEAR, ou então baixadas e instaladas a partir dos seguintes endereços:
- http://pear.php.net/package
- http://pear.php.net/package
Usar as classes é bem simples. Ambas possuem apenas métodos estáticos, que retornam true ou false. Ou seja, para fazer a validação com a classe Validate, o desenvolvedor poderia simplesmente fazer algo como no bloco no fim deste artigo.
O uso da classe Validate_ptBR é bem semelhante ao exibido nos exemplos. Para melhorar o código, a validação ainda pode ser encapsulada dentro de uma classe, de forma a "esconder" todo esse código atrás de um simples método "valida()" que faria a validação de todas as propriedades da classe e retornaria true ou false caso a validação de todas as propriedades passasse ou não.
As opções mostradas no exemplo abaixo são apenas algumas entre as muitas disponíveis para validar cada tipo de dado. Tanto o manual online quanto o código fonte das classes descrevem bem as opções.
É válido lembrar que além da validação no PHP, as interfaces também devem possuir algum tipo de validação, para que se tornem mais amigáveis ao usuário. Essa validação, no caso de aplicativos web, é feita normalmente em Javascript. No próximo artigo, falarei sobre um framework de validação de formulários feito em Javascript que facilita muito a vida do desenvolvedor.
<?php // Exemplo de validação
require_once "Validate.php"; // Esses dados possivelmente viriam de um formulário
$numero = 1.25;
$email = 'algum@email.com';
$string = 'um texto qualquer';
$uri = 'http://www.exemplo.com/script.php';
$data = '01/10/2007'; /* Opções para $numero:
* - Ponto como separador decimal;
* - No máximo duas casas decimais;
* - Menor valor aceitável é 0;
* - Maior valor aceitável é 10.
*/
$op = Array ('decimal' => '.',
'dec_prec' => 2,
'min' => 0,
'max' => 10);
if (Validate::number($numero, $op))
print '$numero passou na validação<br />'; /* Opções para $email:
* - Checar se o domínio existe.
*/
$op = Array ('check_domain' => true);
if (Validate::email($email, $op))
print '$email passou na validação<br />'; /* Opções para $uri:
* - Checar se o domínio existe.
*/
$op = Array ('check_domain' => true);
if (Validate::uri($uri, $op))
print '$url passou na validação<br />'; /* Opções para $data
* - Formato: dd/mm/aaaa
* - Menor valor aceitável: 01/01/2000
*/
$op = Array ('format' => '%d/%m/%Y',
'min' => Array (1, 1, 2000));
if (Validate::date($data, $op))
print '$data passou na validação<br />'; ?>