Проверьте, существует ли имя пользователя при обновлении имени пользователя - PullRequest
0 голосов
/ 01 сентября 2018

В этой ситуации есть форма, используемая для обновления информации о пользователе (имя пользователя, пароль, номер мобильного телефона и т. Д.).

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

string sql = "SELECT username FROM (SELECT username FROM useraccount WHERE username != @old_uname)ua WHERE BINARY username = @new_uname LIMIT 1;";
MySqlCommand cmd = new MySqlCommand(sql, SecurityMod.dbconn());
cmd.Parameters.AddWithValue("@old_uname", old_uname);
cmd.Parameters.AddWithValue("@new_uname", new_uname);

if (cmd.ExecuteScalar() == null)
{
    isValidNewUname = true;
}

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

1 Ответ

0 голосов
/ 01 сентября 2018

Вместо того, чтобы основываться на извлеченном имени пользователя, я выбрал вместо этого uid. Я решил проблему с помощью следующего кода:

string sql = "SELECT uid FROM useraccount WHERE BINARY username = @new_uname;";
                MySqlCommand cmd = new MySqlCommand(sql, SecurityMod.dbconn());
                cmd.Parameters.AddWithValue("@new_uname", new_uname);
                if (cmd.ExecuteScalar() == null || cmd.ExecuteScalar().ToString() == userID)
                {
                    isValidNewUname = true;
                }

Этот код короче и проще, поэтому его легче поддерживать. Здесь происходит то, что запрос ищет идентификатор базы данных @new_uname в базе данных. Затем он сравнивает извлеченный uid с uid текущего пользователя. Если это то же самое, это означает, что выбранным результатом запроса является просто сам пользователь, поэтому не имеет значения, совпадают они или нет, поскольку он принадлежит только одному пользователю. Если извлеченный uid не равен uid текущего пользователя, это означает, что введенное пользователем имя пользователя уже занято, поэтому isValidNewUname будет иметь значение false. Если приведенный выше запрос не возвращает результаты, тогда @new_uname доступно, так как у него нет записи в базе данных.

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