Hallo,
ich lese aus meiner Datenbank den Nutzernamen aus, wenn sich jemand einloggen will. Das klappt auch, doch ich möchte, dass man den Usernamen verwenden kann, der exakt in der Datenbank ist. Wenn dort unter Benutzername das steht:
Hans
dann kann ich mich auch so einloggen:
hAnS
Das steht dann bei allen Forenbeiträgen etc. Wie kann ich erzwingen, dass auf Groß- / Kleinschreibung geprüft wird und wirklich nur der Benutzername, der in der DB steht, ausgelesen wird.
Zeig doch mal deine Abfrage her, es gibt verschiedene Möglichkeiten die Werte zu vergleichen.
Edit:
Ändere die Kollation deiner Datenbank von utf8_general_ci auf utf8_bin und bei einem Vergleich mit dem =-Operator sollte die Groß- und Kleinschreibung beachtet werden.
Wenn in der Datenbank da so ist:
ID USERNAME
1 Hans
[php]
<?php
$username = $_POST['username'];
$sql = "select username from users where username = '".mysqli_real_escape_string($username)."'";
$result = mysqli_query($sql);
if ($row = mysqli_fetch_assoc($result)) {
echo $row['username']; // Hans
echo $username; // haNs
}
?>[/php]
Siehst du den Unterschied?
Ansonsten kannst du es so machen:
where md5(username) = md5(‚Hans‘)
Aber das ist nicht wirklich sehr performant ^^
/edit: habe erst jetzt verstanden, dass du es schon beim Login brauchst:
dann musst du
$sql = „select * from users where binary username = '“.$username.„'“;
Soll denn auch zwingend beim login darauf geachtet werden? Oder soll dann einfach nur nicht immer bei den Foreneinträgen usw ein anderer Name stehen (Im Sinne von groß und kleinschreibung)?
Wenn ja würde ich dir raten deine Abfrage so zu gestalten
Select `username` From `users` Where `username` Like 'Hans' And `password` = 'geheim!';
Und dann setzt du wenn etwas gefunden wurde den Session Name über den namen der aus der DB ausgelesen wurde. So hast du es in jedem Falle einheitlich
Also:
[php]
$row = mysql_fetch_array(mysql_query($query_von_oben),2);
if($row) {
$_SESSION[‚username‘] = $row[‚username‘];
}
[/php]
Für Flüchtigkeitsfehler bin ich nicht Verantwortlich Wurde schnell runter geschrieben. Wer nen Fehler findet darf ihn trotzdem gerne sagen
Vielen Dank für eure Antworten. Ich werde es gleich ausprobieren. Es soll beim Login überprüft werden, weil dann der Username in einer Session gespeichert wird und beim Forum verwendet wird. Dann ist der dort auch automatisch richtig.
Sehr schlechte Idee. Das einzige, was du in der Session speichern solltest ist die User-ID, weil der Admin ja den Benutzernamen während der andere eingeloggt ist ändern kann.
Außerdem solltest du generell in anderen Tabellen die User-ID schreiben und nicht den Namen.
Nein? Die Session-Variablen kann man nicht extern modifizieren.
Jedesmal die Daten zu besorgen ist der richtige Weg. Vorallem wenn du mit dem Thema Joins anfängst.