← Back to team overview

sslug-teknik team mailing list archive

Perl script og web formular

 

Hej.

Jeg har hentet et perl script på nettet.
Scriptet behandler data indtastet via web-interface, og
mailer data til webmaster m. flere.
Problemet opstår når brugeren har udfyldt web-formularen, og
trykker "send" knappen. Så kommer de data der er udfyldt op i browseren.
Det vil jeg ikke have. Jeg vil heller have at der står f.eks. Tak for 
bestillingen.
Er der nogen der har et forslag til rettelse i perl-scriptet, eller måske 
kender et andet .cgi script ? Jeg bruger Apache.  Hilsen Martin.
Her er scriptet :

#!/usr/bin/perl

# Filename: email.pl.cgi
# (c) 1996 William E. Weinman
#
# a generic example of a cgi program that sends
# the response to a form encapsulated in an
# email message to a pre-determined address
#

# your email address goes here
$emailto = "root\@localhost";
$webmaster = "root\@localhost";
$webmastername = "WebMaster";

# Send the MIME header
print "Content-type: text/html\r\n\r\n";

print qq(
<html><head><title>Form Response</title></head>
<body bgcolor="#e0e0e0">);


$ct = $ENV{"CONTENT_TYPE"};
$cl = $ENV{"CONTENT_LENGTH"};

# check the content-type for validity
if($ct ne "application/x-www-form-urlencoded")
  {
  print "I don't understand content-type: $ct\n";
  exit 1;
  }

# put the data into a variable
read(STDIN, $qs, $cl);

# split it up into an array by the '&' character
@qs = split(/&/,$qs);

foreach $i (0 .. $#qs)
  {
  # convert the plus chars to spaces
  $qs[$i] =~ s/\+/ /g;
# convert the hex tokens to characters
  $qs[$i] =~ s/%(..)/pack("c",hex($1))/ge;

  # split into name and value
  ($name, $value) = split(/=/,$qs[$i],2);

  # create the associative element
  $qs{$name} = $value;
  }

print qq(
<h1>Form Response</h1>

<p>The following information is being forwarded by email:

<p>
Remote Host: <tt>$ENV{"REMOTE_HOST"}</tt><br>
Remote Addr: <tt>$ENV{"REMOTE_ADDR"}</tt><br>
User Agent:  <tt>$ENV{"HTTP_USER_AGENT"}</tt><br>

<p>
<strong>Form Responses:</strong>
<p>\n);

foreach $name (keys(%qs))
  { print "$name: <tt>$qs{$name}</tt><br>\n"; }

open(MAIL, "| /usr/lib/sendmail -t -f'$webmaster'");

# These lines must be terminated with CR-LF pairs!
print(MAIL "From: $webmastername <$webmaster>\r\n");
print(MAIL "To: $emailto\r\n");
print(MAIL "Subject: Results of Form\r\n\r\n");

print MAIL qq(
Remote Host: $ENV{"REMOTE_HOST"}
Remote Addr: $ENV{"REMOTE_ADDR"}
User Agent:  $ENV{"HTTP_USER_AGENT"}

Form Responses:
);

foreach $name (keys(%qs))
  { print MAIL "$name: $qs{$name}\n"; }

close(MAIL);


Follow ups