PHP Session - basierter Login

Zneaf

Erfahrenes Mitglied
Hallo zusammen ;)

ich programmiere seit geraumer Zeit mit HTML und PHP.

Vor kurzem habe ich auf meiner Website die Möglichkeit geschaffen, dass man sich registrieren kann.

Allerdings habe ich etwas Probleme mit meinem Login - Script.
Ich möchte an dieser Stelle betonen, dass ich rein Hobby - mäßig programmiere und ihr daher nachsichtig mit mir umgehen sollte, wenn ich etwas nicht sofort begreife was ihr sagt :D

Dafür bedanke ich mich im Voraus =)

Hier mein bisheriger Login Script (login.php):
PHP:
<html>
<head>
<title>Login</title>
</head>
<body link="#333333" vlink="#333333" alink="#333333">

<?php

    session_start();

    // Überprüfen, ob das Formular abgeschickt wurde und ob beide Angaben gemacht wurden.
    if( isset($_POST['username'], $_POST['password'])
        AND
			strcmp(trim($_POST['username']),'') != 0
        AND
			strcmp(trim($_POST['password']),'') != 0 ) {

				// Einbinden der Login - Konfigurationsdatei.
				include_once 'loginconfig.php';

				// Verbindung mit MySQL-Datenbank herstellen.
				if( !$connection = mysql_connect( $_config['host'], $_config['user'], $_config['password'] ) ) {
					die( 'Verbindung zum Datenbankserver konnte nicht hergestellt werden.' );
				}

				if( !mysql_select_db( $_config['database'], $connection ) ) {
					die ( 'Die Datenbank ' . $_config['database'] . ' kann nicht verwendet werden. <br />
                    MySQL-Error: <br />' . mysql_error() );
				}

				// SQL-Anweisung an die Datenbank senden, um erstens herauszufinden, ob 
				// diese Kombination von Usernamen und Password überhaupt existiert und 
				// zweitens bei Existenz die Userinformationen auszulesen.
				$sql = "SELECT 
							userid,
							username,
							password
						FROM         
							user
						WHERE
							username = '" . trim($_POST['username']) . "'
						AND
							password = '" . md5(trim($_POST['password'])) . "'";
                           
				$res = mysql_query($sql) or die( 'Error[SELECT|User]: <br />
                                                           <pre>' . $sql . '</pre>
                                                           <br />
                                                           MySQL-Error: ' . mysql_error() );

				// Nur wenn genau ein Datensatz selektiert wurde, wird der User eingeloggt.
				// Ansonsten wird ihm eine Fehlermeldung angezeigt und 5 Sekunden später zum Loginformular zurückgeleitet.
				if( mysql_num_rows($res) != 1 ) {
					echo "<meta http-equiv='refresh' content='0; url=index.php?site=loginfailed'>";
					exit();
				}
				else {
					// Der Schlüssel 'loggedIn' erhält den Wert 'true'. So kann überprüft später werden, 
					// ob der User eingeloggt ist oder nicht.
					$_SESSION['loggedIn'] = true;

					// Die userspezifischen Daten werden ausgelesen und der Session hinzugefügt.
					$user = mysql_fetch_object($res);
					$_SESSION['userid'] = $user->userid;

					// Der Login war erfolgreich und der User wird zur Startseite weitergeleitet.
					echo "<meta http-equiv='refresh' content='0; url=index.php?site=home'>";
					exit();                                            
				}

			}
?>

<img src="/images/anmelden_head.jpg" width="526" height="26"><br><br>
<center>
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post"> 
<table border="0" cellpadding="0" cellspacing="2">
	<tr>
	<td width="10">&nbsp;</td>
		<td><font face="Arial" color="333333">Username:</font></td>
	</tr>
	<tr>
		<td width="10">&nbsp;</td>
		<td><input type="text" name="username" size="25" maxlength="25"></td>
	</tr>
	<tr>
		<td width="10">&nbsp;</td>
		<td><font face="Arial" color="333333">Passwort:</font></td>
	</tr>
	<tr>
		<td width="10">&nbsp;</td>
		<td><input type="password" name="password" size="25" maxlength="25"></td>
	</tr>
	<tr>
		<td width="10">&nbsp;</td>
		<td></td>
	</tr>
	<tr>
		<td width="10">&nbsp;</td>
		<td><input type="submit" name="login" value="Anmelden">&nbsp;<input type="reset" value="Abbrechen" name="reset"></td>
	</tr>
</table>
</form>
</center>
</body>
</html>
Ich habe versucht, den Code hier so darstellen zu lassen, dass er genauso eingerückt ist, wie in meinem Script.
Allerdings kann es sein, dass er nicht genau so dargestellt wird, wie ich ihn bei mir im Script habe.
Für eventuelle Fehler bezüglich "Einrücken" entschuldige ich mich im Voraus und hoffe, dass ihr damit zurecht kommt.

Hier noch die Datei "loginconfig" in der die Daten bezüglich Datenbank enthalten sind:
PHP:
<?php

    // Array initialisieren ...
    $_config = array();

    // ... und mit Werten füllen

    // Der Datenbankserver. 
    $_config['host'] = '';  

    // Ein User, der auf den Server zugreifen darf.
    $_config['user'] = '';        

    // Das zum User passende Passwort.
    $_config['password']  = ''; 

    // Der Name der Datenbank, die auf dem Datenbankserver angesprochen werden soll.
    $_config['database'] = '';

?>
Natürlich habe ich alle nötigen Daten eingetragen und die Datenbank existiert :)

Nun zu meinem Problem:
Es sind bereits Test - Benutzer registriert.
Allerdings wird mir immer die Fehlermassage von "loginfailed.php" angezeigt, wenn ich versuche, mich ein zu loggen.

Hat vielleicht jemand eine Ahnung, woran es liegen könnte?

Würde mich über eure Hilfe sehr freuen ;)

