Login Script

Katzenbauer

Erfahrenes Mitglied
Ich habe ein Login Script geschrieben und auf der Index Seite eingebunden (also immer sichtbar). Ist zwar noch nicht ganz fertig aber es funktioniert nicht richtig.
. Also es wird einfach die seite index.php(wo es in einer Spalte includet wird und wo logischwerweise auch die POST Variablen hin übergeben werden) aufgerufen und das login fenster erscheint wieder, wenn ich auf Abschicken gehe. Sollte ja eigentlich nicht, da nun die erforderlichen Werte im Session Array verfügbar sind. Wo liegt mein Fehler. Falls ihr noch mehr braucht kann ich auch Dateien per Mail verschicken (oder anhängen)
Hier ist die Login Datei:

PHP:
<?
error_reporting(E_ALL);
	if(isset($_POST['userid']) AND '0' == $_POST['userid']) {
	    echo "<p>\n";
	    echo "    Login falsch.\n";
	    echo "</p>\n";
	    } else {
	            if(isset($_POST['userid'], $_POST['password']) AND
	               login_right(addslashes($_POST['userid']),
	                           addslashes($_POST['password']))) {
	                $_SESSION['id'] = $_POST['userid'];
	                $sql = "SELECT
								`group`
							WHERE
							    `name` = '".$_SESSION['id']."';
							FROM
							    `users`";
					$result = mysql_query($sql) OR die(mysql_error());
					$row = mysql_fetch_assoc($result);
					$_SESSION['group'] = $row['group'];

            	}
        	}
       

if (!isset($_SESSION['id'])) {
			    echo " <table>\n";
			    echo " <form action=\"index.php\" method=\"post\"  />\n";
			    echo " <tr>\n";
			    echo " 	<td>\n";
			    echo "Benutzername";
			    echo " </tr>\n";
			    echo " 	</td>\n";
			    echo " <tr>\n";
			    echo "  <td>\n";
			    echo " <input class=\"kurz\" type=\"text\" name=\"userid\" id=\"name\"/>\n";
			    echo " </td>\n";
			    echo " </tr>\n";
			    echo " <tr>\n";
			    echo " 	<td>\n";
			    echo "Passwort";
			    echo " </tr>\n";
			    echo " 	</td>\n";
			    echo " <tr>\n";
			    echo "  <td>\n";
			    echo " <input class=\"kurz\" type=\"password\" name=\"password\" id=\"password\"/>\n";
			    echo "  </td>\n";
			    echo " </tr>\n";
			    echo " <tr>\n";
			    echo " 	<td>\n";
			    echo " <input class=\"kurz\" type=\"submit\" name=\"submit\" value=\"Abschicken\" />\n";
			    echo " </tr>\n";
			    echo " 	</td>\n";
				echo " </form>\n";
			    echo " </table>\n";

			} else {
				echo "Du bist als<br />\n" .$_SESSION['id']."<br />\n eingelogged.";
			}
				

?>

Die wird als login.php auf der index.php eingebunden:

PHP:
<?
			    include "online.php";
			    include "login.php";
			    print_r($_SESSION);
			?>

Die Funktion fürs login ist folgende:

PHP:
function login_right($id, $pass)
{
    $sql = "SELECT
            COUNT(*) as Anzahl
		FROM
			`users`
		WHERE
		    `id` = '".$id."' AND
		    `password` = MD5('".$pass."');";
	$result = mysql_query($sql) OR die(mysql_error());
	$row = mysql_fetch_assoc($result);
	mysql_free_result($result);
	return $row['Anzahl'];
}


Zum testen bitte hier gucken: http://www.alexander.rockthis.de
testaccount: test test
 
Hallo,

ich hab mir dein Quelcode mal angeschaut, abgesehen davon dass du ein paar "formale" HTML Fehler gemacht hast, hast du mysql in der login_right Funktion gesacht der der überprüfen ob das Passwort MD5($pass) als Text vorhanden ist.
Also im Klartext, du hast das Password nicht codiert, da du ' ". ." ' falsch gesetzt hast.
Diese hättest du vor und nach der Funktion MD5 verwenden sollen.

