SQL Abfrage unabhängig von Groß- und Kleinschreibung

raven16

Lieutenant
Registriert
Nov. 2008
Beiträge
580
Hi,
ich hab folgende Abfrage:
Code:
SELECT username FROM user WHERE username='".$_POST['username']."' LIMIT 1"

Ich bastel grad an einem Formular für die Regristrierung auf meiner Seite.
Ich möchte, dass der Benutzername nur 1x vergeben ist, d.h. ein Benutzername der komplett klein geschrieben wird, soll sich nicht von einem Namen unterscheiden, der groß geschrieben wird....

wie muss ich meine Abfrage umändern, um nur die Buchstaben zu prüfen jedoch nicht Groß- und Kleinschreibung?

Danke im Vorraus!
 
probiers mal mit 'like'
edit:// also
Code:
SELECT username FROM user WHERE username like '{$_POST['username']}' LIMIT 1"
 
Zuletzt bearbeitet:
ist das gleiche ;)
du musst das über das Charset der Tabelle machen.
Da steht das immer bei ob Case-sensitive oder nicht ;)
 
Je nach Datenbank kann das funktionieren:
Code:
SELECT username FROM user WHERE lower(username)=lower('".$_POST['username']."') LIMIT 1"

Und ich würde mich mal mit dem Thema Sicherheit beschäftigen, der Code schreit geradezu nach SQL-Injection...

Alternativ: Einfach die Benutzer vorher schon (notfalls zusätzlich) in z.B. lowercase in der Datenbank speichern...
 
Zuletzt bearbeitet:
du arbeitest in deiner datenbank einfach nur mit großbuchstaben, jeder name, der geprüft oder geschrieben wird, wird mit UPPER(name) in großbuchstaben umgewandelt
 
Danke für den Vorschlag,

aber so wie ich es ausprobiert hat klappt es nicht.. ich bin leider net so fit in mysql :D
Code:
SELECT username FROM user WHERE username LIKE '".$_POST['username']."' LIMIT 1

also wenn ich quasi max.mustermann eingebe als Benutzernamen, dann erkennt der, dass in der Datenbank schon ein max.mustermann existiert und gibt ne fehlermeldung raus so wie es auch soll

Gebe ich aber Max.Mustermann ein, dann reicht es schon, dass ein Buchstabe groß geschrieben ist und der unterscheidet das von max.mustermann
genau das will ich verhindern
 
Wäre dabei evtl auch noch interessant, welche Version von MySQL überhaupt eingesetzt wird...

Edit: Ah ok, auch bei den alten ist das Verhalten identisch :-)
 
Nicht wirklich, ist schon immer so gewesen. Was interessant oder bessergesagt, hilfreich wäre, wäre das Schema der Tabelle.

Unique beinflusst INSERT's - du kannst nicht zweimal denselben Eintrag haben.
 
Nö, grade getestet, geht auch mit dem UNIQUE schlüsselwort

zeig mal deine CREATE-Anweisung für die Tabelle... Welche MySQL Version?
 
1668mib schrieb:
Haste auch mal den User
x; DROP TABLE user;
probiert? ^^

Besser nicht :D

Und ja ich hab gehört, dass man die funktion mysql_real_escape_string() verwenden sollte, aber ich dachte das reicht, wenn ich das bei der Funktion UPDATE oder INSERT INTO mache
 
Okay merk ich mir ^^

lower wäre eine möglichkeit, ich möchte aber nicht, dass alle datenbankeinträge klein geschrieben werden.

der Benutzername soll so in die Datenbank geschrieben werden, wie der User das wünscht,
ich könnte höchstens 2 spalten machen wo der Benutzername angezeigt wird, den der User sieht und wo der eingetragen wird, der mit der datenbank bei der regristrierung und login verglichen wird...


Meine Serverversion ist (weiß aber nicht ob das die richtige Angabe ist)
Server Version: 5.1.54-0.dotdeb.0
 
Hast du meine Abfrage in #4 gesehen? oO

Das mit den 2 Spalten hatte ich dort übrigens auch angesprochen...

@bu1137 (unter mir): Scheint normal zu sein, dass der TE Beiträge anderer ignoriert...
 
Zuletzt bearbeitet:
Zeig doch mal das Schema/CREATE der Tabelle. Wie gesagt, es dürfte keine Unterscheidung machen.
 
Zurück
Oben