Seção CGI da abcDICAS.com.br

HTML
Dicas de Uso para a Construção de Páginas Web


Uma das perguntas mais freqüentes que se fazem na lista HTML_BRasil é como integrar um FORM e um CGI, de tal sorte a que os dados digitados sejam entregues ao Web Master, sem que seja necessário que os visitantes tenham instalado, ou simplesmente usem, um programa de E-Mail.

Para alcançar esses objetivos, é obrigatório atender-se a todas as três condições abaixo:

  1. Ter acesso a um diretório CGI, no servidor onde é hospedada sua Home Page;
    em geral os servidores gratuitos NÃO permitem esse tipo de CGI personalizado
  2. Adaptar seu FORM para que ele envie a saída dos dados digitados para o programa CGI;
  3. Criar um script PERL, que será o programa CGI que manipulará os dados digitados e permitirá usar o programa SENDMAIL - existente no Servidor - para enviar os dados para o Web Master, diretamente;

Parte # 2: Criando seu script CGI personalizado


O Código abaixo traz nosso script PERL completo.
Para Copiar e Colar em seu Editor de Textos vá até o último link nesta página, e siga as instruções básicas abaixo, para adaptar às necessidades do seu Servidor:

Chamada ao programa Perl e ao SendMail :

#!/usr/bin/perl
$mail_prog = '/usr/lib/sendmail';

Estas têm que ser as primeiras duas linhas de seu script PERL - cheque com seu Hoster se eles usam os mesmos diretórios, e altere em acordo com sua determinação.

Chamada a Subrotina de Entrada de Dados e Definição dos Campos :

&GetFormInput;

$NOME = $field{'NOME'} ; 
$EMAIL = $field{'EMAIL'} ; 
$CPU = $field{'CPU'} ; 
$CLOCK = $field{'CLOCK'} ; 
$RAM = $field{'RAM'} ; 
$CDROM = $field{'CDROM'} ; 
$SCANNER = $field{'SCANNER'} ; 

$message = "" ;
$found_err = "" ;

Os nomes dos campos devem ser exatamente os mesmos que se encontram em seu FORM. Não altere nada nesta área, ou você poderá ter sérios problemas com seu script. 

Validação dos Campos Obrigatórios e Chamada a Subrotina de Erro :

# VALIDA AS ENTRADAS OBRIGATóRIAS

if ($CDROM eq "") {$CDROM = "NÃO";}
if ($SCANNER eq "") {$SCANNER = "NÃO";}

$errmsg = "<p>O campo 'NOME' deve ser preenchido.</p>\n";
if ($NOME eq "") {
$message = $message.$errmsg;
$found_err = 1;}

$errmsg = "<p>Por favor entre com um endereço de E-MAIL válido!</p>\n" ;
if ($EMAIL !~ /.+\@.+\..+/) {
$message = $message.$errmsg;
$found_err = 1; }

if ($found_err) {
&PrintError; }

Somente os campos obrigatórios devem estar presentes nesta seção. Ao final a rotina checa se houve algum erro - neste caso aciona a subrotina de apresentação dos Erros encontrados.

Mostra todos os dados digitados para confirmação do Usuário:

