Was ist falsch an meiner login.php

hi.com :slight_smile:

ich stehe ( mal wieder :smoke: ) vor einem problem…
um ein loginsystem in php auf cookies basierend zu schreiben, hab ich erstmal zum testen eine login.php erstellt.

in der datei soll, wenn noch kein cookie gesetzt is, das formular zum anmelden erscheinen, welches die daten per POST an sich selbst schickt und mit den daten in der mysql datenbank vergleicht. wenn die daten mit keiner zeile (passwort, name) übereinstimmen kommt eine fehlermeldung, wenn nicht wird ein cookie gesetzt und man wird begrüßt, und das formular sollte beim nächsten aufrufen nicht mehr erscheinen, sondern halt nur die begrüßung… :slight_smile:

so mein problem ist folgendes:

das mit dem einloggen, cookie setzen und überprüfen klappt alles…
ich hab mir eine funktion geschrieben, für if-funktionen, mit der ich überprüfe, ob man den richtigen cookie hat, oder die richtigen daten eingegeben hat.
ABER -.- wenn man die seite nach dem einloggen nochmal aufruft, erscheint wieder das formular… ich habe KEINEN PLAN warum -.- habe alles 3 mal durchgeguckt…

naja ich poste erstmal meinen code, dann die seite und dann adde ich für euch noch eine zeile in der datenbank… :

CODE:

[code]<?php

mysql_connect(„localhost“, „rausgenommener username“, „das passwort ;-)“) or die („keine verbindung zu mysql möglich“);
mysql_select_db(„semikolon“) or die („die datenbank existiert nicht mehr“);
$daten = „SELECT * FROM user“;
$erg = mysql_query($daten);

function checklogin($name, $pass, $querydaten){
if(isset($name) && isset($pass)){

	while($row = mysql_fetch_object($querydaten)){
		$wname = $row->name;
		$wpass = $row->password;
		if($name == $wname && $pass == $wpass){
			$lgd = "blub";
		}
	}
	if(isset($lgd)){
		return true;
	} else {
		return false;
	}
}

}
if(!$_POST[‚loginsubmit‘] && !checklogin($_COOKIE[‚name‘], $_COOKIE[‚pass‘], $erg)){
?>

            <tr>
              <td>passwort:</td>
              <td><input name="pass" type="password" /></td>
              </tr>
            <tr>
              <td>&nbsp;</td>
              <td><input type="submit" name="loginsubmit" value="einloggen" /></td>
              </tr>
name:
<?php } else { if(empty($_POST['name']) || empty($_POST['name'])){ echo "bitte alles ausfüllen."; } else { if(checklogin($_POST['name'], $_POST['pass'], $erg)){ header("Content-Type: text/html; charset=utf-8"); setcookie("loginchantr", $_POST['name'], time()+7200); setcookie("passchantr", $_POST['pass'], time()+7200); echo "cookie für 3 stunden gesetzt"; } else { echo "passwort oder name falsch"; } } } ?>[/code]

DIE SEITE:
semikolon.bplaced.net/cms/login/login.php

NAME UND PASSWORT ZUM TESTEN:
[ol]name: bplaced[/ol]
[ol]pw: rockt[/ol]

danke schonmal :slight_smile:

Also Firefox fragt beim Reload immer, ob er die POST-Sachen senden soll.
Wenn ich da “Ja” auswähle bleibe ich auch eingeloggt.
Ich bin zwar gerade am lernen von php, aber ich seh nur Cookies und
nichts, was mit Sessions zu tun hat. Oder irre ich mich da?

@TrekWork: Da irrst du dich wirklich. Die session-Erweiterung macht es nur bequemer, genau das zu tun - der User übermittelt eine Session-ID (Cookie, GET, POST) und die Session-Daten werden geladen. Mit semikolon’s Code übermittelt der User eben alle Daten per Cookie, der Effekt bleibt der selbe. Der einzige Unterschied ist in dem Fall, dass die Daten (Username und Passwort) im Klartext auf dem Client-Rechner gespeichert werden.

[randbemerkung]Du weißt, dass der Loginname dem Datenbanknamen gleicht und es daher unnötig ist, diesen zu zensieren?[/randbemerkung]

Zu deinem Problem: Schau dir mal die zwei Codestellen an.

if(!$_POST['loginsubmit'] && !checklogin($_COOKIE['name'], $_COOKIE['pass'], $erg)){ setcookie("loginchantr", $_POST['name'], time()+7200); setcookie("passchantr", $_POST['pass'], time()+7200);
Ich kann dir Notices nur ans Herz legen. Genau solche Fehler werden damit gefunden. :wink:

öhm… danke scram :slight_smile:

werds grad mal probieren!

achja da hatte ich nich dran gedacht mit der datenbank… :p

[quote]Notice: Undefined index: loginsubmit in /users/semikolon/www/cms/login/login.php on line 25

Notice: Undefined index: name in /users/semikolon/www/cms/login/login.php on line 25

Notice: Undefined index: pass in /users/semikolon/www/cms/login/login.php on line 25[/quote]
keine ahnung, was daran falsch sein soll… ich frage, ob kein cookie gesetzt ist und gleichzeitig nichts per POST gesendet wurde >.<

Du verwendest Variablen, die nicht initialisiert wurden. Solltest du dir abgewöhnen. :wink:

Das sagt dir zum Beispiel, dass der Index „name“ nicht existiert - selbst, nachdem das Cookie gesetzt wurde. Irgendwie logisch, wenn du ein Cookie „loginchantr“ setzt, aber nach dem Cookie „name“ suchst.

[quote=“Scram”]Zu deinem Problem: Schau dir mal die zwei Codestellen an.

if(!$_POST['loginsubmit'] && !checklogin($_COOKIE['name'], $_COOKIE['pass'], $erg)){ setcookie("loginchantr", $_POST['name'], time()+7200); setcookie("passchantr", $_POST['pass'], time()+7200);[/quote]

aaaaaaaaaaaaaaah danke!!
moment x[

okay hat sich erledigt, dankeschön :sunglasses: