Also dann gehts auch ohne use CGI::Cookie?
Ja!
Hab jetzt einiges versucht,aber das krieg ich nicht hin.Muss man da auch eine log sozusagen auswerten bzw. erstellen für cookies,auf dem server,um den client zu erkennen?Seine daten im cookie einlesen und aufs formular übertragen,geht das überhaubt?welche variablen braucht man da?
so:
Lieber Alain,
wir stehen ja schon länger im Diskurs, du legst aber immer wieder eine lernunwilligkeit an den Tag, die wirklich erschreckend ist. Ich hab dein Skript kopiert und erstmal 'use strict' eingebaut. Dann bekam ich ein paar sehr nützliche Fehlermeldung, d.h. das Skript läuft so nicht. Das liegt aber wieder mal an solch Grundlegenden Dingen, das es mich mittlerweile wirklich wundert ob du überhaupt verstehst, was ich (und andere) dir versuchen zu erklären.
Ich verusch es mal im einzelnen:
use CGI::Cookie;
wo ist use strict? Wo bindest du CGI ein?
my $cooks = $ENV{'UNIQUE_ID'};
Gibt es diesen Wert? (Bei mir nicht)
$cooks = login();
Warum weist du $cooks einen Wert zu, um in danch wieder zu überschreiben, würde nicht:
my $cooks = login();
ausreichen?
Die näächste Frage, die weiter unten geklärt wird, was für einen Wert hat $cooks?
my $altcookie = $cgi->cookie(-name=>'TLogin')||'unbekannt';
Was ist $cgi? Wo hast du das definert?
my $cookie = $cgi->cookie(-name=>'TLogin',
-value=>'$cooks',
-expires=>'+2d',
-path=>'/');
Du kennst den Unterschied zwischen einfachen und doppelten Anführungszeichen?
Und selbst wenn nicht, warum steht $cooks in Anführungszeichen?
Und nochmal, was für einen Wert hat $cooks?
my $query = new CGI;
print $query->header(-cookie=>$cookie),
$cgi->start_html("Login-Cookie"),
$query? $cgi? Was den jetzt?
$cgi->p("<b>Ihr letzter Besuchszeitpunkt dieser Seite war</b>: ", $altcookie),
Hier musst du aufpassen, das Komma trennt eine Liste von Elementen. Es kann sein, dass CGI::p diese zusamenführt, aber unter Umständen erwartet p mehrere Parameter und dann passiert nicht das was du willst. Du solltest hier lieber den Punkt verwenden.
sub login
{
my $username = CGI::param('username')||'';
my $password = CGI::param('password')||'';
my $cgi = new CGI;
Wieso erzeugst du hier ein Objet CGI? In der Regel (ich selber hab noch nie einen anderen Fall erlebt) reicht ein CGI Objekt für die komplette Anwendung.
$cooks = $cgi->cookie(cooks => $cooks, username => $username, password => $password);
return $cooks;
}
Aha, Die Funktion login() gibt was zurück? Ein Cookie!
Wobei der Parameter cooks nicht existiert.
und weiter oben übergibst du das Cookie als Wert in eine Cookie (bzw. du willst es tust es aber nciht weil du einfache Anführungszeichen verwendest).
Ein Cookie ist ein Objekt, das zum erzeugen des Strings, der im Header ausgegeben werden muss, dient.
CGI::header( -cookie => CGI::cookie() );
für CGI::cookie kanst du natürlich auch eine Variabel nehmen, in deinem Fall den Rückgabewert der Funktion login()
CGI::header( -cookie => $cooks );
so gehts nicht :(
Da sind soviele Fehler drin, es ist wirklich erschreckend. Ich vermute du fängst erst an zu programmieren und dann leist du, wenn überhaupt, die Dokumentation der von dir verwendeten Module?
Das CGI Modul ist sehr mächtig und nützlich (ich weiß das habe ich dir schon gesagt) und deshalb ist die Dokumentation auch sehr umfangreich, aber im grossen und ganzen steht alles drin was man Wissen muss. Und ich rate dir sie zu lesen, bevor du weitermachst. Du fährst mit deinem Shop so gegen die Wand und wirst am Ende nichts rauskriegen was dir oder jemand anders Freude breitet, evtl. willst du lieber osCommerce verwenden, ein fertiges, kostenloses Programm, das viel mehr kannst, als du jemals zusammenkriegen wirst.
Ich weiß nicht 100% was dein Skript machen sollte. aber hier ist eine Version, die läuft.
use strict;
use CGI;
my $cgi = new CGI;
my $cookies = login();
my $altcookie = $cgi->cookie(-name=>'TLogin')||'unbekannt';
my $name = $cgi->cookie(-name=>'name') || 'unbekannt';
my $pwd = $cgi->cookie(-name=>'password') || 'unbekannt';
my $now = time;
push @$cookies, $cgi->cookie(-name=>'TLogin',
-value=> $now,
-expires=>'+2d',
-path=>'/');
print $cgi->header(-cookie=> $cookies),
$cgi->start_html("Login-Cookie"),
$cgi->p($cgi->b('Ihr letzter Besuchszeitpunkt dieser Seite war: ') . $altcookie ),
$cgi->p($cgi->b('Als neuer Besuchszeitpunkt wurde gespeichert: '). $now ),
$cgi->p($cgi->b('"Name / Passwort: ') . $name .'/'. $pwd ),
$cgi->end_html();
sub login
{
my $username = CGI::param('username')||'';
my $password = CGI::param('password')||'';
return [ $cgi->cookie( -name => 'name', -value => $username) ,
$cgi->cookie( -name => 'password', -value => $password) ];
}
Struppi.