# ***MOSTRA NA TELA OS DADOS QUE FORAM PREENCHIDOS
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">'."\n" ;
print "<html>\n" ;
print "\n" ;
print "<head>\n" ;
print '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">'."\n" ;
print '<meta name="Author" content">'."\n" ;
print '<meta name="GENERATOR" content="Microsoft FrontPage 4.0">'."\n";
print "<title>Obrigado pelo seu Cadastro</title>\n";
print "</head>\n";
print "\n";
print '<body bgcolor="#8080C0" text="#000000" link="#800000" vlink="#000080" alink="#800000">'."\n" ;
print "\n";
print '<p align="center"><font color="#FFFFFF" face="Verdana" size="3"><strong>Obrigado,'."\n";
print "".$NOME."!</strong></font></p>\n";
print "\n";
print "<hr>\n";
print "\n";
print '<p align="left"><font color="#000080" face="Verdana" size="2"><strong>Vc. digitou '."\n";
print "estes dados:</strong></font></p>\n";
print "\n";
print '<p align="left"><font color="#000080" face="Verdana" size="2">E-mail: <b>'.$EMAIL.'</b><br>'."\n";
print "Hardware: CPU <b>".$CPU."</b>&nbsp; -&nbsp; Clock: <b>".$CLOCK."</b>&nbsp; -&nbsp; RAM: <b>".$RAM."</b><br>\n";
print "Possui: CD-ROM: <b>".$CDROM."</b> - Scanner: <b>".$SCANNER."</b><br>\n";
print "\n";
print "<hr>\n";
print "\n";
print '<p><font face="Verdana" size="1">Este material é apenas um EXEMPLO de uso de CGI'."\n" ;
print " / Obrigado por visitar as nossas páginas...</font></p>\n" ;
print "\n" ;
print "<hr>\n" ;
print '<p align="center"><font color="#FFFFFF" face="Verdana" size="1">Clique no link ao lado para retornar'."\n";
print 'à nossa </font><strong><font color="#0000FF" face="Verdana" size="2"><a'."\n" ;
print 'href="http://www.abcdicas.com.br" target=\"_top\">Home Page</a></font></strong></p>'."\n" ;
print "</body>\n" ;
print "</html>\n" ;


Esta seção cria uma página WEB dinâmica (ela não existe em lugar algum deste mundo!), que é gerada logo em seguida ao pressionar do botão SUBMIT do FORM. O usuário é convidado a rever os dados digitados, e pode avançar, passando para outra área de seu site, ou pressionar o botão BACK/VOLTAR de seu browser, no caso de necessitar corrigir algum dado digitado de forma incorreta.

Mostra todos os dados digitados incorretamente (entre os campos obrigatórios):

# ***ERRO NO PREENCHIMENTO
sub PrintError { 

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">'."\n" ;
print "<html>\n" ;
print "\n" ;
print "<head>\n" ;
print '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">'."\n" ;
print '<meta name="Author" content="Francisco Panizo Beceiro">'."\n" ;
print '<meta name="GENERATOR" content="Microsoft FrontPage 4.0">'."\n" ;
print "<title>Tela de Erros no Prenchimento do CADASTRO</title>\n" ;
print "</head>\n" ;
print "\n" ;
print '<body bgcolor="#8080C0" text="#000000" link="#800000" vlink="#000080" alink="#800000">'."\n" ;
print "\n" ;
print '<p align="center"><font color="#FFFFFF" face="Arial"><u><big><strong>Erro no Processamento'."\n" ;
print "da Ficha de Exemplo</strong></big></u></font></p>\n" ;
print "\n" ;
print '<p align="left"><font face="Verdana" size="2" color="#000080"><strong>Você esqueceu de'."\n" ;
print "preencher os campos abaixo:</strong></font></p>\n" ;
print "\n" ;
print '<p align="left"><font color="#FFFFFF" face="Arial"><strong>'.$message.'</strong></font></p>'."\n" ;
print "\n" ;
print '<p align="left"><strong><font face="Verdana" size="2" color="#000080">Por favor clique no'."\n" ;
print 'botão [</font><font face="Verdana" size="2" color="#FFFF00">VOLTAR</font><font'."\n" ;
print 'face="Verdana" size="2" color="#000080">] de seu browser e tente novamente.</font></strong></p>'."\n" ;
print "\n" ;
print "<hr>\n" ;
print "\n" ;
print '<p align="center"><font color="#FFFF00"><font face="Verdana" size="1">Este CGI foi'."\n" ;
print "projetado e construído por: Francisco Panizo Beceiro - WebMaster da </font><a\n" ;
print 'href="http://www.abcdicas.com.br"><strong><font size="1" face="Arial"><em>Super</em></font><font'."\n" ;
print 'size="2" face="Times New Roman">DICAS</font></strong><font face="Verdana" size="1">.com</font></a></font></p>'."\n" ;
print "</body>\n" ;
print "</html>\n" ;

exit 0 ;
return 1 ; 
}

