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.

image
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).

image
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.

image
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”.


< ?
//recuperando o nome do usuario via POST
echo("
<H1>Integrando Intraweb com PHP</H1>");

echo("Olá $_POST[nome] ");
echo("<BR>Seu animal favorito é mesmo 
$_POST[animal ?");
echo("<BR><BR>Seu acesso ocorreu no dia $_POST[dia]");
?>

Esse código faz o seguinte: o script php_test.php utiliza as variáveis $_POST[nome], $_POST[animal] e $_POST[dia] para gerar código HTML.

As variáveis necessárias para fazer o script funcionar foram definidas na UserSessionUnit e seus valores passados pelo formulário principal no evento OnClick do botão que os definiu e chamou o FormPHP. No evento OnRender (é chamado toda vez que a página é carregada) passou os valores das variáveis para o script PHP através do método POST implementado pelo IdHTTP.

Testando a aplicação

A Figura 4 mostra o formulário principal onde serão informados as variáveis que serão passadas ao script PHP.

image
Figura 4. Página principal informando as variáveis que serão passadas ao script PHP

Clicando em Enviar, será passado os valores para as variáveis do script PHP que irá lê-los e mostrará seu resultado na própria aplicação Intraweb, sendo totalmente transparente para o usuário. Note que em momento algum existe algo que relacione-o ao script PHP. É como se tudo fizesse parte de uma só aplicação (Figura 5).

image
Figura 5. Resultado gerado pelo script PHP mostrado pela aplicação Intraweb

Conclusões

Esse artigo mostra o que é possível fazer com o Intraweb, não só a integração com PHP é possível, mas sim com qualquer outra linguagem que receba valores passados através do POST, dentre elas estão o próprio Intraweb, ASP, arquivos CGI e uma infinidade mais.

Daniel Kühl Lima (daniel@fag.edu.br)