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: 33.017 ]

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


Persistindo os dados no banco MySQL



De longe essa classe supriu minhas necessidades conforme comentei no início do artigo, me basta agora ver a parte da persistência dos dados no banco de dados, que é sempre a parte final de toda aplicação. E todo esse esforço poderia ser em vão caso eu não pudesse concluir minha aplicação persistindo os dados no banco. É ai onde a classe me surpreende novamente, veremos agora essa parte.

Porém antes de entrarmos nessa parte é preciso já ter uma tabela criada, veja abaixo a estrutura da tabela que utilizaremos no exemplo.

mysql> DESC users;
+----------------------+---------------+
| Field                | Type          |
+----------------------+---------------+
| fullname             | varchar(60)   |
| address              | text          |
| country              | varchar(60)   |
| emailaddress         | varchar(100)  |
| gender               | enum('F','M') |
| dateofbirth          | date          |
| group_name           | varchar(30)   |
| group_type           | varchar(30)   |
| looking_for          | varchar(255)  |
| username             | varchar(10)   |
| pword                | varchar(10)   |
| newsletter_subscribe | enum('Y','N') |
| referrer_url         | varchar(255)  |
+----------------------+---------------+
Clique no link abaixo para baixar o código no próximo exemplo:
Antes de falar sobre como o método process() funciona, quero dar destaque a uma característica do objeto HTML_QuickForm() - a habilidade de associar filtros ao form, como o próprio nome sugere. Essa característica permite colocarmos filtros em todos ou em alguns elementos do formulário. Um bom exemplo para isso é a função trim() do PHP - é uma prática comum remover os espaços entre as palavras inseridas no campo do form. Veja esse próximo código:

<?php
// snip
// pre-validation filters come here
$obj_registration_form->applyFilter('__ALL__', 'trim');
// snip
?>

O método applyFilter() tem dois parâmetros, o primeiro é o nome do elemento e o segundo é a função PHP a ser aplicada nele. Note que você pode utilizar a palavra-chave "__ALL__" para aplicar a função a todos os elementos do formulário.

Isso permite aplicar os filtros somente na hora certa. Por exemplo, nós podemos querer aplicar alguns filtros antes que a validação esteja completa, como no código a seguir:

<?php
// snip
// validate form
if($obj_registration_form->validate()) {
  
  // post-validation filters come here
  $obj_registration_form->applyFilter('__ALL__', 'addslashes');
  $obj_registration_form->applyFilter('__ALL__', 'htmlentities');
  $obj_registration_form->applyFilter('txtAddress', 'nl2br');
  
  // invoke the "store_user_info" function to store the user information
  $obj_registration_form->process('store_user_information', false);    
  
  // exit the script, on successful insertion
  header('Location: ./success.php');
}
// snip
?>

Aqui eu apliquei um filtro somente depois que a data foi validada, por uma razão muito simples: é possível que uma função PHP como addslashes(), htmlentities() e nl2br() altere o dado enviado e assim faça a validação falhar.

Voltando ao método process(), vamos utilizá-lo no próximo código, enviamos a ele dois parâmetros:
  • O primeiro representa o nome de minha função "callback";
  • O segundo só deverá ser configurado como verdadeiro caso estejamos fazendo upload de algum arquivo via formulário.

Preste atenção no próximo script, pois e nele que eu defino a minha função "callback" chamada store_user_information(), essa função faz a inserção dos dados no banco de dados.

<?php
// snip
// custom function to store user information into the database
function store_user_information($ary_artist_info) {
  
// store information in the database
  $connection = mysql_connect('localhost', 'guest', 'pass') or die ('Unable to connect!');
  
      mysql_select_db('db2') or die ('Unable to select database!');
      
      $query  = " INSERT INTO `users` ( `fullname` , `address` , `country` , `emailaddress` , `gender` , `dateofbirth` , `group_name` , `group_type` , `looking_for` , `username` , `pword` , `newsletter_subscribe`, `referrer_url` )";
      $query .= " VALUES ('".implode(" ", $ary_artist_info['txtFullName'])."', '".$ary_artist_info['txtAddress']."', '".$ary_artist_info['ddlCountry']."', '".$ary_artist_info['txtEmailAddress']."', '".$ary_artist_info['radGender']."', '".implode("-", $ary_artist_info['txtDateOfBirth'])."', '".$ary_artist_info['txtGroupName']."', '".$ary_artist_info['radGroupType']."', '".implode(",", $ary_artist_info['ddlLookingFor'])."', '".$ary_artist_info['txtUsername']."', '".$ary_artist_info['txtPassword1']."', '".(isset($ary_artist_info['chkNewsletter']) ? "Y" : "N")."', '".$ary_artist_info['txtReferrer']."');";
    
      $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    
      mysql_close($connection);
}
// snip
?>

Caso todas as regras de validação sejam satisfeitas, o usuário será direcionado para a página de sucesso (success.php).

Agora posso dizer que estou pronto para concluir meu protótipo de registro - a tarefa foi facilmente feita pelo pacote HTML_QuickForm() da classe PEAR.

O primeiro exemplo neste artigo demonstrou como você poderia criar o formulário usando o objeto de HTML_QuickForm() e seu método addElement(). O segundo exemplo foi sobre explicar o conceito de "agrupar" os elementos - estes poderiam seguir uma organização lógica ou simplesmente porque nós queremos exibir dois controles na mesma linha. Em seguida, eu mostrei-lhe que como executar a validação "server-side", como também a validação do "client-side" definindo "regras" para o formulário. Finalmente, o exemplo concluído mostrou-lhe como filtrar os dados submetidos pelo usuário e introduzí-los em uma base de dados de MySQL usando o método do process().

Nota: Esse artigo é uma tradução, o original encontra-se em:
Página anterior    

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

Paginação de resultados com a classe ADODB

Uma introdução à classe ADODB

Uma introdução à biblioteca GD

Dicas simples para dar mais usabilidades aos formulários

Leitura recomendada

Aumente sua produção em PHP

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

Organizando projetos com a classe FastTemplate (parte 1)

Administrando usuários no GNU/Linux e Samba via web com PHP

Polimorfismo e PHP 5

  
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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts