Pular para o conteúdo

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.
Zendrael zendrael
Hits: 58.882 Categoria: Kylix Subcategoria: Internet
  • Indicar
  • Impressora
  • Denunciar

Parte 4: 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).

   1. Introdução
   2. Preparando o ambiente
   3. Criando o primeiro CGI
   4. Tratando parâmetros e formulários
   5. Conclusão

Introdução ao PHP-GTK

Pascal para Web com CGI - Parte II

Configurando o Apache para executar CGIs em Kylix

Pascal para Web com CGI - Parte II

Criando uma aplicação Kylix com PostgreSQL usando Zeos (parte 1)

Imprimindo com Kylix e CUPS

Colocando aplicação Kylix no TrayIcon do KDE

#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

Entre na sua conta para comentar.