Реализовать доступность имени пользователя с помощью PHP, MySQL и Ajax, если два пользователя обрабатывают проверку одновременно.

У меня есть таблица groups с некоторыми полями, включая username.
На моей странице формы я использовал вызов Ajax для проверки доступности имени пользователя. Оно работает. Но если два пользователя обрабатывают проверку одновременно, они оба увидят, что имя пользователя доступно. Как я могу этого избежать?


person fighter    schedule 07.01.2016    source источник
comment
На самом деле имя пользователя доступно до тех пор, пока кто-то не обработает запрос на получение этого имени пользователя. Нет особого смысла сообщать только одному пользователю, что имя пользователя свободно, поскольку они могут не выбирать это имя пользователя. Я полагаю, вы могли бы просто установить его как «зарезервированное» имя пользователя на определенное время, используя таблицу в своей БД, но действительно ли оно того стоит?   -  person Matt    schedule 07.01.2016
comment
перед вставкой проверьте имя пользователя. Если пользователь один помогает, то показывает сообщение второму пользователю, что он был использован, попробуйте другой   -  person Muhammad Atif    schedule 07.01.2016
comment
@Matt, да… оно того стоит. Иначе он вернет ошибку ограничения целостности: повторяющаяся запись ключа. Я не могу перенаправить на какую-либо другую страницу, если произойдет эта ошибка. Так что требуется правильный поток данных.   -  person fighter    schedule 07.01.2016


Ответы (1)


Вам нужно проверять имя пользователя при каждом нажатии клавиши. Поэтому, когда кто-то начинает вводить имя пользователя, при каждом нажатии клавиши вам нужно проверять доступность имени пользователя (используя ajax). Событие нажатия клавиши, которое вы можете получить с помощью jQuery .keypress().

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

person gagan mahatma    schedule 07.01.2016