Esta seção cria uma página WEB dinâmica (ela não existe em lugar algum deste mundo!), que é gerada logo em seguida ao pressionar do botão SUBMIT do FORM, mas apenas nos casos de algum campo obrigatório ter sido deixado em branco, ou tenha sido digitado de forma incorreta. O usuário é convidado a rever os dados digitados de forma incorreta, e deve pressionar o botão BACK/VOLTAR de seu browser, para que possa corrigir os dados digitados de forma incorreta.

Esta seção encerra a operação de checagem dos dados, feitas em tempo real pelo script PERL, e termina com os comandos de saída (EXIT 0;) e (RETURN 1;). A última rotina que iremos apresentar, responsável pelo envio de uma mensagem para a caixa-postal do Web Master do site (veja próxima seção), deve estar fisicamente antes desses comandos de saída do script, ou senão jamais será executada. 

Envio da Mensagem de E-Mail (através do SendMail):

# *** ENVIA EMAIL
$recip = $EMAIL ;
open (MAIL, "|$mail_prog -t");
print MAIL "To: $recip\n";
print MAIL "Reply-to: cgi\@abcdicas.com.br\n";
print MAIL "From: cgi\@abcdicas.com.br\n";
print MAIL "Subject: TESTE DE ENVIO DE E-MAIL POR CGI\n";
print MAIL "\n\n";
print MAIL "Prezado/a Internauta:\n" ;
print MAIL "\n" ;
print MAIL "Recebemos seu cadastro (vide detalhes abaixo), em nossa caixa-postal.\n" ;
print MAIL "\n" ;
print MAIL "Obrigado pelo seu retorno\n" ;
print MAIL "\n" ;
print MAIL "Os Dados Informados foram estes:\n" ;
print MAIL "Nome: ".$NOME."\n" ;
print MAIL "\n" ;
print MAIL "Seu Hardware:\n" ;
print MAIL "CPU: ".$CPU." - Clock: ".$CLOCK." - RAM: ".$RAM."\n" ;
print MAIL "CD-ROM: ".$CDROM." - Scanner: ".$SCANNER."\n" ;
print MAIL "\n" ;
print MAIL "\n" ;
print MAIL "Francisco Panizo Beceiro\n";
print MAIL "WebMaster da abcDICAS.com.br\n";
print MAIL "http://www.abcdicas.com.br\n";
print MAIL "cgi\@abcdicas.com.br\n";
print MAIL "\n\n";
close (MAIL);

Este é o bloco responsável pelo envio dos dados digitados no FORM, e já anteriormente validados, através do programa SendMail, existente no servidor onde seu site está hospedado. Note que a variável $EMAIL, correspondente ao campo E-MAIL do FORM, é atribuída à variável interna $recip. Este será o recipiente da mensagem de e-mail, que conterá todos os dados digitados pelo visitante do seu site.

ATENÇÃO: Em nosso exemplo essa variável e os valores para os campos FROM e REPLY-TO estão obviamente invertidos. Isto é devido a que, neste nosso exemplo, preparamos um EXEMPLO VIVO, para você testar todos os códigos - assim invertemos esses campos para que você possa experimentar e você mesmo possa receber a mensagem de retorno. Não esqueça de inverter esses campos na sua aplicação real.

Baixe o script para seu HD: Clique Aqui!

 


|Adaptando o FORM|Script CGI|Modelo de FORM|Permissões do CGI|

PESQUISA ON-LINE:
Vote em nossa Enquete OnLine

Atenção: não temos condição de dar suporte direto para todos os visitantes; use nosso Super Fórum Web Design para poder enviar suas dúvidas. O registro é gratuito!
Para um suporte diferenciado use o nosso Clube do Help Desk.


| Suporte | Cadastro | Consultoria | Quem Somos |