PDA

Просмотр полной версии : [Вопрос] Ошибка с паролем



Dima_Tushin
10.08.2016, 13:26
Добрый день делаю сервер и столкнулся с проблемой с вводом пароля вводишь любой пароль от любово аккаунта и ты ввошел даже если пароль не правильный все ровно войдешь. Помогите пжл

Код:

public OnPlayerConnect(playerid)


format(mysql_logs, sizeof(mysql_logs), "SELECT `pName` FROM `akk` WHERE `pName` = '%s'", PlayerInfo[playerid][pName]);
mysql_function_query(MYSQL, mysql_logs, true, "OnPlayerRegistr", "i", playerid);


public OnPlayerRegistr(playerid, inputtext[])
{
new r, d;
new reg[190+MAX_PLAYER_NAME-2];
cache_get_data(r, d);
TogglePlayerControllable(playerid, false);
SendClientMessage(playerid, COLOR_YELLOW, "Добро пожаловать на Role Play сервер");
if(r)
{
format(reg, sizeof(reg), "{C5C5C5}_____________________________________\n\nДобро пожаловать на RolePlay сервер\n\nВаш аккаунт зарегистрирован\n\nЛогин: {00FF08}%s{C5C5C5}\nВведите пароль:\n\n_____________________________________", PlayerInfo[playerid][pName]);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Авторизация", reg, "Готово", "Отмена");
}
else
{
format(reg, sizeof(reg), "{C5C5C5}_____________________________________\n\nДобро пожаловать на RolePlay сервер\n\nРегистрация нового персонажа\n\nЛогин: {FF0000}%s{C5C5C5}\nВведите пароль:\n\n_____________________________________", PlayerInfo[playerid][pName]);
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Регистрация", reg, "Далее", "Отмена");
}
return 1;
}

Dialogи



case 1://Авторизация
{
if(response)
{
if(!strlen(inputtext))
{
new reg[190+MAX_PLAYER_NAME-2];
format(reg, sizeof(reg), "{C5C5C5}_____________________________________\n\nДобро пожаловать на RolePlay сервер\n\nВаш аккаунт зарегистрирован\n\nЛогин: {00FF08}%s{C5C5C5}\nВведите пароль:\n\n_____________________________________", PlayerInfo[playerid][pName]);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Авторизация", reg, "Готово", "Отмена");
return 1;
}
if(strlen(inputtext) < 6 || strlen(inputtext) > 16) return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Ошибка", "Введеный вами пароль слишком коротк\nПароль должен состоять от 6 до 16 символов.\nА так же должен состоять из букв и цифр", "Повторить", "");
for(new i = strlen(inputtext)-1; i != -1; i--)
{
switch(inputtext[i])
{
case '0'..'9', 'а'..'я', 'a'..'z', 'А'..'Я', 'A'..'Z': continue;
default: return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Ошибка", "Введеный вами пароль содержит русские буквы или не допустимые символы.\nПереключите расскладку на клавиатуре и введите еще раз пароль.", "Повтор", "");
}
}
if(!strcmp(PlayerInfo[playerid][pPassword], inputtext))
{
format(mysql_logs, sizeof(mysql_logs), "SELECT * FROM `akk` WHERE `pName` = '%s'", PlayerInfo[playerid][pName]);
mysql_function_query(MYSQL, mysql_logs, false, "OnPlayerLogin", "i", playerid);
}
else
{
switch(GetPVarInt(playerid, "ERRORPASS"))
{
case 0: ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Ошибка", "Вы ввели не правильный пароль.\nОсталось попыток 3", "Повтор", "Отмена");
case 1: ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Ошибка", "Вы ввели не правильный пароль.\nОсталось попыток 2", "Повтор", "Отмена");
case 2: ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Ошибка", "Вы ввели не правильный пароль.\nОсталось попыток 1", "Повтор", "Отмена");
case 3:
{
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Ошибка", "Вы ввели не правильный пароль.\nВы были кикнуты с сервера", "Закрыть", "");
return 1;
}
}
SetPVarInt(playerid, "ERRORPASS", GetPVarInt(playerid, "ERRORPASS") +1);
}
return 1;
}
else
{
SendClientMessage(playerid, COLOR_LIGHTRED, "Для выхода из игры используйте /q(uit)");
SetTimerEx("Kicks", 1000, false, "d", playerid);
return 1;
}
}



