35
Formulários Web avançados em PHP Formulários Web avançados em PHP Formulários Web em PHP com plug-ins Formulários Web em PHP com plug-ins avançados e AJAX avançados e AJAX http://www.phpclasses.org/formsgeneration Manuel Lemos [email protected] PHPSC Conf Chapecó – Santa Catarina 20 de Junho de 2008 Licença desta palestra: Creative Commons Attribution-NoDerivs 2.5 Atribuição-Não a obras Derivadas 2.5

Formulários Web em PHP com plug-ins avançados e AJAX

Embed Size (px)

DESCRIPTION

Tutorial sobre a classe de geração e validação de formulários Web em PHP e seus plug-insavançados com suporte a AJAX

Citation preview

Page 1: Formulários Web em PHP com plug-ins avançados e AJAX

Formulários Web avançados em PHPFormulários Web avançados em PHP

Formulários Web em PHP com plug-ins Formulários Web em PHP com plug-ins avançados e AJAXavançados e AJAX

http://www.phpclasses.org/formsgeneration

Manuel [email protected]

PHPSC ConfChapecó – Santa Catarina

20 de Junho de 2008Licença desta palestra: Creative Commons

Attribution-NoDerivs 2.5 Atribuição-Não a obras Derivadas 2.5

Page 2: Formulários Web em PHP com plug-ins avançados e AJAX

Licença Creative Commons Licença Creative Commons Atribuição-Não a obras Derivadas 2.5Atribuição-Não a obras Derivadas 2.5

Você pode:● copiar, distribuir, exibir e executar a obra● fazer uso comercial da obra

Sob as seguintes condições:

Atribuição. Você deve dar crédito ao autor original, da forma especificada por Manuel Lemos.

Vedada a Criação de Obras Derivadas. Você não pode alterar, transformar ou criar outra obra com base nesta.

● Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra.

● Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão de Manuel Lemos.

Qualquer direito de uso legítimo (ou "fair use") concedido por lei, ou qualquer outro direito protegido pela legislação local, não são em hipótese alguma afetados pelo disposto acima.

Este é um sumário para leigos da Licença Jurídica (na Íntegra).

Page 3: Formulários Web em PHP com plug-ins avançados e AJAX

Creative Commons License DeedCreative Commons License DeedAttribution-No Derivs 2.5 Attribution-No Derivs 2.5

You are free:

● to Share -- to copy, distribute, display, and perform the work● to make commercial use of the work

Under the following conditions:

Attribution. You must attribute the work in the manner specified by Manuel Lemos.

No Derivative Works. You may not alter, transform, or build upon this work.

● For any reuse or distribution, you must make clear to others the license terms of this work.● Any of these conditions can be waived if you get permission from Manuel Lemos.

Your fair use and other rights are in no way affected by the above.This is a human-readable summary of the Legal Code (the full license).

Page 4: Formulários Web em PHP com plug-ins avançados e AJAX

Classe Forms Generation and Classe Forms Generation and Validation – O que é?Validation – O que é?

● Classe de objetos em PHP● Gera HTML para apresentar formulários Web● Gera Javascript para validar formulários antes do

browser enviar para o servidor● Valida formulários no servidor através do código da

PHP da própria classe● Extensível através de classes plug-in● Open Source com licença tipo BSD● Bastante reputada no mundo do PHP e Open Source

Mais de 57.000 usuários distintos baixaram do site PHPClasses

Número 214 no top de popularidade do Freshmeat

Page 5: Formulários Web em PHP com plug-ins avançados e AJAX

Histórico do desenvolvimento da Histórico do desenvolvimento da classeclasse

● 12/01/1999: Criação da classe

● ../../1999: Oferta da classe em listas de discussão

● 05/06/1999: Usuário faz grandes elogios na lista php-general

● 18/06/1999: Início do site PHPClasses

● 24/06/1999: Lançamento do site PHPClasses

● 16/12/2002: Plug-in para integração com Smarty

● 03/04/2004: Templates usando HTML com PHP

● 14/06/2004: Controles especiais usando plug-ins

● 29/12/2004: Processamento de eventos do browser no servidor

● 25/06/2005: Interligação de controles disparada por eventos

● 14/03/2006: Envio de formulários por AJAX

Page 6: Formulários Web em PHP com plug-ins avançados e AJAX

