[PHP/MySQL] Login
-
ich würde unix-tom's methode vorziehen. aus sicherheitsgründen ist es meines erachtens bei anmeldungen jeder art übrigens besser, bei einem fehler nur ein "login incorrect" (o.ä.) auszugeben, statt detailliert: falscher nutzer oder falsches passwort. z.b. in diesem forum ist benutzername nicht umbedingt angezeigter name -> wenn dich jemand hacken will, hat ers mit der 2. ausgabe leichter
-
hey Leute, thx für die Hilfe
-
Hi!
@Korbinian:
Dann würde ich den PrimaryKey auch für das Feld password setzten sonst dauert das bei vielen Einträgen viel zu lange.Außderdem hast du den Nachteil, dass du nicht testen kannst, ob der User überhaupt Exitstiert. UNd das ist oft schlecht.
Wenn zb. Jemand sich vor langer Zeit sich bei einem Service angemeldet hat und nicht mehr weiß ob er sich angemeldet hat, kann er nicht einmal schaune, ob sein Benutzername in der Datenbank vorhanden ist, da du ja nur "RICHTIG" bzw. "FALSCH" zurück geben kannst.
Aus diesen Gründen finde ich meine Lösung besser.
Aber das empfindet jeder anders.Bye
-
@Cenetix: bei deiner Lösung zeigt der, wenn der Login korrekt, ist alles richtig an, auch wenn das PW falsch ist, aber wenn der Name falsch ist zeigt der nix an...
[ Dieser Beitrag wurde am 23.04.2003 um 23:37 Uhr von MasterDeath editiert. ]
-
Ich dachte das soll ein login. Von einem bestimmten User von einer Liste einzuloggen. Und wenn ein Benutzername nicht Existiert muss er doch auch nicht das Password überprüfen oder nicht ?
Und wie ich schon als BSP erwähnt habe ist es normal, dass eine Login-Routine dem User mitteilen sollte ob jetzt das Password falsch ist und der Benutzername nicht bekannt ist.
UNd genau das macht meine Login-Routine.
Bye
-
eingabe_name'";
Gleicher Fehler wie MasterDeath.
Warum wollt ihr Felder abfragen die nicht nötig sind.
Insebsonders im WEB sollte man dies unterlassen da man auch damit rechnen muss, daß 1000de USER gleichzeit diese Abfrage machen.
Und jetzt kann man sich ausrechen wieviel Rechenzeit man verschenkt hat.
-
also du meinst:
$sql="SELECT name AND passwort FORM user WHERE name='$name'";
hab ich das richtig verstanden?
-
Wenn dann
$sql="SELECT name, passwort FORM user WHERE name='$name'";
eigentlich sollte aber auch
$sql="SELECT passwort FORM user WHERE name='$name'";
reichen, oder?
-
nee, das 2.te tut's nicht und das erste auch nicht... wieso kommt bei mir nichts,wenn ich einen falschen benutzernamen eingebe? so sieht mein script aus:
<?php $db = mysql_connect(); $sql="SELECT name, passwort FROM user WHERE name='$name'"; $res=mysql_query($sql, $db); while ($ligne = mysql_fetch_object ($res)) { if ($name == $ligne->name) { if ($passwort == $ligne->passwort) { print ("Sie sind eingeloggt!<br><br><a href=forum.php>Zum Forum</a>"); break; } else { print ("Passwort falsch!<br><br><a href=login.htm>Zurück</a>"); break; } } else { print ("Benutzer existiert nicht...<br><br><a href=login.htm>Zurück</a> )"; } } ?>
[ Dieser Beitrag wurde am 24.04.2003 um 13:37 Uhr von MasterDeath editiert. ]
-
Warum nicht
-
du kriegst bei einem falschen namen natürlich nichts, da du ja einen datensatz abfragst, der nicht existiert... (WHERE user='irgewas')
-
Wenn du keinen Datensatz zurückgeliefert bekommst (weil der Username falsch ist) kommst du gar nicht in deine while Schleife!
-> 1. Überprüfe einfach zuerst mit mysql_num_rows, ob du ein Ergebnis hast
-> 2. "SELECT passwort FROM user WHERE name='name'" reciht aus! -\> 3\. if (name == $ligne->name) kannst du dir sparen (ist ja schon im SQL-Befehl). Um zu überprüfen, ob der User vorhanden ist (siehe 1.)
-
ich hab einfach eine 2. if-Abfrage eingebaut:
<?php $db = mysql_connect(); $sql="SELECT name, passwort FROM user WHERE name='$name'"; $res=mysql_query($sql, $db); $weiter=1; while ($ligne = mysql_fetch_object ($res)) { if ($name == $ligne->name) { if ($passwort == $ligne->passwort) { print ("Sie sind eingeloggt!<br><br><a href=forum.php>Zum Forum</a>"); $weiter=0; break; } else { print ("Passwort falsch!<br><br><a href=login.htm>Zurück</a>"); $weiter=0; break; } } } if ($weiter == 1) { print ("Benutzername existiert nicht!<br><br><a href=login.htm>Zurück</a>"); } ?>
Das funzt jetzt auch
-
Warum nur so kompliziert
aber wenn du nicht auf mich hören willst
-
weil ich das noch nicht so ganz kappiere, wie kann ich mit mysql_num_rows überprüfen, ob ich ein Ergebnis hab?
-
<?php $db = mysql_connect(); $sql="SELECT passwort FROM user WHERE name='$name'"; $res=mysql_query($sql, $db); if($user = mysql_fetch_row($res)) { if ($passwort == $user[0]) { print ("Sie sind eingeloggt!<br><br><a href=forum.php>Zum Forum</a>"); } else { print ("Passwort falsch!<br><br><a href=login.htm>Zurück</a>"); } } else { print ("Benutzername existiert nicht!<br><br><a href=login.htm>Zurück</a>"); } ?>
Ich hab gerade gesehen, dass man sich sogar das mysql_num_rows sparen kann
-
ok, das funktioniert, aber kannst du mir das mit $user... mal erklären? Und wie kann ich die Variablen an forum.php übergeben?
[ Dieser Beitrag wurde am 24.04.2003 um 14:38 Uhr von MasterDeath editiert. ]
-
@Unix-Tom:
Ok, an die Optimierung hab ich jetzt nicht gedacht.@MasterDeath:
Mit mysql_fetch_row wird der Inhalt der gewünschten Zeile in ein Array gespeichert. Und da wird nur das Feld password auslesen"SELECT password ... "
enthält die Variable $user nur im Index 0 einen Wert, den Wert vom Feld password => $user[0].
und in $password wird dann das password gespeichert, für den Test.
Ich hoffe du hast es einigermaßen verstanden.
Bye
[ Dieser Beitrag wurde am 24.04.2003 um 14:52 Uhr von Cenetix editiert. ]
-
kannst du mir das mit $user... mal erklären?
Ich habe deine Variable $ligne eben umbenannt! mysql_fetch_row liefert im Erfolgsfall ein indiziertes Array zurück und falls kein Datensatz vorhanden ist FALSE -> du kannst es gleich für die if-Bedingung verwenden
Und wie kann ich die Variablen an forum.php übergeben??
Entweder direkt über die URI forum.php?name=bla&password=foo oder du erstellst ein Formular mit action="forum.php" und method="post". Du solltest allerding in forum.php nicht mit $name und $password darauf zugreifen, sondern über $_GET['name'] und $_GET['password'] (falls du PHP > 4.1.0 hast).
Falls du dein Formular per method="post" verschickst greifst du über das $_POST-Array auf die Variablen zu. Du kannst aber auch in beiden Fällen $_REQUEST verwenden.Ich hoffe, ich konnte dir weiterhelfen
-
Original erstellt von Cenetix:
@Unix-Tom:
Ok, an die Optimierung hab ich jetzt nicht gedacht.Dies sind im Web GRUNDLAGEN die man nicht übersehen darf.
Ich wollte eigentlich nur die Abfrage in diesem thread nicht weiterführen lassen sonst macht er zum Schluss wieder ein SELECT *