[Perl] formularios
John Robeto
johnroberto2001@yahoo.es
Wed, 10 Sep 2003 18:12:39 +0200 (CEST)
Hola a todos, mi problema tiene que ver con CGI, es el
siguiente:
Trabajo con un formulario y un script CGI en Perl bajo
Apache. Si ejecuto el script directamente con Explorer
funciona pero cuando envío el formulario me pide
autorización para descargar el script (con la
extensión .pl) o me muestra el contenido del scritp en
texto plano (con la extensión .cgi). La idea es la
típica, que un usuario cumplimente el formulario y que
al enviarlo aparezca una página de agradecimiento al
tiempo que la información llegue a mi cuenta de
correo. Os envío tanto el formulario como el script,
GRACIAS:
Ejercicio.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<html>
<head>formulario</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
</head>
<body>
<form name="formulario" method="post"
action="ejercicio.cgi">
ERES<br>
<p>
<label>
<input type="radio" name="hombre" value="opción">
hombre</label>
<br>
<label>
<input type="radio" name="mujer" value="opción">
mujer</label>
<br>
</p>
<br>
Tus comentarios:<br>
<textarea name="comentarios"></textarea><br>
<p>Please <input type="submit" value="submit this
form">
when finished or <input
type="reset" value="clear it"> to start over. </p>
</form>
</body>
</html>
ejercicio.cgi
#!/urs/bin/perl
use CGI;
$query = new CGI;
print $query->header;
%postInputs = readPostInput();
$dateCommand = "date";
$time = `$dateCommand`;
open (MAIL, "|/usr/sbin/sendmail -t") || return 0;
select (MAIL);
print << "EOF";
To: johnroberto2001\ @yahoo.es # esta es mi cuenta
de correo separada con “\” del dominio
From: $postInputs{ 'Contact_Email'}
Subject: $postInputs{ 'Organization'} Information
Requested
$time
$postInputs{ 'Organization'} Information Requested
Name: $postInputs{ 'Contact_FullName'}
Email: $postInputs{ 'Contact_Email'}
Street Address: $postInputs{ 'Contact_StreetAddress'}
Street Address (cont): $postInputs{
'Contact_Address2'}
City: $postInputs{ 'Contact_City'}
State : $postInputs{ 'Contact_State'}
Zip: $postInputs{ 'Contact_ZipCode'}
Work Phone: $postInputs{ 'Contact_WorkPhone'}
Home Phone: $postInputs{ 'Contact_HomePhone'}
FAX: $postInputs{ 'Contact_FAX'}
Email: $postInputs{ 'Contact_Email'}
Comments: $postInputs{ 'comments'}
EOF
close(MAIL);
select (STDOUT);
printThankYou();
sub readPostInput(){
my (%searchField, $buffer, $pair, @pairs); #
declaración de variables
if ($ENV{ 'REQUEST_METHOD'} eq 'POST'){ # si el
método cabecera del formulario es igual a post
read(STDIN, $buffer, $ENV{ 'CONTENT_LENGTH'} );
# guarde con STDIN en $buffer el contenido de
CONTENT_LENGHT
@pairs = split(/&/, $buffer); # separe los
pares name=value&name=value en el array @pairs
foreach $pair (@pairs){
($name, $value) = split(/=/, $pair); #separe
los pares name=value en $name y $value respectivamente
$value =~ tr/+/ /; # sustituya (caracter por
caracter, "tradusca") todo signo + por espacio
$value =~
s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; #
la función pack convierte una lista de escalares a
formato binario
$name =~ tr/+/ /;
$name =~
s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1)) eg;
$searchField{ $name} = $value; # crea un
hash que almacena los datos de $name (clave) y $value
(valor)
}
}
return (%searchField); # el hash creado se envia
al programa
}
sub printThankYou(){
print << "EOF";
Content-Type: text/html
<HEAD>
<TITLE>THANK YOU FOR FOR YOUR REQUEST</TITLE>
</HEAD>
<BODY>
<TABLE CELLSPACING=2 CELLPADDING=2 border=0
width=600>
<TR><th><BR>
<center>
<FONT SIZE=+3><B>Thank You name </b></font>
</center><BR><BR>
<CENTER><B><FONT SIZE=+1>
<P>For submitting your information. We will get back
with you shortly.
</P>
</FONT></B><CENTER>
</th>
</table>
</BODY>
</HTML>
EOF
}
___________________________________________________
Yahoo! Messenger - Nueva versión GRATIS
Super Webcam, voz, caritas animadas, y más...
http://messenger.yahoo.es