Integrando Intraweb com PHP

Passe parâmetros para script PHP com IW

 

Atualmente, a linguagem PHP é muito popular na criação de sites, e o Intraweb vem sendo cada vez mais utilizado em ambientes corporativos, devido a sua facilidade de uso e rapidez no desenvolvimento de soluções para a internet, baseado no ambiente de desenvolvimento do Delphi.

Este artigo explica como é possível unir essas duas tecnologias, ganhando produtividade, sem perder a flexibilidade e sem a necessidade de um grande impacto de migração no sistema.

No Intraweb, as funcionalidade são infinitamente mais fáceis e práticas de serem implantadas principalmente no que diz respeito a controle de sessão do usuário e manipulação de dados com o banco.

Componentes utilizados

Foi utilizado os seguintes pacotes de componentes no desenvolvimento dessa aplicação para integrar com scripts PHP:

• Indy 10, que acompanha o Delphi 2005 (disponível para download em www.atozed.com/indy/Plus/Files.iwp);

• Intraweb 7.2, que acompanha o Delphi 2005 (disponível para download em www.atozed.com/intraWeb/Download/Files/Archives/70.iwp)

 

Este artigo parte do princípio que você já possui um servidor Web com PHP instalado e configurado.

Criando os formulários Intraweb e códigos

Crie uma nova aplicação Intraweb no Delphi, utilizando o assistente do Intraweb (em File|New>Other>Intraweb), conforme a Figura 1.

 

Figura 1. Criando uma aplicação Intraweb utilizando o assistente

Na próxima tela, em Application Type escolha StandAlone Application, em Options marque a opção Create User Session. Clique em OK para prosseguir.

Abra a unit UserUnitSession, adicione um IdHTTP (IndyClients) e altere seu nome para “HTTP1” (Figura 2).

 

Figura 2. Inserindo o IdHTTP na sessão do usuário

Salve a unit do formulário principal como “u_main.pas”, a unit da sessão do usuário (UserUnitSession) e do controlador do servidor Intraweb (ServerController) com o nome sugerido e o projeto como “iw_php.dpr”.

Na unit UserSessionUnit adicione na cláusula uses IdMultipartFormData. Após, é necessário criar as variáveis responsáveis, por armazenar os parâmetros que serão passados ao script PHP.

Na seção public, adicione as variáveis, conforme o código a seguir:

 

public

  Data: TIdMultiPartFormDataStream;

  Nome, animal: string;

  Dia: TDateTime;

 

Essas variáveis, receberão os parâmetros passados pelo script PHP, assim estarão disponíveis para as outras units, tendo seus valores distintos por sessão criada.

No evento OnCreate do UserSessionUnit, adicione o seguinte código:

 

Data := TIdMultiPartFormDataStream.Create;

 

No formulário principal, adicione dois IWLabel e altere a propriedade Caption para “Informe seu nome completo” e “Qual seu animal favorito?” para cada um. Adicione também um IWEdit (“EditNome”), um IWComboBox (“ComboAnimal”) com os itens: “Cachorro”, “Gato”, “Cavalo” e “Passarinho” e um IWButton (“BtnEnviar”). A aparência final do formulário deverá ser parecida com a Figura 3.

 

Figura 3. Aparência final do formulário principal

No uses do formulário adicione as units ServerController e UserSessionUnit. No evento OnClick do botão digite o seguinte código:

 

UserSession.Nome := EditNome.Text;

UserSession.animal := ComboAnimal.Text;

UserSession.Dia := Date;

TFormPHP.Create(WebApplication).Show;

 

Crie mais um formulário Intraweb (File|New>Others>Intraweb>New Form), que irá conter o código retornado pelo IdHTTP com o resultado gerado pelo script PHP em um servido qualquer. Salve a unit gerada como “u_php.pas” e altere a propriedade Name do formulário para “FormPHP”. Adicione na cláusula uses do formulário principal, a unit do formulário recém criado.

De volta ao FormPHP, adicione um IWText, alterando a propriedade Name para “TextPHP” e RawText para True. Adicione à cláusula uses do formulário as units ServerController e UserSessionUnit. No evento OnRender do FormPHP, acrescente o código seguir.

 

try

   { Adiciona os parâmetros usados nas

     var do Scrip PHP }

   UserSession.Data.AddFormField('Nome',

     UserSession.Nome);

   UserSession.Data.AddFormField('Animal',

     UserSession.animal);

   UserSession.Data.AddFormField('Dia',

     DateToStr(UserSession.Dia));

   { Chama o método POST do TidHTTP e lê

     o resultado do Text }

   TextPHP.Lines.Text := UserSession.HTTP1.Post(

       'http://localhost/php_test.php',

     UserSession.Data);

   finally

     UserSession.Data.Free;

   end;

 

A sintaxe para o método AddFormField é:

 

AddFormField('nome_variavel_no_script_php', 'valor_passado_para_a_variavel');

 

No código a seguir temos o script PHP, que você pode salvá-lo com o nome de “php_test.php”.