Histórico do lançamento dos plug-insHistórico do lançamento dos plug-ins● 14/06/2004: Date● 29/12/2004: CAPTCHA● 25/06/2005: Linked select● 30/12/2005: MySQL, Metabase, MDB2 linked select● 14/03/2006: AJAX submit● 26/03/2006: Layout vertical● 24/05/2006: Map location● 21/06/2006: Autocomplete● 12/07/2006: MySQL, Metabase, MDB2 autocomplete● 28/07/2006: Animation● 16/12/2006: Upload progress● 03/04/2007: Secure submit● 20/02/2008: Layout paged

Page 7: Formulários Web em PHP com plug-ins avançados e AJAX

Modo de usoModo de uso

O script que apresenta é o mesmo que processaCriar um objeto da

classe

Definir os campos do formulário

Carregar os valores

enviados, se for o caso

Mostrando o formulário

pela primeira vez?

Validar os valores

enviados

Os campos estão todos

válidos?

Processar o formulário

Mostra o formulário

Mostra o formulário

denotando os campos

inválidos

Sim

Não

Não

Sim

Page 8: Formulários Web em PHP com plug-ins avançados e AJAX

Exemplo de usoExemplo de usoinclude('forms.php');

$form = new forms_class;

$form->AddInput(array( 'TYPE'=>'text', 'NAME'=>'nome', 'ID'=>'nome', 'LABEL'=>'<u>N</u>ome, 'ACCESSKEY'=>'N', 'ValidateAsNotEmpty'=>1, 'ValidationErrorMessage'=> 'Não foi indicado o nome.'));

$form->LoadInputValues();

$processado=false;

if($form->WasSubmitted()) { $erro=$form->Validate($verificar); if(strlen($erro)) echo 'Erro: ', $erro; else { // Processamento vai aqui $processado=true; }}

if($processado) echo 'Formulário processado!';else { $form->StartLayoutCapture(); require('template.php'); $form->EndLayoutCapture(); $form->DisplayOutput();}

Page 9: Formulários Web em PHP com plug-ins avançados e AJAX

Exemplo de templateExemplo de template

template.php

<p><?php $form->AddLabelPart(array( 'FOR'=>'nome' ));?>: <?php $form->AddInputPart('nome');?></p>

Page 10: Formulários Web em PHP com plug-ins avançados e AJAX

APIAPI

Separação em 3 camadas:

1. Definição

2. Apresentação

3. Processamento

Page 11: Formulários Web em PHP com plug-ins avançados e AJAX

API: Definição do formulárioAPI: Definição do formulário

● AddInput

Adiciona campo ao formulário com determinados parâmetros

● Connect

Interligar campos de forma que quando ocorre um evento num campo, executa uma ação noutro campo

Exemplo: quando muda um combo, simula o click num botão de enviar

● Variáveis da classe para configuração

Exemplo: ACTION, METHOD, TARGET, etc..

Page 12: Formulários Web em PHP com plug-ins avançados e AJAX

API: Apresentação do formulárioAPI: Apresentação do formulário

● AddInputPart, AddLabelPart, AddDataPartAdiciona um campo, um rótulo ou HTML à apresentação do formulário

● StartLayoutCapture, EndLayoutCaptureCaptura automática de HTML para a apresentação do formulário

● FetchOutput, DisplayOutputGera o HTML e Javascript do formulário

● PageHead, PageLoad, PageUnloadGera o HTML e Javascript que tem de ir para seção da página HEAD ou atributos ONLOAD e ONUNLOAD da marca BODY

Page 13: Formulários Web em PHP com plug-ins avançados e AJAX

API: Processamento do formulárioAPI: Processamento do formulário

● LoadInputValuesExtrai valores enviados, descarta valores forjados, converte valores escapados, formata máscaras

● WasSubmittedVerifica se o formulário está sendo enviado para processamento ou está sendo apresentado pela primeira vez

● ValidateVerifica se os valores dos campos de todo formulário ou de parte são válidos

● GetInputValue, GetCheckedState, GetCheckedRadioRetorna os valores extraídos dos campos do formulário

Page 14: Formulários Web em PHP com plug-ins avançados e AJAX

Definição dos campos do formulárioDefinição dos campos do formulário

Array associativo passado para a função AddInput:● Parâmetros obrigatórios: TYPE, NAME, ID● Parâmetros de apresentação: CLASS, LABEL, etc.● Parâmetros de validação● Parâmetros específicos do tipo de campo● Exemplo:

$form->AddInput( array('TYPE'=>'password','NAME=>'senha','ID'=>'senha','CLASS'=>'senha''ValidateAsNotEmpty'=>true,'ValidationErrorMessage'=>'O campo senha está vazio.','MAXLENGTH'=>10

) );

Page 15: Formulários Web em PHP com plug-ins avançados e AJAX

Filtragem e validação de valoresFiltragem e validação de valores

● Geração de Javascript para validação no browser● Carregamento de valores enviados● Filtragem de valores forjados

Exemplo: MAXLENGTH, DiscardInvalidValues● Conversão de valores escapados – magic quotes● Formatação de máscaras com expressões regulares

Exemplo: CEP → “^([0-9]{5})-?([0-9]{3})$” → “\1-\2”

● Validação no lado do servidor pela classe e plug-ins● Mensagens de erro● Foco e iluminação dos campos inválidos

Exemplo: InvalidCLASS, InvalidSTYLE

Page 16: Formulários Web em PHP com plug-ins avançados e AJAX

Tipos de validação pré-definidosTipos de validação pré-definidos

● Campo vazio, tamanho mínimo

● Campo igual ou diferente a outro ou a um valor

● Número inteiro, decimal ou vírgula flutuante

● E-mail, número de cartão de crédito

● Conforme uma expressão regular ou não

● Grupo de campos radio ou checkbox selecionado

● Funções definidas pelo desenvolvedor

● Validação especial implementada por plug-in

Page 17: Formulários Web em PHP com plug-ins avançados e AJAX

Apresentação do formulário usando Apresentação do formulário usando templatestemplates

● Plug-in para templates de SmartyPré-filtro que substitui HTML e marcas {input}, {label} por chamadas às funções AddDataPart, AddInputPart, AddLabelPart

● HTML com PHPStartLayoutCapture e EndLayoutCapture delimitam a captura de HTML para depois adicionar com AddDataPart

● Layout automáticoApresentação padronizada sem definição manual de HTML

Page 18: Formulários Web em PHP com plug-ins avançados e AJAX

Plug-insPlug-ins

● Proporcionam novos tipos de controles, comportamentos, validação, ou layout de outros controles

● Implementados por classes derivadas da classe base de plug-in

● Podem gerar HTML ou Javascript ou não

Page 19: Formulários Web em PHP com plug-ins avançados e AJAX

Plug-in: Data do calendárioPlug-in: Data do calendário

● Apresenta 3 controles para escolha do ano, mês e dia

● A data aparece formatada de forma configurável

● Aceita qualquer data válida entre os anos 1 e 9999 DC

● Pode restringir a data entre um dia inicial e outro final

Page 20: Formulários Web em PHP com plug-ins avançados e AJAX

Plug-in: Verificação de usuário Plug-in: Verificação de usuário humano usando CAPTCHAhumano usando CAPTCHA

● Gera uma imagem com o texto que deve ser digitado

● A imagem aparece ofuscada para dificultar os robôs

● Um botão pode ser usado para redesenhar a imagem

● O texto pode expirar ao fim de um periodo de tempo

Page 21: Formulários Web em PHP com plug-ins avançados e AJAX

Plug-in: Localidade no mapaPlug-in: Localidade no mapa

● Obtem coordenadas dum local indicado pelo usuário● Os mapas são apresentados pela Google Maps API● As coordenadas aparecem em campos de texto● O nível de zoom pode ser ajustado de várias formas

Page 22: Formulários Web em PHP com plug-ins avançados e AJAX

Plug-in: Animação com efeitos Plug-in: Animação com efeitos visuaisvisuais

● Anima elementos da página através de efeitos visuais

● Cada animação tem uma sequência de efeitos visuais

● Várias sequências podem ser animadas em paralelo

● São suportados diversos tipos de efeitos:

1) Substituir ou inserir conteúdo de um elemento

2) Mostrar ou esconder elementos

3) Aparecer ou desaparecer um elemento suavemente

4) Cancelar animação paralela para sincronizar efeitos

