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