Login-Bereich mit MySQL
Alltimefriend
- php
Hallo!
Folgendes: Ich hab ein Script geschrieben, mit dem man sich durch eingeben verschiedener Daten in meine MySQL-DB einträgt.
Da es sich um eine User-Registrierung handelt, sind natürlich die Felder nick und pwd dabei. Später werd ich das Passwort verschlüsselt eingeben, aber für den Anfang geht es auch so.
Nun zu meinem Problem: Ich hab Probleme beim Login-Verfahren. Und zwar möchte ich, dass er nur dann weitergeleitet wird, wenn nick und pwd in der Datenbank gefunden wurde.
Die Felder im Login-Formular nenne ich user und pass.
Folgende SQL-Abfrage müsste ja u.a. dazugehören:
$query = "SELECT * FROM user WHERE nick='$user' AND pwd='$pass'";
Ich mein, so durchsucht es ja die Datenbank und vergleicht jedes mit der Eingabe. Das Problem ist, dass $query hier den ganzen Satz wiedergibt.
Wie gehört die Zeile umgeändert, dass es mir true oder false in der Variable speichert?
Hoffe, dass mir jemand helfen kann.
Danke im voraus
Gruß, Jan
Folgende SQL-Abfrage müsste ja u.a. dazugehören:
$query = "SELECT * FROM user WHERE nick='$user' AND pwd='$pass'";
Ich mein, so durchsucht es ja die Datenbank und vergleicht jedes mit der Eingabe. Das Problem ist, dass $query hier den ganzen Satz wiedergibt.
Wie gehört die Zeile umgeändert, dass es mir true oder false in der Variable speichert?
$abfrage="SELECT * FROM user WHERE nick='$user' AND pwd='$pass'";
$ergebnis=mysql_query($abfrage,$dbref);
$anzahl=mysql_num_rows($ergebnis);
if($anzahl==1)
{
// User existiert
}
else
{
// User existiert nicht
}
Das SELECT * FROM kann sich natuerlich auch nur auf ein Feld beziehen.
MfG, Thomas
Folgende SQL-Abfrage müsste ja u.a. dazugehören:
$query = "SELECT * FROM user WHERE nick='$user' AND pwd='$pass'";
Besser wäre jedoch:
$query = "SELECT COUNT(*) FROM user WHERE nick='$user' AND pwd='$pass'";
$abfrage="SELECT * FROM user WHERE nick='$user' AND pwd='$pass'";
$ergebnis=mysql_query($abfrage,$dbref);
$anzahl=mysql_num_rows($ergebnis);
if($anzahl==1)
{
// User existiert
}
else
{
// User existiert nicht
}
Somit würde dann der Code so aussehen:
$abfrage="SELECT COUNT(*) FROM user WHERE nick='$user' AND pwd='$pass'";
$ergebnis=mysql_query($abfrage,$dbref);
if($ergebnis)
{
// User existiert
}
else
{
// User existiert nicht
}
lg webmonk
p.s.: IMHO ist COUNT eine elegantere Lösung...
$abfrage="SELECT COUNT(*) FROM user WHERE nick='$user' AND pwd='$pass'";
$ergebnis=mysql_query($abfrage,$dbref);
if($ergebnis)
{
// User existiert
}
else
{
// User existiert nicht
}
Das funktioniert zwar nun mit der Variable nick/user, aber wenn er prüft das Passwort nicht ab :o(
D.h., wenn der User stimmt, geht er auf "User existiert", egal ob das Passwort korrekt ist, oder nicht.
Deshalb hab ich folgendes geschrieben:
$sql = "SELECT COUNT(*) FROM user WHERE nick='$benutzer' AND pwd='$pass'";
$result = mysql_query($sql,$conn);
$number = mysql_num_rows($result);
if($number != 1) {
echo "Benutzer $benutzer existiert nicht";
} else {
if($pwd != $pass) {
echo "Das Passwort wurde falsch eingegeben";
} else {
echo "Benutzer $benutzer korrekt eingeloggt";
}
}
Ich habe eben eine genau Überprüfung im Kopf, er soll nicht einfach prüfen, ob beides stimmt oder nicht ohne zu wissen, welches dann falsch ist.
Da der obere Teil schön zurückgibt, ob der $nick auch wirklich mit $user ident ist, wollte ich das Passwort mit der if-Schleife überprüfen.
Leider kommt immer die Meldung "Undefined variable: pwd in c:\programme\apache group\apache\htdocs\lubf\auth.php on line 10"
Das ist die Zeile mit dem if($pwd !=$pass), doch die Variable wurde doch in der SQL-Abfrage definiert, oder irre ich mich da?
Gruß, ATF
servus,
pwd ist keine php variable sondern ein mysql feld,
du kannst mit mysql_fetch_array aus der antwortzeile
ein array machen.
$arrErgebnis = mysql_fetch_array($result);
und mit $arrErgebnis["pwd"] zb auf das pwd feld zugreifen.
bis dann
FICHTL
Hi!
Nun hab ich diesen Code:
$sql = "SELECT * FROM user WHERE nick='$benutzer' AND pwd='$pass'";
$result = mysql_query($sql,$conn);
$arrErgebnis = mysql_fetch_array($result);
if($arrErgebnis["nick"] != "$benutzer") {
echo "Benutzer $benutzer existiert nicht";
} elseif($arrErgebnis["pwd"] != "$pass"){
echo "Das Passwort ist nicht korrekt.";
} else {
echo "Hallo $benutzer";
}
Doch es scheint so, als ob er nur das Feld "nick" aus der DB holt und "pwd" sein lässt.
Das Script prüft zwar den den Benutzer ab, aber auch mit falschem Passwort werde ich "eingeloggt".
Gruß, ATF
Jetzt bin ich total verwirrt, denn bis jetzt hatte ich überhaupt nur einen User in der Datenbank. Um es besser zu testen, habe ich noch 2 weitere angelegt, doch nur User Nr. 1 wird überhaupt gefunden :(
seas,
$sql = "SELECT * FROM user WHERE nick='$benutzer' AND pwd='$pass'";
$result = mysql_query($sql,$conn);
$arrErgebnis = mysql_fetch_array($result);
if($arrErgebnis["nick"] != "$benutzer") {
echo "Benutzer $benutzer existiert nicht";
} elseif($arrErgebnis["pwd"] != "$pass"){
echo "Das Passwort ist nicht korrekt.";
} else {
echo "Hallo $benutzer";
}
erstens ist das doppelte prüfung denn du bekommst sowieso nur
die benutzer wo nick='$benutzer' UND pwd='$pass' sind, das heißt
es kann gar keinen $arrErgebnis["nick"] != "$benutzer" geben weil
du ja vorher schon sagst das du diese benutzer nicht selectieren
willst.
du möchtest wissen ob nick='$benutzer' ist und ob pwd='$pass'
also ob es den benutzer gibt und ob das passwort richtig ist.
von der security seite her ist das schlecht wenn jemand versucht
einzubrechen dann sagst du ihm ganz klar was er falsch hat.
entweder falscher benutzer oder falsches passwort wenn er also
einen benutzer gefunden hat denn es gibt braucht er nur noch
nach dem passwort suchen. darum habe ich dir die andere lösung
gezeigt.
wenn du das mit pass und nick wirklich so willst mußt du vorher
alle benutzer selectieren und dann mittels if prüfen ungefär so
$sql = "SELECT * FROM user";
$result = mysql_query($sql,$conn);
$arrErgebnis = mysql_fetch_array($result);
if($arrErgebnis["nick"] == "$benutzer") {
if ($arrErgebnis["pwd"] == "$pass") {
echo "Alles klar!!!";
} else {
echo "Passwort falsch.";
}
} else {
echo "Benutzer falsch.";
}
ich hoffe es ist jetzt etwas klarer geworden.
grüße
FICHTL
Ich hatte es ja am Anfang auch komplett mit einer SELECT-Abfrage gemacht, nur ignorierte er mir immer die Passwortsequenz pwd='$pass'.
Jetzt weiß ich auch wieso!
Aus irgendeinem Grund mag PHP keine Variable $pass, ich hab sie in $pw umbenannt und schon klappte es vorzüglich :o)
Gruß, ATF
Folgende SQL-Abfrage müsste ja u.a. dazugehören:
$query = "SELECT * FROM user WHERE nick='$user' AND pwd='$pass'";
Besser wäre jedoch:
$query = "SELECT COUNT(*) FROM user WHERE nick='$user' AND pwd='$pass'";
$abfrage="SELECT * FROM user WHERE nick='$user' AND pwd='$pass'";
$ergebnis=mysql_query($abfrage,$dbref);
$anzahl=mysql_num_rows($ergebnis);
if($anzahl==1)
{
// User existiert
}
else
{
// User existiert nicht
}
Somit würde dann der Code so aussehen:
$abfrage="SELECT COUNT(*) FROM user WHERE nick='$user' AND pwd='$pass'";
$ergebnis=mysql_query($abfrage,$dbref);
if($ergebnis)
{
// User existiert
}
else
{
// User existiert nicht
}
Nicht ganz, weil in $ergebnis nur die Resource-ID steht, deshalb:
$abfrage="SELECT COUNT(*) FROM user WHERE nick='$user' AND pwd='$pass'";
$ergebnis=mysql_query($abfrage,$dbref);
$ausgabe=mysql_fetch_row($ergebnis);
$anzahl=$ausgabe[0];
// usw.
oder mittels
$abfrage="SELECT COUNT(*) AS wert FROM user WHERE nick='$user' AND pwd='$pass'";
$ergebnis=mysql_query($abfrage,$dbref);
$ausgabe=mysql_fetch_array($ergebnis);
$anzahl=$ausgabe[wert];
// usw.
MfG, Thomas
ups, mein fehler, sorry, natürlich hast du vollkommen recht.
lg webmonk
servus,
vielleicht auch mit einer funktion die ein
array mit allen user daten zurück gibt.
function getUser($user,$pass) {
$user = mysql_query($query = "SELECT * FROM user WHERE nick='$user' AND pwd='$pass'");
return mysql_fetch_array($user);
}
Abfrage dann mit:
if ($arrUser = getUser($strInputNick,$strInputPass))
echo "Willkommen ".$arrUser["nick"];
else
echo "Verpiss dich ".$strInputNick;
schöne grüße
FICHTL
verdammtes copy-paste :-)
function getUser($user,$pass) {
$user = mysql_query("SELECT * FROM user WHERE nick='$user' AND pwd='$pass'");
return mysql_fetch_array($user);
}
schöne grüße
FICHTL