в реестре проверьте, существует ли имя пользователя - проблема с заглавными буквами - PullRequest
0 голосов
/ 30 ноября 2010

Моя система регистрации учетной записи homefried работает следующим образом:

  1. заполнить регистрационную форму
  2. проверить, существует ли имя пользователя - отклонить / передать
  3. скопировать данные в таблицу временных пользователей, отправьте электронное письмо с подтверждением
  4. после использования ссылки в электронном письме с подтверждением, скопируйте данные из временной таблицы в таблицу активных пользователей

На днях пользователь отправил мне электронное письмо с просьбой сообщить ему об ошибке "Не удалось создать пользователя. "

Я не мог вспомнить, чтобы когда-либо слышал об этом, поэтому я покопался в своем регистрационном коде, и эта ошибка выскакивает, если не удается выполнить запрос на вставку временных данных в таблицу активных пользователей.

Не удалось, потому что его имя пользователя с уникальным индексом в таблице уже существовало в таблице активных пользователей ... но он прошел первоначальную проверку существующего имени пользователя ...?

Получилосьимя, которое он пытался зарегистрировать, было «Пользователь», но уже был «пользователь», поэтому в игру вступает нечувствительность к регистру.

Существует ли имя пользователя?строка запроса:

SELECT username FROM user_basic_data WHERE username='$cleanTempUsername'

Подтверждено, теперь вставьте в строку активной таблицы:

INSERT INTO user_basic_data (username, ...) VALUES ('$activeUsername', ...)

Таким образом, чувствительность к регистру, очевидно, применяется, когда я запускаю оператор выбора ("Пользователь"! = "user "), но не применяется, когда я запускаю вставку.

Использование заглавных букв важно для многих пользователей, так каков здесь мой способ наименьшего сопротивления?

Ответы [ 3 ]

0 голосов
/ 30 ноября 2010

, если вы хотите, чтобы имена пользователей чувствительны к регистру, используйте тип данных varbinary ...

create table users
(
user_id int unsigned not null auto_increment primary key,
username varbinary(32) unique not null,
...
)
engine=innodb;

insert into users (username) values ('foo'),('Foo'),('FOO');
0 голосов
/ 30 ноября 2010

Вы можете сделать php strtolower () или mysql LOWER (), чтобы сделать ввод строчными буквами независимо от ввода. Таким образом, они могут использовать любой регистр, который хотят, но база данных всегда работает с именами пользователей в нижнем регистре. Конечно, это означает, что вы можете иметь только одно имя пользователя с именем «пользователь», но это действительно решает проблему нечувствительности к регистру и позволяет пользователям вводить любой случай, который они хотят, для своего имени пользователя с помощью всего лишь одного изменения. Только не делайте этого с паролем.

0 голосов
/ 30 ноября 2010

Лучшим шагом, вероятно, будет использование сортировки с учетом регистра для ваших таблиц.

Возможно, попробуйте latin1_bin или utf8_bin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...