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