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

Printed on: April 25, 2024 at 16:04 o'clock

Member: Epixc0re
Epixc0re Jun 05, 2012 at 12:00:20 (UTC)
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
Member: ITSchlumpf
ITSchlumpf Jun 05, 2012 updated at 12:09:11 (UTC)
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 ^^
Member: Epixc0re
Epixc0re Jun 05, 2012 at 12:27:45 (UTC)
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.
Member: Epixc0re
Epixc0re Jun 05, 2012 updated at 12:31:25 (UTC)
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!";  
	}
?>
Member: ITSchlumpf
ITSchlumpf Jun 05, 2012 at 12:38:08 (UTC)
Goto Top
Hi Epix,

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

Gruß
Member: L0g1t3ch
L0g1t3ch Jun 05, 2012 at 12:57:39 (UTC)
Goto Top
ich danke dir vielmals du hast mich auf den richtigen weg geschubst :D