&MYSQL : Anfängerfrage - Wie checken, ob Benutzer eingetragen ist?
bloob
- php
Hi.
Ich habe eine MYSQL-Tabelle "users" erstellt. Momentan habe ich zum Testen dort drei User eingetragen. In der Tabelle sind, logischerweise, die user meines Webapps (ein Board).
Beim Einlogg-Formular wird ein POST-Wert "usr_name" übergeben.
Wie kann ich jetzt überprüfen, ob der user in der Datenbank ist? Mit einer for-Schleife habe ich es schon probiert, doch irgendwie weiß ich ab for(...){ nicht mehr weiter.
Gibt es evtl sogar eine Funktion, die überprüft, ob etwas in einem Feld steht?
Eine andere Möglichkeit wäre, ein Feld in ein Array zu lesen, und dann mit in_array() zu überprüfen, ob der Wert drin ist? Gibt es dazu die Funktion, die ein Feld in ein Array liest?
Danke euch schon mal im Voraus
euer bloob
Hallo,
warum so kompliziert??
SELECT * FROM tabelle WHERE username LIKE '$username';
Wenn diese Anweisung TRUE zurück gibt, wurde min. 1 Eintrag gefunden, sonst gibt es FALSE zurück.
MFG
Andavos
SELECT * FROM tabelle WHERE username LIKE '$username';
Oh, LIKE kannte ich noch nicht. Danke für den Hinweis, werde mal schauen, ob es so funktioniert :-)
Hallo,
natürlich wird es funktionieren ;)
Man kann sonst auch die gefundenen Zeilen überprüfen lassen:
http://www.php-einfach.de/einf_mysql_anzahl_zeilen.php
Was wichtig bei LIKE ist:
1. Zwischen Groß- und Kleinschreibung wird nicht Unterschieden
2. Mit %Wort% kann man auch Teilstücke finden. Mit %davo% wird z.B. auch Andavos gefunden.
Also wenn du _genau_ den Username überprüfen möchtest, dann benutzt man ein Gleichheitszeichen:
SELECT * FROM tabelle WHERE username = '$username';
Das Problem ist, die Usernames Andavos, andavos, AndavoS etc. könnte existieren, was natürlich jmd. Bösartig ausnutzen könnte..
Also doch lieber Like benutzt damit sowas nicht vorkommen kann.
Ein Gleichheitszeichen benutzt man meistens wenn man Zahlen (ID's) Überprüft, oder es wichtig ist, dass der exakte Wert angegeben wurde.
Login
Ein Login wird oft so realisiert:
SELECT * FORM tabelle WHERE username LIKE '$username' AND pw LIKE '$pw'
Was ist wenn jmd. z.B. als Username: % und als pw: % eingibt?
Dann wird mehr als 1 Zeile gefunden => User ist eingelogt.
Darum es lieber so realisieren:
SELECT * FORM tabelle WHERE username LIKE '$username' LIMIT 1;
if($username == $row->username AND $pw == $row->pw)
{
...
}
MFG
Andavos
Hello,
warum so kompliziert??
SELECT * FROM tabelle WHERE username LIKE '$username';
Wenn diese Anweisung TRUE zurück gibt, wurde min. 1 Eintrag gefunden, sonst gibt es FALSE zurück.
Wahrscheinlich hast Du es anders gemeint, aber dieses Select-Statement kann nicht 'true' zurückliefern, sondern liefert eine Resultset. Und dann kann man nach der Anzahl der Ergebnisdatensätze (Zeilen) im Resultset fragen.
Sollte aber das Select-Statement kein Resultset liefern, hat dies nichts direkt mit der gesuchten Datenmenge in den Tabellen zu tun, sondern wahrscheinlich damit, dass das Select-Statement nicht zu deren Struktur passt, also ein ein Fehler bei der Abfrage stattgefunden hat.
$sql = "SELECT id, username FROM tabelle".
" WHERE username LIKE '".mysql_escape_string($username)."'";
$res = mysql_query($sql,$con);
if(($res and mysql_num_rows($res) > 0)
{
## user ist vorhanden
}
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Dank dem Mini-Script von Tom funktioniert es. Dankeschön an alle freiwilligen Helfer :-)
euer bloob