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

0

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

  • полная форма регистрации
  • проверить, существует ли имя пользователя - reject/pass
  • копировать данные в временную таблицу пользователей, отправлять подтверждение по электронной почте
  • при использовании ссылки в электронном подтверждении, скопируйте данные из temp в таблицу активных пользователей

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

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

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

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

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

SELECT username FROM user_basic_data WHERE username='$cleanTempUsername'

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

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

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

Капитализация важна для многих пользователей, так что мое исправление наименьшего сопротивления здесь?

Теги:
case-sensitive

3 ответа

0

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

0

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

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

  • 0
    Повлияет ли изменение сортировки на мои данные? Или это не совсем уверенный, проверяющий и проверяющий вещи?
  • 0
    Он должен автоматически преобразовывать данные в новое сопоставление, не изменяя его. Единственный раз, когда вы столкнетесь с проблемами, это если вы переключитесь с чувствительного к регистру на нечувствительного.
0

если вы хотите, чтобы регистрационные имена, зависящие от регистра, использовали тип данных 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');

Ещё вопросы

Сообщество Overcoder
Наверх
Меню