hi,
habe folgendes Problem, hab nen login gebastelt und wenn das passwort stimmt soll die seite geöffnet werden im selben Browserfenster. Hier der code
if (isset($username) && isset($pw))
{
$db = mysql_connect („localhost“, „root“, „“);
mysql_select_db(„maxcityDB“,$db);
$query = „SELECT username, pw FROM user where pw =’“.($_POST[„pw“])."’ AND username = ‚".$_POST[„username“]."‘";
$result = mysql_query($query);
if(mysql_num_rows($result) == 1)
{// hier müsste das doch geschehen
}
else{echo „Falsches Passwort oder Benutzername.“;}
}
else
{echo "
Bitte fülle alle Felder aus.";}?>
name
passwort
was mache ich hier falsche
danke in voraus.
gruss ming
Hi!
if (isset($username) && isset($pw))
Hier solltest Du nach $_POST[„username“] bzw. $_REQUEST[‚username‘] (dann macht´s keinen Unterschied, ob Du GET oder POST verwendest) abfragen - so wie Du das auch in Deiner SQL-Query machst.
$query = „SELECT username, pw FROM user where pw
=’“.($_POST[„pw“])."’ AND username =
‚".$_POST[„username“]."‘";
Nur als kleine „optische“ Verbesserung vielleicht einfach ein SELECT count(*) FROM … - schließlich hast Du die Angaben schon.
$result = mysql_query($query);
if(mysql_num_rows($result) == 1)
{// hier müsste das doch geschehen
}
else{echo „Falsches Passwort oder Benutzername.“;}
}
else
Du hast hier zwei else-Blöcke in einer if-Schleife.
Zu jeder if-Abfrage immer höchstens EIN else-Block und ggf. noch zusätzliche ifelse-Abfragen. So ist das nicht logisch.
{echo "
Bitte fülle alle Felder aus.";}?>
Die ganzen echo-Ausgaben sollten nach dem Body-Tag stehen, damit da auch vernünftiges html rauskommt.
Zwei weitere Dinge vielleicht noch:
Die Eingaben vom Benutzer solltest Du vorher nochmal überprüfen.
Ansonsten ist es ggf. möglich, daß jemand z.B. Deien komplette user-Tabelle löscht, indem er als Benutzernamen etwas in der Art eingibt:
„name’; DROP TABLE user;“
So kann man sich auch teilweise einen gültigen Account holen (wilde or-Verknüpfungen angeben).
Als zweiter Tip:
Schau die mal eine Template-Engine an. So kannst Du php völlig vom html-Code trennen. Das macht das ganze übersichtlicher und flexibler. Z.B.:
TemplatePower ( http://templatepower.codocad.com )
Die ist zwar nicht sooo super, aber für den Anfang leicht zu lernen.
Gruß
Patrick
Hi Patrik,
danke erstmal fuer die schnelle Response. Jetzt weiss ich aber immer noch nicht wie ich auf die seite verweise. bei jsp gibt es das so ein forward…
else
es sind 2 if - abfragen. hab leider den code aus platzgruende unuebersichtlich reinkopiert
ming
Hi!
danke erstmal fuer die schnelle Response. Jetzt weiss ich aber
immer noch nicht wie ich auf die seite verweise. bei jsp gibt
es das so ein forward…
Ich würde nicht einfach auf eine andere Seite verweisen, da daß nicht wirklich sicher ist. Auf die zweite Seite könnte dann schließlich auch jemand zugreifen, der sich nicht eingeloggt hat.
Passwort und Username solltest Du schon auf jeder Seite überprüfen.
Wenn es sich hier nur um eine einzige Seite handelt, dann kannst Du den html-Code ja einfach in der else-Anweisung ausgeben und fertig.
Wenn es sich um mehrere Seiten handelt, also eine ganze Site, die nür für registrierte Benutzer zugänglich sein soll, dann solltest Du mit Sessions arbeiten.
Schau dazu mal in das php-Manual ( http://de.php.net ) bzw. unter http://www.phpbuilder.com - die müßten dazu auch Artikel haben.
In dem Fall speicherst Du auf der Login seite nach positiver Überprüfung der Login-Daten, diese einfach in der Session ab - in etwa so:
$_SESSION[‚username‘] = $_REQUEST[‚username‘];
$_SESSION[‚pwd‘] = $_REQUEST[‚pwd‘];
Auf allen folgenden Seiten fragst Du dann ab, ob diese Daten schon in der Session gespeichert worden sind:
if(!isset($_SESSION[‚username‘])){
//User nicht eingeloggt -> Login anzeigen
}
else{
//Alles o.k. Eigendlichen Inhalt anzeigen.
}
Am Besten packst Du das ganze dann in eine php-Klasse oder einfach in eine php-Datei, die Du dann auf jeder Seite einbinden kannst.
else
es sind 2 if - abfragen. hab leider den code aus platzgruende
unuebersichtlich reinkopiert
Ups, da hab ich wohl nicht genau genug hingeschaut…
Gruß
Patrick
Hi Patrik,
danke für den tip. Ich hab logins schon in jsp und csp gebastelt. dabei haben wir uns natuerlich auch beim einloggen den userid gemerkt. Der unterschied war, „bei jsp war es https und bei csp private“, das wir die session nur einmalig beim login gesetzt haben und sie die ganze session-time gültig war ( kein bookmark etc. ) Muss ich echt bei php in jeder seite danach abfragen ob die aktuelle this-session = eingeloggte user?
gruss ming
Hi Patrik,
Hi!
Ich weiß nicht, ob ich Dich jetzt richtig verstanden haben, aber irgendein Kriterium mußt Du immer auf jeder Seite kontrollieren, um Deine Seiten abzusichern.
Html ist nunmal ein zustandsloses Protokoll.
Es kommt auch ganz darauf an, wie stark Du die Inhalte absichern willst.
In vielen Fällen fragt man z.B. nicht nur den Usernamen ab, sondern merkt sich zusätzlich auch noch beim Login die IP des Users und fragt diese mit ab.
Schau Dir dazu mal folgenden Artikel an:
http://www.it-sec.de/index/inhalt/lab_postbank/
Gruß
Patrick
danke für den tip. Ich hab logins schon in jsp und csp
gebastelt. dabei haben wir uns natuerlich auch beim einloggen
den userid gemerkt. Der unterschied war, „bei jsp war es https
und bei csp private“, das wir die session nur einmalig beim
login gesetzt haben und sie die ganze session-time gültig war
( kein bookmark etc. ) Muss ich echt bei php in jeder seite
danach abfragen ob die aktuelle this-session = eingeloggte
user?
gruss ming