PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Benutzeranmeldung mit Namen und Passwort



bockionline
17-09-2003, 12:13
Hallo,

ich bin dabei mir eine Benutzeranmeldung mit PHP und Datei als "Benutzerdatenbank" zu bauen. Leider funktioniert das Script nicht ganz so wie ich möchte:
<?php

// Datei mit Benutzernamen und Kennwörtern, wie: benutzer=kennwort
$userdb_file = file ('sec/passwd.txt');

// Grundeinstellung ob Benutzer bekannt: nein
$knownuser = "false";

// Wurde vorgeschaltetes Formular ausgefüllt?
if ( isset($name) && isset($passwort) && $name != "" && $passwort != "" )
{
// ja: Extrahiere aus den Zeilen der Datei Benutzernamen und Kennwort
foreach ($userdb_file as $user_num => $user_string)
{

// $user_string wird in Name $userdb_array[0] und Passwort $userdb_array[1] aufgeteilt
$userdb_array = explode ("=",$user_string);

// Wenn eingegebener Name $name und Passwort $passwort mit einem Paar aus der Datei übereinstimmt,
// setze Einstellung, dass Benutzer bekannt
if ( $name == $userdb_array[0] && $passwort == $userdb_array[1] )
{
$knownuser = "true";
}

}
}
else
{
//nein: Meldung ausgeben
echo "Nicht angemeldet.";
}

if ($knownuser == "true")
{
echo "Validierter User";
}
else
{
echo "Nicht angemeldet!";
}

?>Die Passwortdatei sieht folgendermaßen aus:
benutzer1=passwort1
benutzer2=passwort2
benutzer3=passwort3Mein Problem ist, dass man sich immer nur als der Benutzer, der als letztes in der Passwortdatei genannt wird, anmelden kann (in meinem Beispiel also als "benutzer3"). Woran liegt das und wie muss ich das foreach-Konstrukt abwandeln, dass es mit allen Benutzern geht?

Vielen Dank,
bockionline

EDIT: Rechtschreibfehler

bockionline
18-09-2003, 12:45
<?php

// Formular, dass Button $anmelden und die Eingabefelder $name und $passwort übergibt,
// ist vorgeschaltet

if (isset($anmelden))

// Wenn Anmelde-Button gedrückt wurde...
{

// Standard: Benutzer ist nicht authentifiziert
$knownuser = false;

// Verschlüsselung der im Formular eingegebenen Daten, da
// Name/Passwort-Datei verschlüsselt
$name_plain = $_POST["name"];
$passwort_plain = $_POST["passwort"];
$name_enc = md5($name_plain);
$passwort_enc = md5($passwort_plain);

if (isset($name) && isset($passwort))

// Wenn Name und Passwort angegeben wurden...
{

// Lese die gesamte Name/Passwort-Datei aus und speichere sie in $userdb_line
$filename = 'pass';
$fp = fopen( $filename, 'r' );
$userdb_line = fread( $fp, filesize( $filename ) );
fclose( $fp );

// Kopiere die einzelnen Zeilen der Datei in das Array $userdb_array
$userdb_array = explode ( "\n", $userdb_line );

// Teile jede der Zeilen in ein Name-Passwort-Paar und vergleiche
// sie mit den eingegebenen Werten $name und $passwort
foreach ( $userdb_array as $line )
{
list( $username, $password ) = explode( '=', $line );

if ( ( $username == "$name_enc" ) && ( $password == "$passwort_enc" ) )
// Wenn Name-Passwort-Paar gefunden...
{
// Markiere Benutzer als authentifiziert und breche Schleife ab
$knownuser = true;
break;
}

else
// Wenn Name-Passwort-Paar nicht gefunden...
{
// Markiere Benutzer als nicht authentifiziert
$knownuser = false;
}
}
}

else

// Wenn Name und/oder Passwort nicht angegeben sind
{
echo "Sie müssen Name und Passwort angeben!";
}

?>

Dieses Script sollte jetzt funktionieren, nach einigem Probieren habe ich es hinbekommen. Als Name/Passwort-Datei erwartet das Script eine Datei mit den folgenden Merkmalen:
Linux-Zeilenumbrüche (wichtig!)
Name und Passwort mit md5() verschlüsselt
Name und Passwort durch "=" getrennt
für jedes Name/Passwort-Paar eine eigene Zeile


MfG
bockionline