PDA

Просмотр полной версии : [Вопрос] Не видит обновлённый пароль.



Wise
06.02.2016, 17:04
Доброго времени суток.
В общем проблема такая: Игрок может поменять в игре свой пароль при помощи команды /setpass.

if(!strcmp(cmdtext, "/setpass", true))
{
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Изменение пароля", "Введите новый пароль:", "Изменить", "Отмена");
return 1;
}
Пароль в базе данных не сохраняется, так как обновлять его после каждого выхода из игры - неудачная мысль, ну или скорее глупая.
Поэтому, мы обновляем пароль сразу после изменения.

if(dialogid == 1)
{
if(response)
{
if(!strlen(inputtext)) return SendClientMessage(playerid, 0xBF0000FF, "Вы ничего не ввели.");
else if(strlen(inputtext) < 6 || strlen(inputtext) > 20) return SendClientMessage(playerid, 0xBF0000FF, "Пароль не должен содержать менее 6 символов и более 20 символов. ");
new tsql[100];
format(tsql, sizeof(tsql), "UPDATE `accounts` SET `Password` = '%s' WHERE `Nickname` = '%s'", inputtext, nick(playerid));
mysql_function_query(сonnect_base, tsql, false, "", "");
Info[playerid][Password] = strlen(inputtext);
SendClientMessage(playerid, 0xFFFFFFFF, "Вы изменили пароль.");
printf("Пароль: %s", inputtext);
return 1;
}
else return 1;
}
Все проверки работают. В базе новый пароль обновляется успешно.
Но в логах отображается старый пароль. Я пытался использовать strins, но ничего не получилось.
При загрузке аккаунта - всё отображается нормально. А если смотреть по логам, то нет.

BadPawn
06.02.2016, 20:24
Что за логи?

$continue$
06.02.2016, 21:28
const MAX_PLAYER_PASSWORD = 14 // т.к: нельзя меньше 6 и больше 20, получаем 20 - 6 = 14



if(!strcmp(cmdtext, "/setpass", true))
{
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Изменение пароля", "Введите новый пароль:", "Изменить", "Отмена");
return 1;
}



if(dialogid == 1)
{
if(response)
{
if(!strlen(inputtext))
return SendClientMessage(playerid, 0xBF0000FF, "Вы ничего не ввели.");
else if(strlen(inputtext) < 6 || strlen(inputtext) > 20)
return SendClientMessage(playerid, 0xBF0000FF, "Пароль не должен содержать менее 6 символов и более 20 символов. ");
Info[playerid][Password] = "\0";
strins(Info[playerid][Password], inputtext, 0);

static query[] = "UPDATE `accounts` SET `Password` = '%e' WHERE `Nickname` = '%e'";
new fmt_query[sizeof(query) - 4 + MAX_PLAYER_NAME + MAX_PLAYER_PASSWORD + 1];
format(fmt_query, sizeof(fmt_query), query, Info[playerid][Password], nick(playerid));
mysql_function_query(сonnect_base, fmt_query, false, "", "");
SendClientMessage(playerid, 0xFFFFFFFF, "Вы изменили пароль.");
printf("Пароль: %s", Info[playerid][Password]);
return 1;
}
else return 1;
}