Page 23: Formulários Web em PHP com plug-ins avançados e AJAX

Plug-in: Layout automático na verticalPlug-in: Layout automático na vertical

● Dispõe vários campos na vertical, um por cada linha● Não requer uso de HTML na forma de uso padrão● O HTML dos templates de cada campo é redefinível● Campos inválidos aparecem com uma marca especial● Certos campos podem ser tornados invisíveis

Page 24: Formulários Web em PHP com plug-ins avançados e AJAX

Plug-in: Layout paginadoPlug-in: Layout paginado

● Mostra vários campos por páginas, um de cada vez● Mostar vários botões para trocar de página● Pode usar efeito de transição suave quando troca de

página

Page 25: Formulários Web em PHP com plug-ins avançados e AJAX

Plug-in: Envio seguroPlug-in: Envio seguro

● Prevenção de ataques do tipo CSRF – Cross-Site Request Forgery

● Botão de envio com campo de validação escondido

● Uma chave secreta é passada pelo campo escondido

● A chave deixa de ser valida ao fim de um certo tempo

Page 26: Formulários Web em PHP com plug-ins avançados e AJAX

Plug-in: Envio do formulário usando Plug-in: Envio do formulário usando AJAXAJAX

● Envia o formulário sem recarregar a página● IFRAME escondido é mais poderoso e portátil● Pode exibir mensagens sobre atividade no servidor● Gera Javascript para executar ações como resposta:

