Os formulários estão presentes em várias páginas da internet. Qualquer página em que você possa digitar alguma coisa é um formulário. Você pode ver formulários em ferramentas de busca, livros de visitas, questionários, etc. A página inicial do HowStuffWorks contém pelo menos dois mini-formulários. Um deles para a pergunta "Como você chegou aqui?" e outro com um espaço para escrever sugestões. Você pode criar o seu formulário na página HTML e no código HTML é possível especificar o nome do script CGI que vai ser executado quando o usuário clicar no botão Enviar. Os valores que o usuário digita no formulário são armazenados e enviados para o script, que utiliza essas informações da maneira que você quiser.
Você provavelmente já viu isso muitas vezes, mas não sabia como elas funcionavam. Por exemplo, vá para http://www.lycos.com (em inglês) e digite a palavra "test" no campo "Search for:". Agora pressione o botão "Go Get It!". A página resultante vai se parecer com essa:
http://www.lycos.com/cgi-bin/pursuit?matchmode=and
cat=lycosandquery=testandx=10andy=9
Como você pôde perceber, a página inicial do Lycos é um formulário. Lycos tem um script no diretório cgi-bin que se chama pursuit. O formulário envia cinco parâmetros para o script:
Vamos criar um formulário simples para tentar fazer isso. Crie um arquivo com o nome simpleform.htm e insira o seguinte código HTML dentro dele:
<html>
<body>
<h1>Um formulário super simples<h1>
<FORM METHOD=GET ACTION="http://www.hsw.com.br/
cgi-bin/simpleform.cgi">
Digite o seu nome:
<input name="Name" size=20 maxlength=50>
<p>
<INPUT TYPE=submit value="Submit">
<INPUT TYPE=reset value="Reset">
</FORM>
</body>
</html>
Você pode clicar neste endereço para testar o formulário:
http://www.hsw.com.br/simpleform.htm
Como você pôde perceber, o código HTML especifica a criação de um formulário que usa o método GET para enviar informações ao script CGI localizado em http://www.hsw.com.br/cgi-bin/simpleform.cgi. Dentro do formulário existe uma área de entrada de texto e os botões padrão Enviar e Limpar.
O arquivo http://www.hsw.com.br/cgi-bin/simpleform.cgi relacionado ao formulário é um programa em C. Ele foi gerado a partir desta linha de código C, escrita no arquivo chamado simpleform.c.
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Content-type: text/html\n");
printf("<html>\n"); printf("<body>\n");
printf("<h1>O valor digitado foi: ");
printf("%s</h1>\n", getenv("QUERY_STRING"));
printf("</body>\n");
printf("</html>\n");
return 0;
}
E foi compilado com o seguinte comando:
gcc simpleform.c -o simpleform.cgi
Ele está localizado no diretório cgi-bin. Este programa simplesmente coleta o valor enviado pelo formulário e o exibe. Por exemplo, você deverá ver o seguinte:
O valor digitado foi: Name=João+Silva
Name é o identificador para a área de entrada de texto do formulário (cada área de entrada de texto deve ter um identificador único) e João+Silva é o nome que foi digitado no formulário. Note que o "+" substitui o espaço em branco.
A partir deste exemplo, você pode perceber que o processo básico para configurar um formulário e enviar dados de um formulário para um script CGI é bastante simples. Aqui estão alguns detalhes que devem ser levados em consideração:
Normalmente, a variável de ambiente QUERY_STRING levanta a questão das variáveis de ambiente em geral. Existem inúmeras variáveis de ambiente nos scripts CGI, incluindo:
Existe uma grande quantidade de informações relacionada a estas variáveis. Por exemplo, o tamanho do texto de entrada (CONTENT_LENGTH), o método de envio utilizado (GET ou POST: a variável REQUEST_METHOD informa se você acessar o STDIN ou QUERY_STRING para saber o que foi digitado), o <a href="http://www.hsw.com.br/questao549.htm">endereço IP</a> da máquina do usuário (REMOTE_ADDR) e muitas outras opções. Para uma descrição completa dessas variáveis, consulte Variáveis de ambiente CGI (em inglês).