предотвратить дублирование имен пользователей с нечувствительным к регистру поведением в php / mysql - PullRequest
1 голос
/ 16 марта 2011

На моем сайте имена пользователей сохраняются следующим образом: Роберт , и забавно то, что можно зарегистрироваться с именем Robert (Capital R).

Как бы я мог предотвратить эти как-то дублированные имена пользователей?

Мой проект в mysql / php

  if (mysql_num_rows(mysql_query("SELECT username FROM user_table WHERE username='$username'")) > 0){
    die("duplicated usernames can't be saved , this username exists.");
  }

Даже с этим кодом Роберт может быть зарегистрирован.

Ответы [ 4 ]

3 голосов
/ 16 марта 2011

Вы должны добавить уникальный индекс в столбце имени пользователя.

Также вы можете найти здесь полезную информацию: https://stackoverflow.com/search?q=mysql+case+sensitive

2 голосов
/ 16 марта 2011

Преобразуйте их обоих в один и тот же случай, а затем сравните их.Как таковой:

SELECT username FROM table WHERE LOWER(username) = LOWER('$username')

0 голосов
/ 16 марта 2011

php имеет очень важную функцию, но люди игнорируют ее при запуске strtolower, используйте ее во время

регистрации и запроса, следовательно

  $username = strtolower($username);

с такой проблемой вы никогда не столкнетесь.

0 голосов
/ 16 марта 2011

Надеемся, что вы санировали ввод пользователя для имени пользователя, чтобы предотвратить внедрение SQL, после этого используйте PHP для LC ваших имен пользователей перед проверкой на наличие дубликатов или вставкой имени в базу данных:

$username = strtolower($username);
if (mysql_num_rows(mysql_query("SELECT username FROM user_table WHERE username='$username'")) > 0){
    die("duplicated usernames can't be saved , this username exists.");
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...