forward OnPlayerLogin(playerid);
public OnPlayerLogin(playerid)
{
cache_get_field_content(0, "pPassword", maximum), strmid(PlayerInfo[playerid][pPassword], maximum, 0, strlen(maximum), 20);
cache_get_field_content(0, "pLevel", maximum), PlayerInfo[playerid][pLevel] = strval(maximum);
cache_get_field_content(0, "pJob", maximum), PlayerInfo[playerid][pJob] = strval(maximum);
cache_get_field_content(0, "pSkin", maximum), PlayerInfo[playerid][pSkin] = strval(maximum);
SpawnPlayer(playerid);
return 1;
}
Помогите пжл

Desulaid
10.08.2016, 17:39
Перед авторизацией стоит загружать пароль и только потом сравнивать. А то выходит так, что ты хочешь загрузить пароль после авторизации игрока.

Skull
10.08.2016, 17:43
public OnPlayerRegistr(playerid, inputtext[])
{
new r, d;
new reg[190+MAX_PLAYER_NAME-2];
cache_get_data(r, d);
TogglePlayerControllable(playerid, false);
SendClientMessage(playerid, COLOR_YELLOW, "Добро пожаловать на Role Play сервер");
if(r)
{
format(reg, sizeof(reg), "{C5C5C5}_____________________________________\n\nДобро пожаловать на RolePlay сервер\n\nВаш аккаунт зарегистрирован\n\nЛогин: {00FF08}%s{C5C5C5}\nВведите пароль:\n\n_____________________________________", PlayerInfo[playerid][pName]);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Авторизация", reg, "Готово", "Отмена");
cache_get_field_content(0, "pPassword", maximum), strmid(PlayerInfo[playerid][pPassword], maximum, 0, strlen(maximum), 20);
}
else
{
format(reg, sizeof(reg), "{C5C5C5}_____________________________________\n\nДобро пожаловать на RolePlay сервер\n\nРегистрация нового персонажа\n\nЛогин: {FF0000}%s{C5C5C5}\nВведите пароль:\n\n_____________________________________", PlayerInfo[playerid][pName]);
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Регистрация", reg, "Далее", "Отмена");
}
return 1;
}


forward OnPlayerLogin(playerid);
public OnPlayerLogin(playerid)
{
cache_get_field_content(0, "pLevel", maximum), PlayerInfo[playerid][pLevel] = strval(maximum);
cache_get_field_content(0, "pJob", maximum), PlayerInfo[playerid][pJob] = strval(maximum);
cache_get_field_content(0, "pSkin", maximum), PlayerInfo[playerid][pSkin] = strval(maximum);
SpawnPlayer(playerid);
return 1;
}

Dima_Tushin
12.08.2016, 07:07
Сейчас попробую.

Dima_Tushin
12.08.2016, 16:18
Ошибка выходит.

Skull
12.08.2016, 17:18
Какая ошибка?

- - - Добавлено - - -

Если ругается на maximum, что она не объявлена, так объяви её.

Dima_Tushin
13.08.2016, 10:35
Да причем тут maximum на MysqL ругается

- - - Добавлено - - -

мне кажется можно и по другому сделать!

TheMallard
13.08.2016, 10:50
Вывод компилятора в студию!

Skull
13.08.2016, 12:16
Экстрасенсов тут нет, поэтому может уже скинешь код ошибки.

Dima_Tushin
13.08.2016, 12:34
Авторизация
MYSQL_LOG:


[14:33:29] [WARNING] CMySQLResult::GetRowDataByName - field not found ("pPassword")

vovandolg
13.08.2016, 12:52
Авторизация
MYSQL_LOG:


[14:33:29] [WARNING] CMySQLResult::GetRowDataByName - field not found ("pPassword")

Не найдена колонка с названием pPassword

Dima_Tushin
13.08.2016, 14:28
Все всем спасибо кто помогал решил вопрос сам.

- - - Добавлено - - -


Не найдена колонка с названием pPassword

Просто в запросе надо было дабавить колонку и все. А в базе все обьявлено было!

т.е было так

format(mysql_logs, sizeof(mysql_logs), "SELECT `pName` FROM `akk` WHERE `pName` = '%s'", PlayerInfo[playerid][pName]);
mysql_function_query(MYSQL, mysql_logs, true, "OnPlayerRegistr", "i", playerid);
Стало так

format(mysql_logs, sizeof(mysql_logs), "SELECT `pName`, `pPassword` FROM `akk` WHERE `pName` = '%s'", PlayerInfo[playerid][pName]);
mysql_function_query(MYSQL, mysql_logs, true, "OnPlayerRegistr", "i", playerid);