1) Substituir ou inserir conteúdo na página atual

2) Alterar uma propriedade de um elemento da página

3) Pausar durante um periodo definido

4) Redirecionar o browser para outra página

5) Executar um comando de Javascript arbitrário

Page 27: Formulários Web em PHP com plug-ins avançados e AJAX

COMET: AJAX com IFRAMECOMET: AJAX com IFRAME

Page 28: Formulários Web em PHP com plug-ins avançados e AJAX

Plug-in: Combos interligadosPlug-in: Combos interligados

● Pode interligar 2 ou mais campos combo em cadeia● Quando o valor de um muda, troca as opções doutro● Opções estáticas ou trazidas do servidor por AJAX● Tem versões para pegar opções de bancos de dados

Page 29: Formulários Web em PHP com plug-ins avançados e AJAX

Plug-in: Auto-completar textoPlug-in: Auto-completar texto

● Completa texto digitado a partir de lista de palavras● Mostra as palavras que podem completar num menu● Pode obter as palavras do servidor através de AJAX● Tem versões para pegar opções de bancos de dados

Page 30: Formulários Web em PHP com plug-ins avançados e AJAX

Plug-in: Barra de progresso de Plug-in: Barra de progresso de uploadupload

● Envia um pedido AJAX em paralelo com o envio do formulário

● Usa a extensão uploadprogress para vigiar o progresso do upload a cada segundo

● Mostra uma barra de progresso com estatísticas opcionais de velocidade e tempo estimado para o fim

Page 31: Formulários Web em PHP com plug-ins avançados e AJAX

Plug-ins de terceirosPlug-ins de terceiros

● Xinha: Alessandro Bianchi (Itália)Controle para editar HTMLhttp://www.phpclasses.org/xinha_plug_in

● Cal: Alessandro Bianchi (Itália)Controle de calendário com popup para navegar pelos meses e anoshttp://www.phpclasses.org/plugin_cal_class

● FCKEditor: Matías Montes (Argentina)Controle para editar HTMLhttp://www.phpclasses.org/form_fckeditor

● O seu plug-inQualquer um pode desenvolver os seus plug-ins

Page 32: Formulários Web em PHP com plug-ins avançados e AJAX

Planos futurosPlanos futuros

● Definição de formulários através de arquivos XML● Templates visuais para edição em programas tipo

DreamWeaver● Cache da definição e da apresentação do formulário● Plug-in para processar eventos de arrastar e soltar

controles e elementos de página (Drag and Drop)● Plug-in para scaffolding: andaime para montagem de

listagens de dados dinâmicosExemplo: inserir, listar, alteram e apagar registros de banco de dados

Page 33: Formulários Web em PHP com plug-ins avançados e AJAX

Oportunidades de contribuiçãoOportunidades de contribuição

● Corrigir e reportar eventuais bugs

● Sugerir novas capacidades

● Desenvolver novos plug-ins

● Traduzir a documentação para Português

● Divulgar o projeto

Page 34: Formulários Web em PHP com plug-ins avançados e AJAX

FimFim

Obrigado pela atenção

Questões?

Page 35: Formulários Web em PHP com plug-ins avançados e AJAX

ReferênciasReferências

● Página da classe de formulários

http://www.phpclasses.org/formsgeneration

● Lista de discussão geral

http://br.groups.yahoo.com/group/forms-dev

● Lista de discussão para quem fala português

http://br.groups.yahoo.com/group/forms-pt