• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bei wechseln der Seite wird der Login gecancelt

Mangafreak1995

Neues Mitglied
Hallo php/html-Com,

ich habe mir ein relativ kleines Script geschrieben zum Einloggen und gleichzeitiges Usermenu (wenn eingeloggt dann Usermenu, wenn nicht Login-Form) mit Fehlerausgabe. Wenn ich mich einlogge funktioniert alles(Cookies werden gesetzt, und Datenbank kriegt die korrekte CookieID). Wechsel ich die Seite und wieder auf eine der Seiten mit meinen Menu wird dort wieder das Login-Formular angezeigt. Wenn ich die Seite nur neulade bleib ich durch $_POST eingeloggt. Ich verstehe noch nicht ganz wo der Fehler steckt. Vielleicht seht ihr einen.
Ein weiteres Problem ist. Die Fehlerausgabe funktioniert nicht(dh. auch wenn ein Fehler sein müsste wird dieser nicht ausgegeben)

Ich hoffe ihr könnt bei meinen beiden Problemen den Fehler entdecken.
PHP:
	$user = "";
	$fail = 0;
	$usermsg = "";
	/*
	0 : kein Fehler
	1 : User, Email existiert nicht
	2 : Passwort falsch
	3 : keine Cookies aktiviert
	*/
	
	if(isset($p2)) // $p2 wird von der vorigen Seite mit übergeben, das sind die POST-Werte
	{
		$row = mysql_fetch_array(mysql_query("SELECT count(userid), userid FROM users WHERE username = '$p2[user]' OR email = '$p2[user]'", $db));
		if($row[0] == 1)
		{
			$hashpass = hash('sha256', $p2['pass']);
			$row = mysql_fetch_array(mysql_query("SELECT password, username, userid FROM users WHERE userid = '" . $row[1] . "'", $db));
			
			if($hashpass == $row[0])
			{
				$time = time();
				if(setcookie('userid', $row[2], $time+60*60*24*7*2))
				{
					$cookievalue = hash('sha256' ,$time . $row[1] . $row[2]);
					setcookie('passid', $cookievalue, $time+60*60*24*7*2);
					mysql_query("UPDATE users SET cookie = '$cookievalue' WHERE userid = '" . $row[2] . "'", $db);
					$user = $row[1];
				}
				else
				{
					$fail = 3;
				}
			}
			else
			{
				$fail = 2;
			}
		}
		else
		{
			$fail = 1;
		}
	}
	else
	{
		$user_id = htmlentities($_COOKIE['userid']);
		$cook_id = htmlentities($_COOKIE['passid']);
		
		$row = mysql_fetch_array(mysql_query("SELECT cookie, username FROM user WHERE userid =\"$user_id\"", $db));
		if($row[0] == $cook_id)
		{
			$user = $row[1];
		}
	}
	if(strlen($user) > 0)
	{/* Usermenu */}
	else
	{
		$usermsg =  '<form action="#" method="post" name="login"><p>'; // Login-Form mit Fehlerausgabe
		if(fail == 1) $usermsg .= '<span style="color:red">Username oder Email existiert nicht !</span>';
		$usermsg .= 'Username: <input type="text" name="username" size="35" /><br />';
		if(fail == 2) $usermsg .= '<span style="color:red">Passwort ist falsch !</span>';
		$usermsg .= 'Password: <input type="password" name="passwort" size="35" /><br />';
		if(fail == 3) $usermsg .= '<span style="color:red">Cookies sind deaktiviert !</span>';
		$usermsg .= '<input type="submit" value="Login"/>';
		$usermsg .= '</p></form>';
	}
?>

MfG Mangafreak1995
 
mysql_connect wurde aber schon vorher gemacht oder? :)
Ansonsten rate ich dir. Lasse dir alle Werte doch mal ausgeben. Debugging ist hier angesagt.
Irgendwo scheint hier ein Wert nicht zu passen.
Arbeite doch von oben nach unten durch. Mach erst ein var_dump von deinem $p2. Danach lässt du jeweils bei der schleife von isset und der else verzweigung davon ausgeben welchen weg er gegangen ist.
sowas wie:
echo "isset p2 -> true<br/>";
So kannst du dich dann immer weiter vor arbeiten bis du die Stelle eingrenzen kannst.
Auch wenn ich dir keine direkte antwort liefern konnte, hoffe ich, dass dir die Debugging Anleitung in der Kurzfassung weiterhilft ^^
Und nur als Tipp. Probier Funktionen oder sogar Klassen zu benutzen. Das sieht mir alles zu unübersichtlich aus :)
 
Es wird in den anderen Skripten auch langsam unübersichtlich ... ich muss mal gucken, ob ich functions schreiben sollte. Ja, bei jeder Datei, die das Skript einbindet ist auch mit der DB verbunden. Der Cookie-Wert wird ja auch bei einloggen in die DB eingeschrieben. Du hättest nur debuggen sagen sollen ^^ ne Anleitung hätt ich nich gebraucht, aber danke.
Ich werd mich melden wo der Fehler war. Geschweige denn ich finde ihn auch ^^

MfG Mangafreak1995
 
Zurück
Oben