l0g1t3ch
Goto Top

Einfaches Login Script klappt Denkfehler?

Hallo Liebe Profis

Ich habe wiedereinmal ein PHP Problem :D

und zwar möchte ich ein einfaches Login script schreiben Sicherheit ist hier irrelevant da es nur Netzintern betrieben wird.

Benutzer sollen sich anmelden mit Benuztername und Password und dann soll mittels einer "While / if" Bedingung das ganze geprüft werden.

Das Formular:

<form action="login.php" method="post">  
<table>
	<tr>
    	<td width="150">Benutzername</td>  
		<td><input type="text" name="username" /></td>  
     </tr>
     <tr>
     	<td>Passwort</td>
        <td><input type="text" name="password" /></td>  
     </tr>
     <tr>
     	<td colspan="2" align="center"><input type="submit" value="Login" /></td>  
     </tr>
</table>
</form>

Das Login Script:

<?php
	$username = $_POST['username'];  
	$password = $_POST['password'];  
	
	include("inc/connect.php");  
	
	$SQL = "SELECT * FROM users";  
	$result = mysql_query($SQL);
	while($row = mysql_fetch_array($result))
		{
		if(($username == $row['username']) && ($password == $row['password']))  
			{
				echo "Herzlich Willkommen";  
			}
			
		}
		
		
	?>

Folgendes Passiert: Password und Benutzername werden überprüft und sofern richtig auf "Herzlich Willkommen" verwiesen, soweit so gut!

Hänge ich an das IF aber noch eine "ELSE" dran wird selbst bei richtigen Zugangsdaten die ELSE schleifen ausgeführt!

Was mache ich also Falsch?! :D

Lieben Gruß
Benjamin

Content-Key: 185959

Url: https://administrator.de/contentid/185959

Ausgedruckt am: 28.03.2024 um 18:03 Uhr

Mitglied: Epixc0re
Epixc0re 05.06.2012 um 14:00:20 Uhr
Goto Top
Zitat von @L0g1t3ch:

if(($username == $row['username']) && ($password == $row['password']))
{
echo "Herzlich Willkommen";
}

}


Der Fehler den du beobachtest ist ganz logisch, da du sicher mehr als einen User hast.
In deiner Schleife wird jeder User abgearbeitet der in der DB steht, wenn das Passwort und der Username matcht dann führt er dein "Herzlich Willkommen" aus, und beim nächsten User kommt dann alles in else {} dran.

Du solltest ggf. return verwenden, oder alles auf Mysql abschieben:
select * from users where username='$username' and password='$password';  


lg aus Wien,
Stefan
Mitglied: ITSchlumpf
ITSchlumpf 05.06.2012 aktualisiert um 14:09:11 Uhr
Goto Top
Hoi,

müsstest du eig nicht $result anstatt $row benutzen, da du dein Ergebnis überprüfen willst?


 <?php
        include('../server/server.php');  
        $dbconnect = mssql_connect($SQL_Server, $SQL_User, $SQL_Pw);
        mssql_select_db($SQL_db);
        session_start();
        $_SESSION["benutzername"] = $_POST["username"];  
        $_SESSION["passwort"] = $_POST["pw"];  
        $index_user = $_SESSION["benutzername"];  
        $pw = $_SESSION["passwort"];  
        $index_pw=md5($pw);
        $query = mssql_query(
                "Select Benutzername, Passwort From Benutzer Where  
                Benutzername = '$index_user' AND Passwort = '$index_pw' AND flag='i.O'");  
        $result = mssql_fetch_array($query, MSSQL_ASSOC);

        if (($index_user = "$result[Benutzername]") AND  
                ($index_pw = "$result[Passwort]")) {  

            mssql_close($dbconnect);
            header("Location: liste.php?sort=IP&dir=asc");  
        } else {
            header("Location: ../error/error.php?login=error&eeepc=&anlegen=");  

            mssql_close($dbconnect);
        }
        ?>

Das hab ich mal vor einiger Zeit selbst geschrieben für ne kleine interne Anwendung bei uns. Vll hilft es dir ja weiter.

Gruß
Schlumpf

Edit: Okay sry verlesen $row passt ^^
Mitglied: Epixc0re
Epixc0re 05.06.2012 um 14:27:45 Uhr
Goto Top
Zitat von @ITSchlumpf:

müsstest du eig nicht $result anstatt $row benutzen, da du dein Ergebnis überprüfen willst?

Nein Row ist schon korrekt da er ja
$result = mysql_query($SQL); 
while($row = mysql_fetch_array($result)) 

verwendet, $row ist eine ableitung von $result, welche nur die aktuelle Zeile enthält.
Mitglied: Epixc0re
Epixc0re 05.06.2012 aktualisiert um 14:31:25 Uhr
Goto Top
Und hier ist die Lösung der Frage:

<?php
	$found = 0;

	$username = $_POST["username"];  
	$password = $_POST["password"];  

	include("inc/connect.php");  
	$SQL="SELECT * FROM users";  

	$result = mysql_query($SQL);
	while($row = mysql_fetch_array($result))
	{
		if($username == $row["username"] && $password == $row["password"])  
			$found = 1;
	}

	if($found == "1")  
	{
		echo "Herzlich Willkommen!";  
	} else {
		echo "Weg da!";  
	}
?>
Mitglied: ITSchlumpf
ITSchlumpf 05.06.2012 um 14:38:08 Uhr
Goto Top
Hi Epix,

habs oben schon editiert. Habs beim zweiten mal lesen dann gesehen, dass es passt.

Gruß
Mitglied: L0g1t3ch
L0g1t3ch 05.06.2012 um 14:57:39 Uhr
Goto Top
ich danke dir vielmals du hast mich auf den richtigen weg geschubst :D