Precisa de um freelancer, códigos-fonte e exemplos completos?
Bem-vindo(a) ao meu site. Além de realizar alguns serviços como freelancer eu tenho alguns códigos-fonte e exemplos completos de Java, Delphi, PHP, Python, C/C++, Hibernate, JPA, Spring, JSP, Servlets, Ruby, Ruby On Rails e muitas outras linguagens e frameworks. Veja como falar comigo clicando aqui.
 
Arquivo de Códigos - Página Inicial
Códigos-fonte
» Códigos-fonte e exemplos completos
Linguagens
» ActionScript
» Adobe AIR
» Adobe Flex
» AJAX
» C
» C#
» C++
» CSS
» Delphi
» DHTML - Dynamic HTML
» HTML/XHTML
» Java
» JavaFX
» JavaScript
» Java Servlets
» JSP - Java Server Pages
» Perl
» PHP
» PHP-GTK
» Python
» Ruby
» Tcl/Tk
» VB.NET
Bancos de Dados
» IBM DB2
» MySQL
Frameworks
» CodeIgniter
» jQuery
» JSF - Java Server Faces
» Qt
» Ruby On Rails
» Struts
» Struts 2
» wxWidgets
» Zend Framework
Container/Servidor
» Apache Tomcat
» Apache Web Server
Ferramentas
» Apache Ant
» iTextSharp (iText#)
Referências
» CSS1 e CSS2
» JavaScript
Serviços On-Line
» Qual é meu IP?
» Tabela Cores HTML I
» Tabela Cores HTML II
» Lista de Mime Types
» Códigos Teclas Virtuais
Usuários On-Line
Visitantes: 46
PHP
O que há de novo no PHP 5?
40 dicas e truques sobre como trabalhar com datas e horas em PHP
60 dicas e truques sobre como trabalhar com strings e caracteres em PHP
PHP e a Orientação a Objetos - POO (Curso Completo)

DHTML
Curso completo de DHTML para iniciantes

CSS
Como definir uma imagem de fundo fixa na página
Definindo uma imagem de fundo para botões HTML
Você está aqui: Inicio -> Tutoriais -> Adobe Flex
Escrevendo um sistema de login de usuários usando Flex + PHP

1 - Introdução

Uma das maiores vantagens do uso de Flex é que a aplicação e boa parte do processamento das regras de negócios podem ser feitas no cliente, ou seja, no browser do usuário. Isso faz com que recursos do servidor web sejam poupados consideravelmente.

Contudo, há momentos em que a aplicação Flex precisa obter ou enviar dados ao servidor web. Geralmente isso é feito de forma assíncrona, de modo que o usuário poderá continuar interagindo com a aplicação enquanto requisições são feitas nos bastidores.

Uma das formas mais comuns de acesso ao servidor web por parte de uma aplicação Flex é por meio de RPC (Remote Procedure Call - Chamada Remota de Procedimento). Este artigo aborda a técnica usada para enviar dados informados pelo usuário na aplicação Flex para um programa PHP. O programa PHP, por sua vez, poderá processar os dados recebidos e emitir uma resposta informando o sucesso ou falha da operação.

2 - Descrição do projeto

A aplicação que escreveremos é um sistema simples de login de usuários. O usuário informará o nome de usuário e senha e clicará o botão Acessar. Neste momento a aplicação Flex fará uma chamada remota a um programa PHP enviando o nome de usuário e senha por meio do método POST. Tão logo o programa PHP seja executado, teremos uma janela de mensagem informando se os dados informados estão corretos ou incorretos.

Antes de prosseguirmos, veja abaixo a aplicação Flex totalmente funcional. Experimente informar quaisquer dados e finalmente informe "osmar" como nome de usuário e "arquivo" como senha:

3 - O documento PHP

A melhor forma de realmente entender este projeto, é começando pelo código PHP. Veja a sua simplicidade:

Código para logar_flex.php

<?
  $usuario = htmlspecialchars($_POST["usuario"]);
  $senha = htmlspecialchars($_POST["senha"]);

  if(($usuario == "osmar") && ($senha == "arquivo")){
    echo "sucesso";
  }
  else{
    echo "erro";
  }
?>


Veja que aqui nós testamos os valores das variáveis $usuario e $senha. Se o teste for positivo, apenas escrevemos "sucesso" no documento. Se for negativo, escrevemos "erro". É claro que em uma aplicação do mundo real, o nome de usuário e senha poderiam ser verificados em uma base de dados. O importante aqui é perceber que os dados que estamos escrevendo no documento estarão visíveis à aplicação Flex quando a chamada remota de procedimentos (RPC) retornar.

4 - O documento MXML

Como já sabemos de artigos anteriores, uma aplicação Flex é descrita em um documento do tipo XML chamado MXML. Neste documento podemos descrever o comportamento da aplicação e também adicionar códigos ActionScript. Veja a listagem:

Código para Login.mxml:

<?xml version="1.0" encoding="iso-8859-1"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

  <mx:Panel id="painel" title="Login do Usuário" status="Active"
    height="200" width="200" paddingTop="10" paddingLeft="10"     paddingRight="10" paddingBottom="10">

    <mx:Label text="Usuário:"/>
    <mx:TextInput id="nome"/>
    <mx:Label text="Senha:"/>
    <mx:TextInput displayAsPassword="true" id="senha"/>
    <mx:Button label="Acessar!" click="login.send()"/>

  </mx:Panel>

  <mx:Script>
    <![CDATA[
      import mx.controls.Alert;
      import mx.rpc.events.FaultEvent;
      import mx.rpc.events.ResultEvent;

      public function sucesso(event:ResultEvent):void{
        var resultado:String = String(event.result);

        if(resultado == "sucesso")
          Alert.show("Login efetuado com sucesso!", "Login");
        else
          Alert.show("Nome de usuário ou senha não confere!", "Login");

        nome.text = "";
        senha.text = "";
      }

      public function falha(event:FaultEvent):void{
        Alert.show("Falha: " + event.fault.toString(), "Erro");
      }
    ]]>
  </mx:Script>

  <mx:HTTPService id="login"
    url="http://www.arquivodecodigos.net/arquivo/logar_flex.php"
    method="POST" result="sucesso(event)"
    fault="falha(event)" resultFormat="text">
    <mx:request>
      <usuario>{nome.text}</usuario>
      <senha>{senha.text}</senha>
    </mx:request>
  </mx:HTTPService>

</mx:Application>


Vamos começar analisando os controles usados nesta aplicação:

<mx:Label text="Usuário:"/>
<mx:TextInput id="nome"/>
<mx:Label text="Senha:"/>
<mx:TextInput displayAsPassword="true" id="senha"/>
<mx:Button label="Acessar!" click="login.send()"/>


Veja como definimos os valores "nome" e "senha" para a propriedade id das duas caixas de texto. Ao definir true para a propriedade displayAsPassword da segunda caixa de texto, nós fazemos com que ela se comporte como um campo de senha. Veja que, no evento click do botão, nós fazemos uma chamada ao método send() de um componente chamado login. Vamos analisá-lo agora:

<mx:HTTPService id="login"
  url="http://www.arquivodecodigos.net/arquivo/logar_flex.php"
  method="POST" result="sucesso(event)"
  fault="falha(event)" resultFormat="text">
  <mx:request>
    <usuario>{nome.text}</usuario>
    <senha>{senha.text}</senha>
  </mx:request>
</mx:HTTPService>


Aqui nós temos um componente do tipo HTTPService, usado para as chamadas remotas de procedimento. Veja como definimos a URL do documento PHP que será chamado, o método a ser usado (POST), a função que será chamada em caso de sucesso, a função que será chamada em caso de falha e a forma de retorno, em nosso caso será texto puro.

Os parámetros para o documento PHP são enviados por meio de um componente request:

<mx:request>
  <usuario>{nome.text}</usuario>
  <senha>{senha.text}</senha>
</mx:request>


Veja que o documento PHP receberá variáveis chamadas usuario e senha e seus valores serão o conteúdo das caixas de texto nome e senha.

Observe agora a função sucesso:

public function sucesso(event:ResultEvent):void{
  var resultado:String = String(event.result);

  if(resultado == "sucesso")
    Alert.show("Login efetuado com sucesso!", "Login");
  else
    Alert.show("Nome de usuário ou senha não confere!", "Login");

  nome.text = "";
  senha.text = "";
}


Se a chamada remota ao documento PHP for feita com sucesso, o texto enviado pelo documento PHP (vimos isso lá em cima) será armazenado em event.result. Tudo que temos a fazer é converter esse conteúdo em uma variável do tipo String e efetuar alguns testes:

var resultado:String = String(event.result);

5 - Hora de compilar e executar

Chegou a hora de compilar e testar. Veja os artigos anteriores se você ainda tiver dificuldades em compilar, executar ou colocar o resultado final em uma página HTML.

Uma advertência: Para que o exemplo funcione corretamente, o documento PHP deverá ser chamado a partir do mesmo domínio em que a aplicação Flex se encontra, ou seja, o Flash Player aplica restrições de acesso quando tentamos efetuar RPC usando domínios diferentes. A mensagem de erro é bem parecida à exibida abaixo:

Falha: [RPC Fault faultString="Security error accessing url" faultCode="Channel.Security.Error" faultDetail="Destination: DefaultHTTP"]
 
 
Arquivo de Códigos - Página Inicial
Veja dicas, truques e anotações de Delphi
Como obter e exibir todos os itens selecionados em uma TListBox de seleção múltipla
Calculando juros compostos e montante usando Delphi
Substituindo todas as ocorrências de uma substring em uma string sem considerar maiúsculas e minúsculas
Entenda e aprenda a usar o controle TComboBox em suas aplicações Delphi
Convertendo todo o conteúdo de uma string para letras maiúsculas
Gerando um número aleatório de 0 a 10 usando Delphi
Como obter o diretório atual usando a função GetCurrentDir()
Como verificar se um diretório está vazio (não contém arquivos ou subdiretórios)
Entenda e aprenda a usar o controle TListBox em suas aplicações Delphi
Como usar nil para testar ou indicar que um ponteiro não referencia nenhuma posição de memória
Veja dicas, truques e anotações de outras linguagens
JSP (Java Server Pages) - Como enviar mais de um anexo em um e-mail usando JavaMail
Python - Como obter os checkboxes marcados no formulário
Java - Como definir o Locale padrão da JVM via linha de comando
Java - Como alterar a largura das colunas de uma JTable
C# (CSharp) - Listando todos os arquivos e subdiretórios em um diretório
Java - Definindo o texto para um JTextArea
ActionScript - Como converter uma string em um valor de ponto flutuante válido
PHP - Remover os espaços em excesso de uma string
DHTML (Dynamic HTML) - Aprenda a criar botões (button) dinâmicamente
C# (CSharp) - Exibir a hora atual no formato curto (horas e minutos)

       

http://www.arquivodecodigos.net
:: Arquivo de Códigos - Softwares e Consultoria em Programação ::
Todo o conteúdo deste site, quando não devidamente observado, pertence a seus idealizadores e não
poderá ser usado para outras finalidades senão estudo e aprimoramento de técnicas de programação.
Certifique-se de ler as notas legais antes de proceder com o acesso e leitura do
conteúdo disponibilizado nestas páginas.

Fale Conosco: (62) 3261-7018 / (62) 8185-0734

Desenvolvedor Responsável: Osmar J. Silva

Página Inicial Contatos Pesquisar Mapa do Site