Formular: Pflichtfelderprüfung und Dankeseite - Denkfehler?
Yvonne17
- perl
0 hotti
Hallo zusammen,
ich habe mich an meinem ersten Perl Formular versucht und so richtig klappt mein Vorhaben nicht :-(
Die Idee: einer Downloadseite soll ein Formular vorgeschaltet werden, dass erst nachdem es ausgefüllt wurde auf die Downloadseite weiterleitet.
Also habe ich den Self HTML Perl Form-Mailer > http://aktuell.de.selfhtml.org/artikel/cgiperl/form-mail/ mit dem JavaScript zum Überprüfen von Formulardaten kombiniert > http://de.selfhtml.org/javascript/beispiele/formulareingaben.htm
Als "Dankeseite" habe ich die Downloadseite angegeben.
Wenn ich aber nun im Formular nichts eingebe und auf "weiter" klicke kommt zwar die gewünschte Meldung "Bitte Ihren Namen eingeben!" wenn ich dann aber OK klicke springt er nicht zurück sondern direkt auf die Downloadseite.
Kann mir vielleicht jemand einen Rat geben was ich falsch gemacht habe?
Hier die Codes:
<script type="text/javascript">
function chkFormular () {
if (document.Formular.name.value == "") {
alert("Bitte Ihren Namen eingeben!");
document.Formular.User.focus();
return false;
}
if (document.Formular.email.value == "") {
alert("Bitte Ihre E-Mail-Adresse eingeben!");
document.Formular.Mail.focus();
return false;
}
if (document.Formular.email.value.indexOf("@") == -1) {
alert("Keine E-Mail-Adresse!");
document.Formular.email.focus();
return false;
}
if (document.Formular.telefon.value == "") {
alert("Bitte geben Sie Ihre Telefonnummer ein.");
document.Formular.telefon.focus();
return false;
}
var chkZ = 1;
for (i = 0; i < document.Formular.telefon.value.length; ++i)
if (document.Formular.telefon.value.charAt(i) < "0" ||
document.Formular.telefon.value.charAt(i) > "9")
chkZ = -1;
if (chkZ == -1) {
alert("Bitte geben Sie eine gültige Telefonnummer ein.");
document.Formular.telefon.focus();
return false;
}
}
</script>
<form name="Formular" action="/cgi-bin/selfmailer.pl" method="post" onsubmit="return chkFormular()">
<input type="hidden" name="return" value="http://www.dankeseite.de">
<input type="hidden" name="delimiter" value=": ">
<input type="hidden" name="subject" value="Download Formular">
Firma*:<br />
<input type="text" name="firma" size="35"><br /><br />
Vor- und Nachname:<br />
<input type="text" name="name" size="35" required><br /><br />
E-Mail:<br />
<input type="text" name="email" size="35" required><br /><br />
Telefon:<br />
<input type="text" name="telefon" size="35" required><br /><br /><br />
<input type="submit" value="weiter">
<input type="reset" value="Eingaben löschen">
</form>
#!/usr/bin/perl
$Sendmail_Prog = "/usr/lib/sendmail";
$mailto = 'meine mailadresse';
use CGI;
$query = new CGI;
@names = $query->param;
$delimiter = $query->param('delimiter'); # ---> Begrenzerzeichen zwischen name und value
$returnhtml = $query->param('return'); # ---> URL für Dankeseite
$subject = $query->param('subject'); # ---> E-Mail-Subject
$subject =~ s/\s/ /g;
$mailtext = "";
foreach(@names) {
$name = $_;
@values = "";
@values = $query->param($name);
if($name ne "return" && $name ne "subject" && $name ne "delimiter") {
foreach $value (@values) {
$mailtext = $mailtext.$name;
$mailtext = $mailtext.$delimiter;
$mailtext = $mailtext.$value."\n";
}
}
}
open(MAIL,"|$Sendmail_Prog -t") || print STDERR "Mailprogramm konnte nicht gestartet werden\n";
print MAIL "To: $mailto\n";
print MAIL "Subject: $subject\n\n";
print MAIL "$mailtext\n";
close(MAIL);
print "Location: $returnhtml\n\n";
Ich wäre wirklich sehr dankbar wenn jemand eine Idee hat?! So langsam verzweifle ich :(
Viele Grüße
Yvonne
Moin,
das sieht alles sehr unstrukturiert aus. Die erste Struktur, die zu bauen ist, ist eine Parameter Kontrollstruktur. Lege dazu einen Schlüsselparameter fest, welcher den Ablauf steuert, z.B. 'senden':
Sobald dieser Parameter in den POST-Daten enthalten ist, fragst Du alle anderen Parameter ab, welche für die Mail gebraucht werden, z.B. Abs.Email und den Text.
Unabhängig davon bzw, generell schreibst Du diese Input-Werte wieder als Values in das Formular, damit ebendas bei fehlenden Eingaben wieder gezeigt werden kann (Formular => Template). Das nennt sich dann Affenformular. Beachte den Kontext, wenn Benutzereingaben wieder auf die Seite geschrieben werden (HTML::Entities).
Ein Template für das Formular ermöglicht Dir auch, an den entsprechenden Labels den Text rot zu färben, wenn eine Eingabe fehlt.
Wenn alle Eingaben richtig sind, baust du die Maildatei zusammen und übergibst die an sendmail, hier ist ein Beispiel dazu, wie einfach das gemacht werden kann.
Verwende das Perl-Modul HTTP::Headers zum setzen der benötigten Response-Header, soll die Umleitung erfolgen, setze zusätzlich zum Location-Header den Status, z.B. 302 Found.
In Deinem Fall möchte die Zielseite (Antwortseite) erst gezeigt werden, wenn die Mail raus ist. Es gibt zwei Möglichkeiten:
Das wärs erst einmal im Wesentlichen und noch ein Tipp: Das JavaScript lass zunächst weg. Du kannst es zusätzlich und nachträglich einbauen, was den Komfort verbessert. Die Funktionalität muss ohne JS gegeben sein.
Viele Grüße,
Horst