Utilizando PEAR

Recentemente decidi procurar por uma solução que aerodinamizasse o processo de construir formulários. Um de meus objetivos durante esta pesquisa era procurar um mecanismo que permitisse que eu me focasse em executar a lógica do negócio associada com a aplicação ao invés de me preocupar com coisas mundanas como a escrita do código do HTML ou scripting validations usando o Javascript.

[ Hits: 31.272 ]

Por: Pedro César em 20/04/2006


Validando os dados do formulário



Dê uma olhada no código a seguir, clicando no link:
Se você carregar o código acima e clicar no botão submit sem preencher os dados dos campos com validação, verá a tela a seguir:


Você certamente ficará impressionado quando eu mostrar a facilidade com que nós implementaremos essa validação usando HTML_QuickForm().

O código seguinte nos mostra claramente como fazer isso:

<?php
// snip
$obj_registration_form->addRule('txtAddress', 'Please enter your "Address" as it is a required field.', 'required');
$obj_registration_form->addRule('txtAddress', 'Please enter at least 20 characters in the "Address" field.', 'minlength', 20);
$obj_registration_form->addRule('txtAddress', 'Please enter at most 255 characters in the "Address" field.', 'maxlength', 255);
// snip
?>

Veja que utilizei o método addRule(), o qual falaremos mais no devido momento. Eu passei três parâmetros nesse método:
  • O primeiro representa o nome do elemento a ser validado;
  • O segundo é a mensagem de erro que será exibida no caso de falha;
  • E a terceira é a palavra-chave associada à regra que será implementada.

Supomos que eu queira que um campo texto seja obrigatório, a palavra-chave utilizada na regra seria "required".

Existem duas regras que utilizam o 4 parâmetro, são as regras pré-definidas "maxlength" e "minlength" que precisam desses valores.

<?php
// snip
$obj_registration_form->addGroupRule('txtFullName', array ( 'txtFirstName' => array(array('Please enter your "First Name" as it is a required field', 'required')), 'txtLastName' => array(array('Please enter your "Last Name" as it is a required field', 'required'))), 'required');
$obj_registration_form->addGroupRule('txtFullName', 'Please enter only letters in your "Full Name"', 'lettersonly', 2);
// snip
?>

No caso dos elementos agrupados, nós podemos aplicar regras à eles separadamente, nesse caso deveremos aplicar as regras individualmente a cada membro do grupo chamando o método addGroupRule(). Note que temos que definir um array com as mensagens de erro bem como a regra para cada elemento que faça parte do agrupamento.

Mas é muito mais fácil atribuirmos uma regra a todos os elementos do agrupamento, Veja no código acima, especifiquei uma mensagem de erro para se exibida se qualquer um dos elementos do grupo falhar na validação. Nesse caso eu utilizei a regra "LETTERSONLY", para permitir que apenas letras sejam inseridas no campo de texto. O último parâmetro utilizado indica qual o número mínimo de elementos do grupo que devem satisfazer à regra de validação, nesse caso o valor é 2, ou seja todos os campos do grupo devem passar na validação.

Validar os elementos como drop down e radio buttons, e muito fácil como veremos no código a seguir:

<?php
// snip
$obj_registration_form->addRule('ddlCountry', 'Please select a "Country" as it is a required field.', 'required');
$obj_registration_form->addRule('txtEmailAddress', 'Please enter your "e-mail Address" as it is a required field.', 'required');
$obj_registration_form->addRule('txtEmailAddress', 'Please enter a valid "e-mail Address".', 'e-mail');
$obj_registration_form->addGroupRule('radGender', 'Please select your "Gender" as it is a required field.', 'required');
// snip
?>

Observe que para o campo de email além da regra que verifica se ele foi preenchido, existe uma regra especifica para verificar se o email é válido.

Mais regras de validação:

<?php
// snip
$obj_registration_form->addRule('txtGroupName', 'Please enter between 5 and 20 characters for your "Group Name".', 'rangelength', array(5,20));
$obj_registration_form->addRule('txtGroupName', 'Please do enter any punctuation characters in your "Group Name".', 'nopunctuation');
$obj_registration_form->addRule('txtGroupName', 'Please note that you can enter only alphabets, numbers and apostrophes for your "Group Name".', 'regex', '/^[a-zA-Z0-9\' ]{6,20}$/');
// snip
?>

O código acima demonstra algumas regras de validação. Vejamos:
  • RANGELENGTH: Nos permite as escala de comprimento para o campo, definindo o valor mínimo e o valor máximo.
  • NOPONTUCTUATION: Não permite que o usuário utilize qualquer caractere especial, como por exemplo "?", "!", "&" e acentuação.
  • REGEX: Permite utilizar o poder das expressões regulares para validar o texto. Se a string não retornar um valor positivo a validação falha.
  • COMPARE: Compara os campos de senha para testar se são idênticos.

