ashbury: cgi und Datenbank

Beitrag lesen

Hi nochmal, also hier das Skript, welches z.Zt. gut läuft. Es fehlt eben eine SQL Anbindung, damit die Daten 001-016 eingelesen werden können.

#! /usr/local/bin/perl

Ein Perlskript, das Formulareingaben auswertet und als Mail weiterschickt.

print "Content-type: text/html\n\n";
$mailprog="/usr/lib/sendmail";
%daten=&Eingabe;
%datum=&zeit;
$parameter = &Formateingaben(%daten);

E-Mail des Urhebers

$empfaenger="test@test.de";

Formularfelder, die angegeben werden müssen (Pflichtfelder)

if (!$daten{'001 Kongressgebühr'}) { &fehler("Kongressgebühr"); }
if (!$daten{'002 Anrede'}) { &fehler("Anrede"); }
if (!$daten{'004 Vorname'}) { &fehler("Vorname"); }
if (!$daten{'005 Name'}) { &fehler("Name"); }
if (!$daten{'009 PLZ'}) { &fehler("PLZ"); }
if (!$daten{'010 Ort'}) { &fehler("Ort"); }
if (!$daten{'011 Bundesland'}) { &fehler("Bundesland"); }
if (!$daten{'012 Telefon'}) { &fehler("Telefon"); }
if (!$daten{'014 E-Mail'}) { &fehler("E-Mail"); }

E-Mail an Urheber sobald sich jemand angemeldet hat.

open (MAIL, "|$mailprog $empfaenger") || die "Kann Mailprogramm in $mailprog nicht finden: $! \n";
print MAIL "From: $daten{'014 E-Mail'} ($daten{'004 Vorname'} $daten{'005 Name'})\n";
print MAIL "Reply-To: $daten{'014 E-Mail'}\n";
print MAIL "To: $empfaenger\n";
print MAIL "Subject: Anmeldung zum Kongress\n\n";
print MAIL "Hallo, ich bin der automatische Formularauswerter.\n\n";
print MAIL "Am $datum{'datum'} um $datum{'uhr'} hat sich ein Teilnehmer in das Anmeldeformular eingetragen. Nachfolgend die Daten:\n\n";
print MAIL "001 Kongressgebühr: $daten{'001 Kongressgebühr'}\n";
print MAIL "002 Anrede: $daten{'002 Anrede'}\n";
print MAIL "003 Titel: $daten{'003 Titel'}\n";
print MAIL "004 Vorname: $daten{'004 Vorname'}\n";
print MAIL "005 Name: $daten{'005 Name'}\n";
print MAIL "006 Institution: $daten{'006 Institution'}\n";
print MAIL "007 Strasse: $daten{'007 Strasse'}\n";
print MAIL "008 Hausnummer: $daten{'008 Hausnummer'}\n";
print MAIL "009 PLZ: $daten{'009 PLZ'}\n";
print MAIL "010 Ort: $daten{'010 Ort'}\n";
print MAIL "011 Bundesland: $daten{'011 Bundesland'}\n";
print MAIL "012 Telefon: $daten{'012 Telefon'}\n";
print MAIL "013 Fax: $daten{'013 Fax'}\n";
print MAIL "014 E-Mail: $daten{'014 E-Mail'}\n";
print MAIL "015 Homepage: $daten{'015 Homepage'}\n";
print MAIL "016 Info: $daten{'016 Info'}\n";
close (MAIL);

E-Mail an Kunden sobald dieser sich angemeldet hat.

open (MAIL, "|$mailprog $daten{'014 E-Mail'}") || die "Kann Mailprogramm in $mailprog nicht finden: $! \n";
print MAIL "From: $empfaenger\n";
print MAIL "Reply-To: $empfaenger\n";
print MAIL "To: $daten{'014 E-Mail'}\n";
print MAIL "Subject: Ihre Anmeldung zum Kongress\n\n";
print MAIL "Hiermit bestätigen wir Ihnen die Anmeldung.\n\n";
print MAIL "Am $datum{'datum'} um $datum{'uhr'} haben Sie das Anmeldeformular ausgefüllt.\n";
print MAIL "Nachfolgend Ihre Anmeldedaten:\n\n";
print MAIL "001 Kongressgebühr: $daten{'001 Kongressgebühr'}\n";
print MAIL "002 Anrede: $daten{'002 Anrede'}\n";
print MAIL "003 Titel: $daten{'003 Titel'}\n";
print MAIL "004 Vorname: $daten{'004 Vorname'}\n";
print MAIL "005 Name: $daten{'005 Name'}\n";
print MAIL "006 Institution: $daten{'006 Institution'}\n";
print MAIL "007 Strasse: $daten{'007 Strasse'}\n";
print MAIL "008 Hausnummer: $daten{'008 Hausnummer'}\n";
print MAIL "009 PLZ: $daten{'009 PLZ'}\n";
print MAIL "010 Ort: $daten{'010 Ort'}\n";
print MAIL "011 Bundesland: $daten{'011 Bundesland'}\n";
print MAIL "012 Telefon: $daten{'012 Telefon'}\n";
print MAIL "013 Fax: $daten{'013 Fax'}\n";
print MAIL "014 E-Mail: $daten{'014 E-Mail'}\n";
print MAIL "015 Homepage: $daten{'015 Homepage'}\n";
print MAIL "016 Info: $daten{'016 Info'}\n";
close (MAIL);

