Pascal para Web com CGI - Parte I

Vamos ver como é fácil programar para Web com Pascal através de CGI. Recomendo àqueles que curtem a linguagem e nunca se viram programando para Web com ela, ou gostariam de aproveitar seu conhecimento para atuar com aplicações Web e/ou sites.

[ Hits: 56.412 ]

Por: Zendrael em 04/07/2012


Tratando parâmetros e formulários



Tanto em aplicações Web quanto em sites, temos necessidade de criar interação com o usuário, seja recebendo informações dele através de formulários ou gerenciando como o conteúdo será exibido.

As páginas e aplicações Web utilizam os métodos GET e POST para passagem de parâmetros e ambos têm formas distintas, mas muito simples de serem utilizadas.

Lidando com GET e POST

Vamos aproveitar nosso projeto já aberto e preparar uma ação que irá lidar com os métodos GET e POST, identificando-os e exibindo o valor de um parâmetro passado.

Selecione o WebModule, vá ao Object Inspector e em "Actions", crie uma nova Action com o name "acao2". No evento "OnRequest" dessa nova ação, insira o código a seguir:

procedure TFPWebModule1.acao2Request(Sender: TObject; ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
begin
     //tipo de resposta (header)
     AResponse.ContentType:= 'text/html';

     //checa como vieram os parâmetros
     if( LowerCase( ARequest.Method ) = 'get') then //via GET
       begin
            AResponse.Contents.Add( 'Rebebido método GET<br/>' );
            AResponse.Contents.Add( 'O valor do parâmetro é: ' );
            AResponse.Contents.Add( ARequest.QueryFields.Values['edtCampo'] );
       end
       else
       begin //via POST
            AResponse.Content:= 'Rebebido método POST<br/>';
            AResponse.Contents.Add( 'O valor do parâmetro é: ' );
            AResponse.Contents.Add( ARequest.ContentFields.Values['edtCampo'] );
       end;
     //informa o CGI de que a ação foi realizada
     Handled:= True;
end;

O código acima prepara a "acao2" para receber parâmetros por GET e POST, primeiro verificando o método utilizado e em seguida exibindo o valor do campo passado como parâmetro (estou assumindo que você já sabe a diferença entre ambos, pois senão terei que escrever demais para explicar).

Assim, toda vez que a "acao2" do CGI for chamada, ela irá avaliar como a informação foi passada e, se um campo de nome (name no HTML) "edtCampo" for chamado, irá mostrar seu valor.

O leitor deve notar que a única diferença entre os comandos que carregam os valores de GET e POST são as propriedades "QueryFields" e "ContentFields" de ARequest respectivamente.

Compile o projeto e coloque na pasta cgi-bin (lembre-se de dar as permissões necessárias).

Recebendo dados de páginas HTML

Agora que sabemos como nosso CGI irá receber e tratar os dados vindos da URL e de formulários, vamos criar uma página HTML com dois formulários e um link comum.

Esta página deverá ser colocada na raiz do seu site que, segundo nosso exemplo, encontra-se em /var/www - como é apenas uma página HTML que vai chamar nosso CGI, não precisa ser colocada na pasta cgi-bin.

O código está comentado. Digite-o e salve a página como: chamaCGI.html

<html>
   <head>
       <title>Chamando CGI por GET e POST</title>
   </head>

   <body>

       <h3>Chamar por GET</h3>
    
       <form action="/cgi-bin/projeto/acao2" method="GET">
           <input type="text" name="edtCampo">
           <input type="submit" value="enviar por GET"/>
       </form>
      
       <hr/>
    
       <h3>Chamar por POST</h3>
      
       <form action="/cgi-bin/projeto/acao2" method="POST">
           <input type="text" name="edtCampo">
           <input type="submit" value="enviar por POST"/>
       </form>
      
       <hr/>

       <h3>Links usam GET</h3&ggt;

       <a href="/cgi-bin/projeto/acao2?edtCampo=Link clicado!">Clique aqui para acessar via GET</a>

   </body>
</html>

Agora abra seu navegador e acesse:
  • http://127.0.0.1/chamaCGI.html

Podemos agora testar cada um dos formulários da página e o link no final dela. Se tudo estiver OK, as respostas deverão ser aquelas que preparamos no CGI anteriormente.

Deve-se observar que o nome do campo no HTML, especificado pelo parâmetro name, é o nome que será lido no CGI. Para cada campo que desejar pegar seu valor, deve haver uma identificação única (e de preferência, coerente).

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Preparando o ambiente
   3. Criando o primeiro CGI
   4. Tratando parâmetros e formulários
   5. Conclusão
Outros artigos deste autor

Introdução ao PHP-GTK

Pascal para Web com CGI - Parte II

Leitura recomendada

Pascal para Web com CGI - Parte II

Configurando o Apache para executar CGIs em Kylix

Desenvolvendo uma agenda telefônica simples no Kylix

Como imprimir diretamente na porta de impressão

Como garantir compatibilidade entre Kylix e Delphi

  
Comentários
[1] Comentário enviado por rony_souza em 04/07/2012 - 20:59h

MUITO BOA DICA AMIGO!!!

BELA POSTAGEM....


[2] Comentário enviado por zendrael em 05/07/2012 - 09:21h


[1] Comentário enviado por Scyther Kazpor em 04/07/2012 - 20:59h:

MUITO BOA DICA AMIGO!!!

BELA POSTAGEM....



Obrigado Scyther!
Aguarde a segunda parte em breve!
Até +

[3] Comentário enviado por gibroh@hotmail.c em 03/10/2012 - 21:34h

Excelente Artigo !!

[4] Comentário enviado por ivomar em 29/01/2015 - 16:52h


Excelente artigo!

Obs: quando executo meu cgi ele tenta fazer download. Alguma dica?

[5] Comentário enviado por zendrael em 29/01/2015 - 22:16h


[4] Comentário enviado por ivomar em 29/01/2015 - 16:52h


Excelente artigo!

Obs: quando executo meu cgi ele tenta fazer download. Alguma dica?


Oi ivomar!

Confira as configurações do seu apache e do diretório cgi-bin.

Obrigado!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts