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: