Philipp Hasenfratz: Script das Einträge eines Formulars in eine Datei speichert

Beitrag lesen

Halihallo nochmals

print "Content-type: text/html\n\n";

hier wäre:
print "Content-Type: text/html\015\012\015\012";
etwas sicherer.

my $cgi = new CGI;   # OOP!!!
use CGI;
my $name = $cgi->param("vuname");
my $mitteilung = $cgi->param("mitteilung");
my $passwort = $cgi->param("pw");
my $passwort2 = $cgi->param("pwst");
my $email = $cgi->param("email");

Also: Die Passwörter sind in den Variablen $passwort und $passwort2 gespeichert! - Warum unten mit "if ($pw != $pwst)"???

if ($pw != $pwst)

Hier muss

if ($passwort ne $passwort2)

stehen!

if ($action eq "start") {&start;}

Das ist wohl etwas redundant. So lange die Variable (s. oben) immer auf 'start' steht, wird eh immer &start aufgerufen. Also kannst du hier auch nur

&start;

schreiben, statt "if ($action eq 'start') {&start;} ";

sub start {
   open(INDEX,"$datfile");

Aha! - Hier steckt noch ein Fehler:

das muss

open(INDEX, "<$datfile");

heissen. '>>' ist zum Anhängen von Daten, '>' ist um die Datei zu überschreiben und '<' ist zum Datei lesen.

Hier nochmals der verbesserte Code:

#!/usr/bin/perl
$datfile="mitteilung.txt";

print "Content-type: text/html\n\n";
####### Formulardaten einlesen ###################
my $cgi = new CGI;   # OOP!!!
use CGI;
my $name = $cgi->param("vuname");
my $mitteilung = $cgi->param("mitteilung");
my $passwort = $cgi->param("pw");
my $passwort2 = $cgi->param("pwst");
my $email = $cgi->param("email");

if ($passwort != $passwort2) {
print "<html><head><title>FEHLER</title></head>\n";
print "<body bgcolor="navy" text="red" link="yellow" alink="lime" vlink="yellow"\n";
print "<h1><center>Es ist ein Fehler aufgetreten</center></h1>\n";
print "<br><br>\n";
print "Ihre Passwörter $passwort und $passwort2 stimmen nicht überein! <br>\n";
print "<br><br><a href="javascript:history.back()">Zurück</a></body></html>\n";
};

print "<html><head><title>Vielen Dank für ihre Eingaben</title></head>\n";
print "<body bgcolor="navy" text="white" link="yellow" alink="lime" vlink="yellow"\n";
print "<h1><center>Vielen Dank für ihre Eingaben</center></h1><br>\n";
print "<br><br>\n";
     print "Ihr Name                 = $name <br>\n";
     print "Ihre Mitteilung          = $mitteilung <br>\n";
     print "Ihr Passwort             = $passwort <br>\n";
     print "Ihre E-Mail adresse      = $email <br>\n";
print "<br><br><a href="javascript:history.back()">Zurück</a></body></html>\n";

&start;  # Vielleicht solltest du das nach den nächsten drei Zeilen
         # hinsetzen, dann wird der vom Benutzer eingegebene
         # Datensatz auch noch mit ausgegeben.

open(DATA,">>$datfile");
      print DATA "$name§$mitteilung§$passwort§$passwort2§\n";
      close(DATA);

sub start {
   open(INDEX, "<$datfile");
            @index = <INDEX>;
            close(INDEX);
            foreach (@index)       {
                        $dzeil =$_;
                  chomp($dzeil);

($name,$mitteilung,$passwort,$passwort2) = split(/§/,$dzeil);
     print "Ihr Name                 = $name\n";
     print "Ihre Mitteilung          = $mitteilung\n";
     print "Ihr Passwort             = $passwort\n";
     print "Ihre Passwortbestätigung = $passwort2\n";
     exit;
     }
     }

So, versuchs jetzt nochmals. Ich hoffe, dass dies nun funktioniert

Viele Grüsse

Philipp

PS: Wenn du nicht weisst, warum ich irgend etwas bemängle oder verbessere, dann frag! - Wir sind hier um Fragen zu beantworten und wenn du perl lernen willst, musst du fragen. Wir helfen dir gerne; aber wir dienen nicht gerne, wenn's darum geht ein Programm einfach zu verbessern nur weil man selber nicht einmal bereit ist, perl zu lernen. Dies ist eine allgemeine Anmerkung! - Also nur persönlich nehmen, wenn's auch zutrifft!