Моя домашняя система регистрации учетной записи работает следующим образом:
- заполнить регистрационную форму
- проверить, существует ли уже имя пользователя - отклонить/пропустить
- скопировать данные во временную пользовательскую таблицу, отправить электронное письмо с подтверждением
- при использовании ссылки в электронном письме с подтверждением скопируйте данные из временной таблицы в активную пользовательскую таблицу
На днях пользователь написал мне по электронной почте, чтобы сказать, что он получает сообщение об ошибке «Не удалось создать пользователя».
Я не мог припомнить, чтобы когда-либо слышал это, поэтому я копался в своем регистрационном коде, и эта ошибка выскакивает, если запрос на вставку временных данных в активную пользовательскую таблицу терпит неудачу.
Это не удалось, потому что его имя пользователя, имеющее уникальный индекс в таблице, уже существовало в таблице активных пользователей... но он прошел первоначальную проверку существующего имени пользователя...?
Оказалось, что имя, которое он пытался зарегистрировать, было «Пользователь», но «пользователь» уже был, так что в игру вступает нечувствительность к регистру.
Имя пользователя существует? Строка запроса:
SELECT username FROM user_basic_data WHERE username='$cleanTempUsername'
Подтверждено, теперь вставьте в строку активной таблицы:
INSERT INTO user_basic_data (username, ...) VALUES ('$activeUsername', ...)
Таким образом, чувствительность к регистру, по-видимому, применяется, когда я запускаю оператор выбора ("Пользователь" != "пользователь"), но не применяется, когда я запускаю вставку.
Использование заглавных букв важно для многих пользователей, так что же я могу сделать с наименьшим сопротивлением?