Oder wie folg lössen können:
PHP:
function login_right($id, $pass) 
{
   $pass2=MD5($pass);
    $sql = "SELECT 
            COUNT(*) as Anzahl 
        FROM 
            `users` 
        WHERE 
            `id` = '".$id."' AND 
            `password` = '".$pass2."' "; 
    $result = mysql_query($sql) OR die(mysql_error()); 
    $row = mysql_fetch_assoc($result); 
    mysql_free_result($result); 
    return $row['Anzahl']; 
}

Oder gibt es die Md5 Funktion auch in mySQL ?

Probier mal ob es so funktioniert.

Um noch mal zurück zudenn html fehlern zu kommen:

Du hast in der Tabelle des öfter den tr Tag vor dem td Tag geschlossen,
die goldene Regel heißt ja: Der Tag der als erstes geöffnet wird, wird als letztes geschlossen.
Außerdem ist es sinnvoll die HTML Tags, so wie denn PHP Quelcode zu formatieren.

Der Vollständigkeit halber hier noch die Login Datei:

PHP:
<?
error_reporting(E_ALL); 
    if(isset($_POST['userid']) AND '0' == $_POST['userid']) { 
        echo "<p>\n"; 
        echo "    Login falsch.\n"; 
        echo "</p>\n"; 
        } else { 
                if(isset($_POST['userid'], $_POST['password']) AND 
                   login_right(addslashes($_POST['userid']), 
                               addslashes($_POST['password']))) { 
                    		   									$_SESSION['id'] = $_POST['userid']; 
                    											$sql = "SELECT 
                                									   		    `group` 
    												   					WHERE 
                                											   	`name` = '".$_SESSION['id']."'; 
                            											FROM 
                                											  	`users`"; 
                     											$result = mysql_query($sql) OR die(mysql_error()); 
                    											$row = mysql_fetch_assoc($result); 
                    											$_SESSION['group'] = $row['group']; 

                } 
            } 
        

if (!isset($_SESSION['id'])) { 
                echo " <table>\n"; 
                echo " 			   <form action=\"index.php\" method=\"post\"  />\n"; 
                echo " 			   		 <tr>\n"; 
                echo "     		   		 		  <td>\n"; 
                echo "			   		 		  		   Benutzername"; 
                echo "     		   		 		  </td>\n";
                echo " 			   		 </tr>\n";  
                echo " 			   		 <tr>\n"; 
                echo "  		   		 		  <td>\n"; 
                echo " 			   		 		  		   <input class=\"kurz\" type=\"text\" name=\"userid\" id=\"name\"/>\n"; 
                echo " 			   		 		  </td>\n"; 
                echo " 			   		 </tr>\n"; 
                echo " 			   		 <tr>\n"; 
                echo "     		   		 		  <td>\n"; 
                echo "			   		 		  		  Passwort"; 
                echo "     		   		 		  </td>\n"; 
                echo " 			   		 </tr>\n"; 
                echo " 			   		 <tr>\n"; 
                echo "  		   		 		  <td>\n"; 
                echo " 			   		 		  		   <input class=\"kurz\" type=\"password\" name=\"password\" id=\"password\"/>\n"; 
                echo "  		   		 		  </td>\n"; 
                echo " 			   		 </tr>\n"; 
                echo " 			   		 <tr>\n"; 
                echo "     		   		 		  <td>\n"; 
                echo " 			   		 		  		   <input class=\"kurz\" type=\"submit\" name=\"submit\" value=\"Abschicken\" />\n"; 
                echo "     		   		 		  </td>\n";
                echo " 			   		 </tr>\n";  
                echo " 			   </form>\n"; 
                echo " </table>\n"; 

            } else { 
                echo "Du bist als<br />\n" .$_SESSION['id']."<br />\n eingelogged."; 
            } 
                 

?>