Rückgabe des HTML-Dokumentes mit Dank zur Anmeldung und Formulardatenauflistung

my (@x)=split(/\n/,$parameter);
foreach $i (@x)
{
($k,$v)=split(/: /,$i);
$str.="<td align=right>$k</td><td align=left>$v</td><tr>\n" if $k;
}

print <<EOF;
<html>
<head>
<title>Kongress</title>
</head>
<body bgcolor=eff3f5>
<table cellpadding="10">
<td>
<font size=3 face=ARIAL>Wir bedanken uns f&uuml;r Ihre Anmeldung.</font><br>
<br>
<table>
<td align=left width="569"><font color=000000 face=ARIAL><font size=+1>Ihr Formular wurde abgeschickt.</font><br>
<font size=3 face=ARIAL><font color=#000000>Sollten Sie &Auml;nderungen vornehmen wollen,k&ouml;nnen Sie die &quot;Zur&uuml;ck/BACK-Schaltfl&auml;che&quot; Ihres Browsers oder den <a href="javascript:history.back()" target="_self">zur&uuml;ck</a> Link nutzen.<br>
Als Best&auml;tigung erhalten Sie eine E-Mail von uns mit den hier angegebenen Daten. Gleichzeitig k&ouml;nnen Sie diese Seite auch <a href="javascript:self.print()">ausdrucken</a>.<br>
</font></td>
</table>
<br>
<div align="center">
<font size=3 face=ARIAL>Folgende Daten haben Sie in das Formular eingetragen:<br>
<table width="573" table cellpadding="4" border=1 align="left" bgcolor=#c1ced7>
$str
<tr>
<td> </td>
</tr>
</table>
</body></HTML>

EOF

Hier endet der Hauptteil des Programms. Was folgt, sind die Subroutinen:

sub Formateingaben
{
local (*in) = @_ if @_ == 1;
local (%in) = @_ if @_ > 1;
local ($out, $key, $output);

$output =  "\n\n";
foreach $key (sort keys(%in))
{
  foreach (split("\0", $in{$key}))
  {
   ($out = $_) =~ s/\n/\n/g;
   $output .= "$key: $out\n";
    }
   }
$output .=  "\n";

return $output;
}
sub Eingabe
{
if ($ENV{'QUERY_STRING'})
{
  $daten=$ENV{'QUERY_STRING'};
} else
{ read (STDIN, $daten, $ENV{'CONTENT_LENGTH'}); }
if (@ARGV) { @datensaetze=@ARGV; } else {
@datensaetze = split(/&/, $daten); }
foreach $satz (@datensaetze)
{
  ($name, $wert) = split(/=/, $satz);
  $wert =~ tr/+/ /;
  $wert =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $wert =~ s/<(([^ >]|\n)*)>//g;
  $name =~ tr/+/ /;
  $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  chomp $wert;
  $wert=~s/\n/<br>/g;
  $FORM{$name} = $wert;
}
return %FORM;
}

sub fehler
{

Diese Routine gibt eine Fehlermeldung aus, wenn ein wichtiges Formularfeld nicht ausgefüllt wurde

my $fehler_grund=$_[0];
print "<p><center><table border=5>\n";
print "<td bgcolor=#c1ced7 align=center width=440><h1><font color=#ff3060><u></u></font></h1>";
print "<font color=#000000><font size=+1>- Sie haben ein wichtiges Feld nicht ausgefüllt -</font><p>";
print "Drücken Sie die Zurück/BACK-Schaltfläche Ihres Browsers oder den <a href='javascript:history.back()' target=_self>zurück</a></font> Link und vervollständigen bzw. korrigieren ";
print "Sie das Feld<br> <font color=#ff3060><strong>$fehler_grund</strong></font>.<br><br>";
print "</table>";
exit;
}

sub zeit

{
local(@z)=localtime;
foreach $i (@z) { if (length($i)<2) { $i="0".$i; } }
local(%azeit);
local($uhr)="$z[2]:$z[1]:$z[0]";
local($monat)=($z[4]+1);
if (length($monat)<2) { $monat="0".$monat; }

$z[5]="19".$z[5];

$z[5]=(1900+$z[5]);
local($datum)="$z[3].$monat.$z[5]";
$azeit{'uhr'}=$uhr;
$azeit{'datum'}=$datum;
return %azeit;
}