• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

perl - login

lampe

New member
Hallo zusammen

Ich mache nur der Übungshalber ein kleines Login mit Cookies und so.
Nun ich habe ein Textfile, dient wie als datenbank. Dort drin stehen username und Passwort also ca so:

testuser 123
testuser2 123

usw.

es überprüft, ob sich der richtige user anmeldet wenn ja setzt er ein cookie und leitet in den Adminbereich weiter wenn nein kehrt er zum Login zurück.
Beim ersten User klappt das auch, aber wenn man sich mit dem 2ten user Anmelden möchte, klappt das nicht, kann mir wer sagen weshalb?

PHP:
use CGI qw(:standard);  

my $cgi = new CGI;

$username = $cgi->param('username');
$pw = $cgi->param('pw');


open(DATA, "login.txt");
@lines = <DATA> ;
close(DATA);

foreach $line (@lines){
	chomp ($line);
	@userdata = split(/\t/, $line);

	if ($username eq $userdata[0] and $pw eq $userdata[1]) {
		my $c = $cgi->cookie(-name=>'logindaten',
						-value=>'testuser',
						-expires=>'+3M',
						-path=>  '/'
						);
		print $cgi->redirect(-URL => "admin_bereich.pl", -COOKIE => $c);
	} else {
		print $cgi->redirect(-URL => "admin_panel.pl?error=true");
	}
}
Grüsse und danke für die Hilfe
 
mit split \t trenne ich die zeile durch tabulator...
$pw ist $lines[1]
$username ist $lines[0]
 
Naja, laß dir mal ausgeben was du genau vergleichst, ansonsten ist ja der code korrekt (wobei du aber nicht mit use strict arbeitest? was dringend zu empfehlen wäre).
 
Ja das weiss ich, nur habe ich gerade nen riiiesen Knoten... weiss wer weiter?
bzw. kann mir jemand sagen wie es richtig wäre?
 
Naja, du leitest weiter, wenn Passwort und Name stimmen und erst wenn alle geprüft sind wird auf die Fehlerseite geleitet, falls kein passendes Paar gefunden wird.
 
Wie wäre es mit einer Variablen, die am Anfang mit false initialisiert wird und auf true gesetzt wird, wenn etwas passt.

nachdem du alle geprüft hast machst du die Abfrage ob diese Vriable true - wenn ja machst du das mit den Cookies und der Weiterleitung, wenn nein Weiterleitung zur Fehlerseite.
 
Wieso klappt das so nicht?

PHP:
use CGI qw(:standard);  

my $cgi = new CGI;


$username = $cgi->param('username');
$pw = $cgi->param('pw');
$login = "false";


open(DATA, "<login.txt");
@lines = <DATA> ;
close(DATA);

foreach $line (@lines){
	chomp ($line);
	@userdata = split(/\t/, $line);

	if ($username eq $userdata[0] && $pw eq $userdata[1]) {
		$login = "true";
		}

	if ($login eq "true") {
		my $cookie = $cgi->cookie (-name => 'logindaten',
							   -value => logindaten,
							   -expires => '+3m'
							   -path => '/'
								);
	#print $cgi->redirect(-URL => "admin.pl", -COOKIE => $cookie);
	print $cgi->redirect(-URL => "admin_bereich.pl", -COOKIE => $cookie);
		
						  } 
	elsif ($login eq "false") {
		print $cgi->redirect(-URL => "admin_panel.pl?error=Falscher Username oder falsches Passwort");
	}
}
 
PHP:
use strict;
use warnings;

# Dann weil es eine CGI Anwendung ist
use CGHI::Carp qw(fatalsToBrowser warningsToBrowser);
Damit lassen sich die gröbsten Fehler beseitgen, das ist auch heutzutage Standard bei der Perlprogrammierung.

Ansonsten ist die Logik immer noch absolut falsch, du leitest doch immer auf die Fehlerseite.
 
ALso wenn ich den ersten User nehme, klappt das anmelden und es verbindet auch auf die richtige Seite, einfach bei Testuser2 nicht... ich seh den Fehler einfach nicht.
 
Der Fehler ist, dass du jeden Login, ausser dem vom ersten User als false ansiehst. Du darfst die Weiterleitung natürlich erst machen, wenn du alle Daten geprüft hast und nicht in der Schleife wo du noch am prüfen bist
 
ich hab es rausgefunden! jippieh :)
ich musste nur die zweite if und die elsif Abfrage aus der foreachschleife rausnehmen!

Danke für eure Hilfe, hat mir die Augen geöffnet!
 
und wie gesagt, ich empfehle dir dringend use strict und warnings zu verwenden. Auch wenn das mit diesem Problem nichts zu tun hatte, aber das näxte Problem kommt bestimmt.
 
Ich habs mir zu Herzen genommen, auch wenn es etwas sgen wir mal "mühsamer" ist, aber du hast schon recht!
Danke für die Hilfe
 
Mühsam ist richtig - aber nur am Anfang, wenn man noch nicht weiß was manche Meldungen zu bedeuten haben. Später sind die Meldungen unerläßlich, weil sie einen auf Unzulänglichkeiten Hinweisen (und helfen Tippfehler schneller zu finden)
 
Zurück
Oben