ich habe den letzten Thread mal rausgesucht (ich hoffe ich darf ihn hier reinschreiben??) http://forum.de.selfhtml.org/archiv/2008/9/t177472/
...
ich dachte mir ich poste jetzt einfach mal meinen code damit ihr genauer wisst wo ich gerade bin und ich denke so koennte man mir besser helfen. Ich habe uebrigends die unwichtigeren sachen rausgeloescht weil es sonst zu viel wird also zum beispiel die pruefung ob der user in der datenbank ist und ob das passwort stimmt usw hier also der code:#!/usr/bin/perl
ausser bei Produktionscode,
der gut getestet ist, darfst du dir angewöhnen:
use warnings;
use strict;
use CGI;my $login = new CGI;
my $username = $login->param("username");
my $passwort = $login->param("passwort");
Ich finde es erstmal ungeschickt, jeden userinput in einer
eigenen Variable zu speichern
Überlege dir den AHA-Effekt, wenn du einen hash nimmst
Etwas früher im Code
my %Input(
username => '',
password => '',
);
Wir initialisieren einen Hash für Usereingaben.
Die Initialisierung sagt uns: was sind überhaupt erlaubte Feldnamen für Userinput.
Die Konvention %Input (mit grossem erstem Buchstaben) deutet darauf hin, dass die Variable im globalen Scope erzeugt wurde, also in allen subs zur Verfügung stehen würde.
Du sprichst dann die Variable an mit:
$Input{password} = $login->param("passwort");
print "Content-Type: text/html\n\n";
print "<html><head></head><body>"
Achte darauf, dass du immer valides HTML ausgibst. Das title Element ist Pflicht.
print "Bitte loggen Sie sich ein:";
print "<form action="login.pl">";
Nutze verschiedene Möglichkeiten, um zu quoten:
print "<form action="login.pl">";
print '<form action="login.pl">';
print q(<form action="login.pl">);
print qq(<form action="login.pl">);
print "<input type="text" name="username">";
print "<input type=""text"\ name="passwort">";
print "<input type="submit">";
print "</form>";if ($username && $passwort) {
Das wird in meiner vorinitialisierten Version:
if( $input{username} && $input{passwort} ) {
#hier dann die pruefungen
#wenn sie korrekt sind dann soll zur sub cookie springen
cookie;
}sub cookie {
my $cookie = $login->cookie(
{"name" => "cookiename", "value" => "cookievalue" } );
print $login->header (
{"cookie" => $cookie} );
}
Ich weiss das man den Cookie vor dem "Content-Type: text/html" schreiben muss aber dann kann ich ja kein loginformular ausgeben. Ich verzweifle :=((
Verlagere den Block, der das Formular ausgibt in eine Subfunktion
sub print_loginform{ ... }
und rufe diese Subfunktion auf, wenn benötigt.
bitte bitte helft mir noch einmal!!
mfg Beat;