Probleme mit Sessions Login-Script

phpler87

Grünschnabel
Hallo!

Habe mir das Login Script von http://www.heddesheimer.de/blog/index.php/2006/01/29/login_seite_in_php_programmieren heruntergeladen.

Standardgemäß wird sich bei diesem Script folgendermaßen, ohne Abfrage der Benutzerdaten aus einer Datenbank, eingeloggt:

PHP:
function login_formular()
{
?>
<form action="<?php echo $GLOBALS['PHP_SELF'] ?>" method="POST">
Username: <input type="text" name="username"><br>
Passwort: <input type="password" name="password"><br>
<input type="submit" name="login" value="Anmelden">
</form>
<?php
}
 
function check_login($user, $pass)
{
if ( ($user == "admin") and ($pass == "geheim") )
{
return true;
} else {
return false;
}
}

Da ich meine User jedoch in einer Datenbank angelegt habe, habe ich das Ganze verändert:

PHP:
function login_formular()
{
?>
<form action="<?php echo $GLOBALS['PHP_SELF'] ?>" method="POST">
Username: <input type="text" name="username"><br>
Passwort: <input type="password" name="password"><br>
<input type="submit" name="login" value="Anmelden">
</form>
<?php
}
// Die Funktion check_login prüft Benutzername und Passwort.
// Diese Funktion könnte man später mit weiteren Zugangsdaten
// erweitern. Am Besten wäre es, die Zugangsdaten aus
// einer Datenbank zu holen, da man hier die Benutzer
// flexibel verwalten kann, ohne jedes Mal den Code
// zu ändern.
function check_login($user, $pass)
{
$sqlbefehl = "SELECT * FROM ll_user";
$ergebnis = mysql_query($sqlbefehl);
$daten = mysql_fetch_array($ergebnis);
 
if ( $user == $daten['username'] and md5($pass) == $daten['password'] )
{
return true;
} else {
return false;
}
}


Nun mein Problem: Wenn ich mehr als einen User in meiner Datenbank anlege (natürlich mit md5 Passwörtern), kann ich mich immer nur mit dem User einloggen, den ich als erstes angelegt habe. Richte ich weitere Benutzer ein, kann ich mich mit diesen nicht einloggen. Was könnte das sein? Warum funktioniert nur der erste User den ich angelegt habe?


Viele Grüße
Tom
 
Das liegt daran, dass du mit mysql_fetch_assoc() nur eine Zeile aus dem Result ausliest. Versuchs so:
PHP:
function check_login($user, $pass) {
   $sql  = "SELECT * FROM `ll_user` ";
   $sql .= "WHERE `username` = '" . $user . "' ";
   $sql .= "AND `password` = '" . md5($pass) . "'";
   $result = mysql_query($sql) OR die(mysql_error());
   return (boolean)mysql_num_rows($result);
}
 
Danke euch beiden für eure Tipps, das Problem ist durch das Ändern der Funktion aber immer noch nicht gelöst. Weiterhin kann ich mich nur mit dem 1. User aus der Tabelle einloggen. :confused:


Gruss
Tom
 
Hallo,

versuch es einmal so:

PHP:
<?php
     $sqlbefehl = "SELECT
                         *
                   FROM
                         `ll_user`
                   WHERE
                          `password` ='".md5($_POST['password'])."'
                   AND 
                          `username` = '".$_POST['username']."'";

    $ergebnis = mysql_query($sqlbefehl)OR DIE(mysql_error());
    while($daten = mysql_fetch_assoc($ergebnis)){
 
   // Hier den Rest der Ausgabe...

   }
?>
Gruß

RS9999
 
Zuletzt bearbeitet:
Funktioniert immer noch nicht. Hier nochmal der betreffende Teil:

PHP:
function check_login($user, $pass) { 
$sql = "SELECT * FROM ll_user WHERE username = '".$_POST['username']."' AND password = '".md5($_POST['password'])."'"; 
$ergebnis = mysql_query($sql)OR DIE(mysql_error());
while($daten = mysql_fetch_assoc($ergebnis)){
if ( ($user == $daten['username']) and ($pass == $daten['password']) )
{
return true;
} else {
return false;
}
 
}
 
}


Und hier der Teil, wo die Funktion eingesetzt wird:

PHP:
if (isset($_POST['login'])) {
if (check_login($_POST['username'], md5($_POST['password'])))
{
$_SESSION['username'] = $_POST['username'];
$_SESSION['login_okay'] = true;
}
}


Weiterhin funktioniert der Login mit dem 1. User der Datenbank, aber mit allen anderen nicht. Habe mal eine Ausgabe mit echo versucht, da gibt er mir in der Funktion alle User mit Passwort aus der DB aus.


Gruss
Tom
 
Probier mal folgende Funktion:
PHP:
function check_login($user, $pass)
{
	$query = '
		SELECT
		        1
		  FROM
		        `ll_user`
		  WHERE
		        `username` = "'.mysql_real_escape_string($user).'"
		    AND `password` = "'.md5($pass).'"
		';
	return (bool) mysql_num_rows(mysql_query($query)) > 0;
}
 
Zurück