MfG
 
Original geschrieben von Lark
Also im Klartext, du hast das Password nicht codiert, da du ' ". ." ' falsch gesetzt hast.
Diese hättest du vor und nach der Funktion MD5 verwenden sollen.

(..)

Oder gibt es die Md5 Funktion auch in mySQL ?

Calculates an MD5 128-bit checksum for the string. The value is returned as a string of 32 hex digits, or NULL if the argument was NULL. The return value can, for example, be used as a hash key.

mysql> SELECT MD5('testing');
-> 'ae2b1fca515949e5d54fb22b8ed95575'

This is the "RSA Data Security, Inc. MD5 Message-Digest Algorithm." MD5() was added in MySQL 3.23.2.
http://dev.mysql.com/doc/mysql/en/Encryption_functions.html


Original geschrieben von Lark
Du hast in der Tabelle des öfter den tr Tag vor dem td Tag geschlossen,
die goldene Regel heißt ja: Der Tag der als erstes geöffnet wird, wird als letztes geschlossen.
Damit hast Du grundlegend Recht, aber bei einer Tabelle kommt man darum nicht herum, da eine Spalte (td) immer vor einer Zeile (tr) geschlossen werden muss ;)

Original geschrieben von Lark
Außerdem ist es sinnvoll die HTML Tags, so wie denn PHP Quelcode zu formatieren.
Auch das stimmt nicht so ganz. Denn von Deinem wunderschönen formatieren echo-Ausgaben wirst Du leider in der Ausgabe im Quelltext nicht viel von sehen ;)

Generell empfiehlt sich sowieso, bei mehreren Zeilen an HTML Code den PHP Code zu unterbrechen:

PHP:
<?
error_reporting(E_ALL);
if(isset($_POST['userid']) AND '0' == $_POST['userid']) { 
    echo "<p>\n"; 
    echo "Login falsch.\n"; 
    echo "</p>\n"; 
} else {
    if(isset($_POST['userid'], $_POST['password']) AND login_right(addslashes($_POST['userid']), addslashes($_POST['password']))) {
        $_SESSION['id'] = $_POST['userid'];
        $sql =  "SELECT
                    `group`
                WHERE
                    `name` = '".$_SESSION['id']."';
                FROM
                    `users`";
        $result             = mysql_query($sql) OR die(mysql_error());
        $row                = mysql_fetch_assoc($result);
        $_SESSION['group']  = $row['group'];
     }
}


if (!isset($_SESSION['id'])) { ?>
<form action="index.php" method="post" />
    <table>
        <tr>
            <td>Benutzername</td>
        </tr>
        <tr> 
            <td><input class="kurz" type="text" name="userid" /></td>
        </tr>
        <tr> 
            <td>Passwort</td>
        </tr>
        <tr> 
            <td><input class="kurz" type="password" name="password" /></td>
        </tr> 
        <tr> 
            <td><input class="kurz" type="submit" name="submit" value="Abschicken" /></td>
        </tr>  
    </table> 
</form>

<?
} else {
    echo "Du bist als<br />\n" .$_SESSION['id']."<br />\n eingelogged.";
}
?>
 
Ok danke aber weiter bin ich so immer noch nicht. Findet ihr einen Fehler, der die beschriebenen Sypthome verursachen könnte?
 
Original geschrieben von Katzenbauer
Ok danke aber weiter bin ich so immer noch nicht. Findet ihr einen Fehler, der die beschriebenen Sypthome verursachen könnte?
Mal eine Frage: Wo wird denn die Session gestartet? Kann ich zumindest nicht im Code, den Du gepostet hast, finden. ;)
 
Nein die steht direkt in der zweiten Zeile der index.php.

Ich häng mal alles an. Ist wahrscheilich ne Zumutung aber sonst kommen wir hier nicht weiter.

Achja ich weiß, dass meine Seite nicht valid ist aber das werde ich machen, wenn ich fertig bin.
 

Anhänge

Zuletzt bearbeitet:
Zurück