E-Mail-Formular

Z

zerojump

Guest
Hallo!

Ich bin ein ziemlicher CGI-Newbie, habe aber jetzt doch ein funktionierendes Script geschrieben, dass die Formulardaten ausliest und als E-Mail verschickt. So weit so gut. Strukturiere ich nun aber mit Hilfe einer Tabelle innerhalb des <form>-Tags mein Formular, so liest mein CGI-Script nur noch das erste Feld aus und ignoeriert den Rest.

Hier erst mal der relevante Auschnitt aus dem HTML-Code:

(Kontrolle() und Sicher() sind JavaScript-Funktionen, die die Eingaben überprüfen, ich werde diese demnächst durch CGI ersetzen)

<form name="Nachricht" action="cgi-bin/maildata.cgi" method="post" enctype="text/plain" onSubmit="return Kontrolle()" onReset="return Sicher()">
<table border=1 bordercolor="black" width="95%" cellspacing=0 cellpadding=5>
<tr>
<td width="50%" align=right>
<span class=text2>
*Vorname*
</span>
</td>
<td width="50%" align=center>
<input name="Vorname" size=25 maxlength=40>
</td>
</tr>
<tr>
<td width="50%" align=right>
<span class=text2>
*Nachname*
</span>
</td>
<td width="50%" align=center>
<input name="Nachname" size=25 maxlength=40>
</td>
</tr>
<tr>
<td width="50%" align=right>
<span class=text2>
*Straße und Hausnummer*
</span>
</td>
<td width="50%" align=center>
<input name="Strasse" size=25 maxlength=35>
</td>
</tr>
<tr>
<td width="50%" align=right>
<span class=text2>
*Postleitzahl und Wohnort*
</span>
</td>
<td width="50%" align=center>
<input name="Ort" size=25 maxlength=40>
</td>
</tr>
<tr>
<td width="50%" align=right>
<span class=text2>
Telefonnummer
</span>
</td>
<td width="50%" align=center>
<input name="Telefon" size=25 maxlength=25>
</td>
</tr>
<tr>
<td width="50%" align=right>
<span class=text2>
*E-Mail Adresse*
</span>
</td>
<td width="50%" align=center>
<input name="Mail" size=25 maxlength=50>
</td>
</tr>
<tr>
<td colspan=2 width="100%" align=center>
<span class=text2>
*Ihre Nachricht:*
</span>
<br>
<textarea cols=42 rows=8 name="Nachricht">
</textarea>
<br>
<input type=submit value="verschicken" onMouseOver="window.status='verschicken an info@wieditz-anstrich-putz.de'; return true;"

onMouseOut="window.status='Formular ausfüllen'; return true;">
<input type=reset value="alles löschen" onMouseOver="window.status='Formular zurücksetzen'; return true;" onMouseOut="window.status='Formular ausfüllen';

return true;">
<br>
</td>
</tr>
</table>
</form>

Der Code des CGI-Scripts sieht folgendermaßen aus:

#! /usr/bin/perl

read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'});
@formdata = split(/&/, $Daten);

print "Content-type: text/html\n\n";
print "<HTMl>\n";
print "<head>\n";
print "<title>Verschicken der Daten</title>\n";
print "</head>\n";
print "<body background='../Pictures/hhintergrund.gif' link='black' alink='black' vlink='black'>\n";
print "<p align=center>";
print "<h2>Erfolgreich versendet</h2>";

open MAILER, '| /usr/sbin/sendmail -t';
print MAILER << 'ENDE';
from: Anfragesteller
to: pcm-sasa@uni.de
subject: Anfrage von Web-Site
ENDE
print MAILER "Vom Kontaktformular der Firma Wieditz wurden folgende Formulardaten versendet:\n\n";

foreach $feld (@formdata)
{
($name, $value) = split(/=/, $feld);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$Formular{$name} = $name;
$Formular{$value} = $value;
print MAILER "$Formular{$name} : $Formular{$value}\n\n";
}
close MAILER;

print "<br><a href='../formular.html'>Zurueck</a>";
print "</Body>\n";
print "</HTML>\n";

---------------------------------------------------------------------

Wenn ich das Formular OHNE Tabelle erstelle, dann funzt das Scrpt einwandfrei. Woran bitte kann das liegen.

In der verschickten E-Mail an mich steht lediglich, der Name des ersten Feldes und der eingegebene Wert und dann noch der Name des nächsten Feldes, das wars.

Wer hilft weiter?
 
Hmm, erstens gehören alle Attribut Werte in Dopelquotas (") aber das wird wohl nicht das eigentliche Problem hier sein, aber es wird einige Browser dazu bewegen das Formular bzw. die ganze Seite erst mal gar nicht zu parsen.
Und dann, wo ich denke (hab's nicht getestet, sry no time) dass das Problem liegt, ist dass du keinen Input Type definiert hast, also <input type="text">...
 
Zurück
Oben