<?php
// snip
$obj_registration_form->addElement('text', 'txtUsername', 'Username:', array( 'size' => 40, 'maxlength' => 15));
$obj_registration_form->addElement('password', 'txtPassword1', 'Password:', array( 'size' => 40, 'maxlength' => 15));
$obj_registration_form->addElement('password', 'txtPassword2', 'Re-enter Password:', array( 'size' => 40, 'maxlength' => 15));
// snip
$obj_registration_form->addRule('txtPassword1', 'Please enter your "Password" as it is a required field.', 'required');
$obj_registration_form->addRule(array('txtPassword1', 'txtPassword2'), 'The two passwords do not match. Please re-enter your password correctly.', 'compare');
$obj_registration_form->addRule('txtPassword1', 'Please enter a valid "Password" containing between 8 and 10 consisting of alphabets and numbers only.', 'regex', '/^[a-zA-Z0-9]{8,10}$/');
// snip
?>

O exemplo a que acabamos de ver implementa a validação server-side, ou seja, no lado do servidor. Veremos a seguir a possibilidade de implementar a validação do lado do cliente. Baixe o código clicando no link abaixo:
Carregue este exemplo em seu browser e clique no botão "Register" e veja que ele irá apresentar uma mensagem de erro em Javascript. Essa validação do lado do cliente é uma cortesia da mais recente atualização do pacote. Provavelmente ainda vão evoluir muito.

<?php
// snip
// validation rules come here
$obj_registration_form->addRule('txtAddress', 'Please enter your "Address" as it is a required field.', 'required', null, 'client');
$obj_registration_form->addRule('txtAddress', 'Please enter at least 20 characters in the "Address" field.', 'minlength', 20, 'client');
$obj_registration_form->addRule('txtAddress', 'Please enter at most 255 characters in the "Address" field.', 'maxlength', 255, 'client');
// snip
?>

O quinto parâmetro do método addRule() é utilizado para informar onde queremos que a validação seja feita, permite dois valores, o primeiro deles é o valor "server", que é o valor padrão e o segundo e o valor "client", usado para validar com javascript no lado do cliente.

É preciso ter em mente que a validação do lado do servidor é sempre executada, isso garante que os dados sejam validados mesmo que o usuário desative o javascript em sua máquina.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Agrupando elementos do Form
   3. Validando os dados do formulário
   4. Persistindo os dados no banco MySQL
Outros artigos deste autor

Dicas simples para dar mais usabilidades aos formulários

Paginação de resultados com a classe ADODB

Uma introdução à classe ADODB

Uma introdução à biblioteca GD

Leitura recomendada

Usando Blocos Dinâmicos com a Classe FastTemplate (Parte 2)

Trabalhando conteúdo dinâmico com Smarty

Usando Blocos Dinâmicos com a Classe FastTemplate (Parte 1)

Polimorfismo e PHP 5

Relatórios com PHP e XSLT - Conceitos iniciais e utilização básica

  
Comentários
[1] Comentário enviado por removido em 20/04/2006 - 02:58h

O PEAR é um repositório de diversas classes prontas. Uma delas, muito útil, é a PEAR-DB, utilizada como forma de abstrair a integração com diversos SGBD's modificando uma única linha de configuração.

[2] Comentário enviado por celiojs em 20/04/2006 - 14:16h

Realmente o PEAR parece ajudar.
Muito bom o seu artigo.
Parabéns!!

[3] Comentário enviado por redstyle em 20/04/2006 - 14:45h

Alguém aqui já instalou alguma classe manualmente ? Ou seja, não usou os comandos linux ou o go-pear do windows.

É que se você fizer um sistema e tem controle no server blz...mas e em sites hospedados eles não tem essa classe.

Tem como subir os arquivos e fazer funcionar corretamente?
Tentei, mas sempre dava caminho de includes errado já que uma classe chama a outra.

Muito bom o artigo, realmente ajuda muito.

Dica pra validar com javascript é a biblioteca YAV http://yav.sourceforge.net

T+

[4] Comentário enviado por gurski em 20/04/2006 - 22:04h

Otimo artigo, estou utilizando a classe HTML_Template_IT junto com a HTML_QuickForm e seu artigo vai ajudar bastante.

[5] Comentário enviado por taiar em 05/02/2009 - 08:47h

Excelente artigo.

Abordou muito bem os aspectos que qualquer um precisa na prática.

Excelente!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts