Loginproblem mit Groß- und Kleinschreibung

Kurt Cobain

Erfahrenes Mitglied
TAg TAg

Also ich hab ne Loginseite. Die Werte werden übergeben, und dann so verarbeitet:
PHP:
$user = $_POST['username'];
$password = $_POST['password'];
$md5 =  md5($password);
$time = time();


$abfrage = "SELECT * FROM account WHERE nick='$user' AND passwordmd5 ='$md5'  Limit 1";
$ergebnis = mysql_query($abfrage) or die (mysql_error());

            while($row = mysql_fetch_object($ergebnis))
            {
                        // Sessionvariablen erstellen und registrieren
                    $_SESSION['user'] = $row['nick'];

            }

Soweit so gut. alles klapt.

Jetzt nehmen wir mal an, dass sich einer mit dem Usernamen horst registriert hat(horst ist kleingeschrieben).

Nun loggter sich ein, in das Formularfeld Username hat er HORST eingegeben.

Er wird ganz normal eingeloggt, aber wenn ich jetzt $_SESSION['user'] ausgebe, bekomme ich HORST(großgeschrieben) anstatt horst(kleingeschrieben)

Was muss ich ändern, dass $_SESSION['user'] immer genau den Wert annimmt, der in der Tabelle steht(also in dem fall horst kleingeschrieben)

gruß ich
 
Zuletzt bearbeitet:
Würd einfach den eingegebenen Usernamen vor der Abfrage komplett in Kleinbuchstaben umwandeln mit strtolower().

Die Usernamen in der DB würd ich dann auch generell kleion speichern, dann sollte es keine Probleme geben!

Kannst ja die Fuinktion strtolower() auch bei der Userregistrierung verwenden.
 
Gumbo hats schon richtig formuliert...
String umwandeln ist hier nicht die Lösung wenns klein drin sthet in der Tabelle muss es auch klein ausgegeben werden.
Wieso hast du in deiner Abfrage .... nick = '$user' .... und versuchst aber dann in die Session $row['user'] einzufügen?! Sollte da nicht eher $row['nick'] stehen?!
 
Hallo!

Das Problem ist, dass MySQL nicht Case Sensitive arbeitet:
Code:
mysql> SELECT * FROM `user_database` WHERE `username`='test';
+----+----------+----------+---------+-----------+-------------+
| id | username | password | user_id | table     | user_status |
+----+----------+----------+---------+-----------+-------------+
|  1 | test     | test     | foo     | eintraege |           0 |
|  3 | TEST     | bla      | blub    | eintraege |           0 |
+----+----------+----------+---------+-----------+-------------+
2 rows in set (0.00 sec)
 
mysql> SELECT * FROM `user_database` WHERE `username`='TEST';
+----+----------+----------+---------+-----------+-------------+
| id | username | password | user_id | table     | user_status |
+----+----------+----------+---------+-----------+-------------+
|  1 | test     | test     | foo     | eintraege |           0 |
|  3 | TEST     | bla      | blub    | eintraege |           0 |
+----+----------+----------+---------+-----------+-------------+
2 rows in set (0.01 sec)
Evtl. kann da ja mal einer von den Datenbankspezialisten etwas dazu sagen.

Gruss Dr Dau
 
Aba das hat doch jetzt weniger mit der "Case Sensitiv" zu tun er hat den Namen ja nur 1 mal in der DB und des weiteren wird das PW noch mit verglichen was zu 99% ausgrenzt selbst bei doppelten Einträgen (Was man ja auf jeden Fall vermeiden sollte) der falsche Namen ausgegeben wird.
Die Vermutung liegt nahe das er einfach nur die falsche Spalte nimmt zum übertragen des Wertes da er in der Abfrage zum Vergleich die Spalte "nick" benutzt und später um den Namen in die Session zu speichern die Spalte "user" benutzt und es wäre sehr unsinnig den Nick/Namen 2 mal in einer Tabelle abzuspeichern.
 
Ob es die Spalte "user" in seiner Tabelle gibt oder nicht, geht aus seinem Posting nicht hervor.
Ich speicher bei mir in der Session auch eine andere Spalte als die, die ich beim Login abfrage.
Ob es nun also $row['user'] oder $row'[nick'] heissen muss, kann man pauschal nicht beantworten..... oder kennst Du seine Tabelle und deren Inhalt?
Eigentlich müsste er sich sogar als z.b. "HoRsT" einlogen können.
Wenn es nun einen "horst" und einen "HORST" gibt und beide das gleiche Passwort haben (weil zufällig der Name ihres Wellensittichs "Hansi" lautet ;) ), dann wird beim Login immer der User mit der niedrigsten ID benutzt..... egal ob die User ihren Namen nun gross, klein oder gar gemischt schreiben.
Ob es nun Sinn macht Namen in verschiedenen Schreibweisen zu erlauben oder nicht, kann man sich drüber streiten (wo steht in seinem Thread eigentlich dass es "HORST" nicht gibt?! ;) )
 
tag tag

Also zu den Spalten nick und user: ich hab es nur falsch aus meiner Seite kopiert.

oben hab ich's jetzt umgeändert. Es hat also nichts damit zu tun, dass ich die falsche mySQL Reihe ausgebe.

Zu meinem Problem:
Ich geh mal davon aus, dass ihr bei ebay angemeldet seid. ihr habt also einen Usernamen.
Wenn ihr euch nun einloggt, seht ja oben immer Hallo dein username(5).

egal wie ihr euch einloggt(großgeschrieben, kleingeschrieben oder gemischt) es steht immer der gleiche Username da, also wegen der groß und kleinschreibung mein ich.

wie krig ich das auch so hin, dass der username immer so ausgegeben wied, wie man sich registriert hat

gruß ich
 
Tag tAg

Ich weiß jetzt die lösung:

PHP:
     $_SESSION['user'] = $row['nick'];

muss

PHP:
     $_SESSION['user'] = $row->nick;

sein.

weiß zwar nicht wiso, aber vielleicht kann mirs ja einer erklären

gruß ich
 
Für mich lässt sich das Problem nicht reproduzieren.
Allerdings nutze ich auch mysql_fetch_array() und nicht mysql_fetch_object()..... lässt sich bei mir auch nicht ohne weiteres ändern, daher kann ich auch nicht sagen ob es daran liegen könnte.
An der while()-Schleife (die bei "LIMIT 1" nicht wirklich Sinn macht) liegt es jedenfalls nicht.
 
Zurück