Vielen Dank im Voraus.

LG Zneaf
 
Bekommst du eigentlich irgendwelche Fehlermeldungen?

Zu session_start(); schreib das mal ganz an den Anfang vom Dokument ohne das auch nur ein anderer Befehl vorher kommt.
 
Zu session_start(); schreib das mal ganz an den Anfang vom Dokument ohne das auch nur ein anderer Befehl vorher kommt.
Sogar noch weiter vorne. Bevor irgend etwas an den Browser geschickt wird. Also vor den Header und all das Zeug. Kein Leerzeichen, kein Zeilenumgbruch davor.

PHP:
<?php session_start(); ?>
<html>
<head>
<title>Login</title>
</head>
<body link="#333333" vlink="#333333" alink="#333333">

<?php
...
 
Hallöchen ;)

erstmal vielen Dank für eure zügige Antwort.

Also ich bekomme keine Fehlermeldungen angezeigt, sondern werde einfach dauernd zu der Datei "loginfailed.php" weitergeleitet. Diese Datei enthält allerdings nur einen Standard text, in dem steht, dass die Benutzerdaten möglicherweise nicht korrekt sind.

Die Session startet wie von euch empfohlen als aller erstes.
Allerdings habe ich immernoch das gleiche Problem wie zu Beginn =(

Hat also leider nicht geklappt.

Habt ihr vielleicht noch andere Ideen? Oder seht ihr vielleicht einen möglichen Fehler innerhalb meines Codes?

Hoffe ihr könnt mir weiterhelfen. Vielen Dank im Voraus für eure Mühen :)

LG Zneaf ;)
 
Kommentiere mal den Teil aus in dem man bei einem Fehler zu der anderen Datei weitergeleitet wird. Und füge dort ein echo ein das dir nur zum Testen dann z. B. Login Failed ausgibt statt der Datei.

Jetzt mal eine dumme Frage: Gibt es überhaupt einen User in der Tabelle?
 
Guden ;)

Wie genau meinst du das mit dem "auskommentieren"?
Habe das mit dem echo mal ausprobiert und es tut sich leider auch nix anderes.
Er gibt dann einfach "Login Failed" aus.

Zu deiner Frage: jap es gibt 3 Benutzer und mit keinem der dreien funktioniert es^^

LG Zneaf
 
Mit auskommentieren meinte ich

PHP:
// Auskommentiert

/* oder so */

Jetzt bin ich aber auch allmählich ratlos ... konnte beim überfligen deines Codes nicht sonderliches feststellen.
 
Sind denn Passwörter auch als md5-Hash in der DB gespeichert?
Hast du nur hier keinen Doctype angegeben oder ist das in deinem Live-Script auch so? Ansonsten könnte ich mir durchaus vorstellen das die DB in UTF-8 Kodiert ist, dein Script aber in einem anderen Zeichensatz. so kann es zu instimmigkeiten der Passwörter kommen.
Ansonsten halt mal alles Debuggen, was in jeder Code-Zeile passiert.
 
Heyho Leute =)

@ iBirne: jup. Da sind 3 User drinnen.

@ Maniac_81: Also die Passwörter werden bei der Registrierung auch als md5-Hash abgespeichert. Hab das natürlich auch überprüft. Das mit dem Doctype wäre eine möglichkeit. Allerdings kenne ich mich damit nicht so recht aus. Muss der Doctype auf jede Seite eingebunden werden? Hättest du vielleicht nen Doctype den ich verwenden könnte?

Sorry, wenn ich blöde Fragen stelle, aber kenn mich damit leider nicht so aus ;)

Hoffe du verzeihst mir das :D

Vielen Dank nochmals für Eure Hilfestellung.
Hoffe Ihr habt noch etwas Puste, um mir weiterhin zu helfen =)

LG Zneaf =)
 
Aah bevor ich es vergesse.

@ Maniac_81: Was genau meinst du mit debuggen? Sowas wie "austesten" oder so?^^

LG Zneaf
 

Neue Beiträge

Zurück