Question

В общем, сделал авторизацию по известному уроку, отлично работает, проверка пароля имеется, если ввел пароль верно - перекидывает на другой диалог (DLG_CODE).

В моде еще решил реализовать систему кода безопасности, ну думаю это полезно - да. Но возникла проблема с проверкой этого самого кода (Он вообще вводиться при регистрации и успешно сохраняется в базу - в этом проблем нет.)
На моменте когда ввел пароль и он успешный, перекидывает на диалог с кодом, там тоже пару проверок, но , когда вводишь `любой`, то он является не верным, так-же как и точно верный код из базы.

Могу предположить, что неправильно получаю информацию из самой базы данных, ну или налажал с диалогом при вводе кода (Авторизации).

ЗАРАНЕЕ: Для меня намного удобнее писать код в одну строчку, я получаю от этого эстетическое удовольствие :steep:

DIALOG: (При переносе мог потерять } )

                case DLG_CODE:
        {
                if(!response)
                {
                                SPD(playerid, 10000, DIALOG_STYLE_MSGBOX, "{FFFFFF}Авторизация | Отмена авторизации.""{FFFFFF}Дальнейшая игра невозможна, из-за того, что вы отказались от процедуры авторизации.\n\n{FFFFFF}Воспользуйтесь командой {5A78E7}/q{FFFFFF}, чтобы выйти из игры.""Хорошо""");
                                        return Kick(playerid);
                }
                if(!strlen(inputtext))
                {
                                        ShowCode(playerid);
                                        return SCM(playerid, C_WHITE, "[{5A78E7}#{FFFFFF}] Для продолжения игры на сервере, введите пароль в поле ниже и нажмите Далее.");
                                }
                                for(new i = strlen(inputtext)-1; i != -1; i--)
                {
                        switch(inputtext[i])
                        {
                                case '0'..'9'continue;
                                defaultreturn SPD(playerid, DLG_CODE, DIALOG_STYLE_INPUT, "Авторизация | Код безопасности","{FFFFFF}Введите код безопасности, который вы указали при регистрации для входа на аккаунт.\n\nМы следим за безопасностью ваших аккаунтов из-за чего и требуем ввести данный код.\nКод безопасности состоит только из {5A78E7}чисел{FFFFFF} и его максимальный размер {5A78E7}4 символа{FFFFFF}.","Далее","Отмена");
                        }
                }
                if(!strcmp(pInfo[playerid][pCode], inputtext))
                {
                        new query_string[49+MAX_PLAYER_NAME];
                        format(query_string, sizeof(query_string), "SELECT * FROM `accounts` WHERE `pName` = '%s'", pInfo[playerid][pName]);
                        mysql_tquery(tikwqq, query_string, "PlayerLogin","i", playerid);
                }
                else
                {
                        SCM(playerid, C_WHITE, "Введенный вами пароль не верный, повторите свою попытку или воспользуйтесь командой {5A78E7}/q{FFFFFF}, чтобы выйти из игры.");
                                        ShowCode(playerid);
                }

MYSQL_LOG

[20:44:42] [WARNING] mysql_connect: no password specified
[20:44:50] [INFO] changed log level from 'warning, error' to 'debug, info, warning, error'
[20:44:50] [DEBUG] mysql_set_charset("cp1251"1)
[20:44:50] [DEBUG] CHandle::SetCharacterSet(this=0x752c78, charset='cp1251')
[20:44:50] [DEBUG] CConnection::SetCharset(charset='cp1251'this=0x74cf88, connection=0x762130)
[20:44:50] [DEBUG] CConnection::SetCharset(charset='cp1251'this=0x38f9020, connection=0x76e468)
[20:44:50] [DEBUG] CConnectionPool::SetCharset(charset='cp1251'this=0x74c488)
[20:44:50] [DEBUG] CConnection::SetCharset(charset='cp1251'this=0x3a84020, connection=0x7779c0)
[20:44:50] [DEBUG] CConnection::SetCharset(charset='cp1251'this=0x3c5b020, connection=0x781720)
[20:44:50] [DEBUG] mysql_set_charset: return value: '1'
[20:44:54] [DEBUG] mysql_tquery(1"SELECT * FROM `accounts` WHERE `pName` = 'tikwqq'""CheckAccounts""i")
[20:44:54] [DEBUG] CCallback::Create(amx=0x2a387a8, name='CheckAccounts', format='i', params=0x37edc1c, param_offset=5)
[20:44:54] [DEBUG] CCallback::Create - callback index for 'CheckAccounts'0
[20:44:54] [DEBUG] processing specifier 'i' with parameter index 0
[20:44:54] [DEBUG] retrieved and pushed value '0'
[20:44:54] [INFO] Callback 'CheckAccounts' set up for delayed execution.
[20:44:54] [DEBUG] created delayed callback with 1 parameter
[20:44:54] [DEBUG] CHandle::Execute(this=0x752c78, type=1, query=0x75b090)
[20:44:54] [DEBUG] CHandle::Execute - return value: true
[20:44:54] [DEBUG] mysql_tquery: return value: '1'
[20:44:54] [DEBUG] CConnection::Execute(query=0x75b090this=0x38f9020, connection=0x76e468)
[20:44:54] [DEBUG] CQuery::Execute(this=0x75b090, connection=0x76e468)
[20:44:54] [INFO] query "SELECT * FROM `accounts` WHERE `pName` = 'tikwqq'" successfully executed within 0.278 milliseconds
[20:44:54] [DEBUG] CResultSet::Create(connection=0x76e468, query_str='SELECT * FROM `accounts` WHERE `pName` = 'tikwqq'')
[20:44:54] [DEBUG] created new resultset '0x791170'
[20:44:54] [DEBUG] fetched MySQL result '0x75b888'
[20:44:54] [DEBUG] allocated 116 bytes for PAWN result
[20:44:54] [DEBUG] CCallback::Execute(amx=0x2a387a8, index=0, num_params=1)
[20:44:54] [INFO] Executing callback 'CheckAccounts' with 1 parameter...
[20:44:54] [DEBUG] processing internal specifier 'c'
[20:44:54] [DEBUG] pushed value '0' onto AMX stack
[20:44:54] [DEBUG] executing AMX callback with index '0'
[20:44:54] [DEBUG] cache_get_row_count(0x037EDDE8)
[20:44:54] [DEBUG] cache_get_row_count: return value: '1'
[20:44:54] [DEBUG] cache_get_value_name(0"pID"0x037482301)
[20:44:54] [DEBUG] cache_get_value_name: assigned value: '1'
[20:44:54] [DEBUG] cache_get_value_name: return value: '1'
[20:44:54] [DEBUG] cache_get_value_name(0"pPassword"0x0374829432)
[20:44:54] [DEBUG] cache_get_value_name: assigned value: 'qwerty123'
[20:44:54] [DEBUG] cache_get_value_name: return value: '1'
[20:44:54] [DEBUG] cache_get_value_name_int(0"pCode"0x0374841C)
[20:44:54] [DEBUG] cache_get_value_name_int: assigned value'1234'
[20:44:54] [DEBUG] cache_get_value_name_int: return value: '1'
[20:44:54] [DEBUG] AMX callback executed with error '0'
[20:44:54] [INFO] Callback successfully executed.

CODE PlayerLogin:

 
forward PlayerLogin(playerid);
public PlayerLogin(playerid)
{
        new rows;
        cache_get_row_count(rows);
        if(rows)
        {
                cache_get_value_name_int(0"pID", pInfo[playerid][pID]);
                cache_get_value_name(0"pName", pInfo[playerid][pName]);
                cache_get_value_name(0"pPassword", pInfo[playerid][pPassword], 32);
                cache_get_value_name(0"pMail", pInfo[playerid][pMail], 64);
                cache_get_value_name_int(0"pSex", pInfo[playerid][pSex]);
                cache_get_value_name_int(0"pSkin", pInfo[playerid][pSkin]);
                
                cache_get_value_name_int(0"pCode", pInfo[playerid][pCode]);
                
                cache_get_value_name(0"pPassport", pInfo[playerid][pPassport]);
                cache_get_value_name(0"pReg_data", pInfo[playerid][pReg_data], 12);
                cache_get_value_name(0"pReg_ip", pInfo[playerid][pReg_ip], 15);

                TogglePlayerSpectating(playerid, 0);
            SetPVarInt(playerid, "logged"1);
            SetSpawnInfo(playerid, 000000000000);
            SpawnPlayer(playerid);
        }
        return 1;
}

 

Share this post


Link to post

1 answer to this question

  • -1

Ответ был найден (не мой, никогда не присуждаю не свое).

 

Решение:

Цитата

У тебя переменная pCode объявлена как Integer(Int), а проверяешь ты ее в DLG_CODE как строку, попробуй строку

 

if(!strcmp(pInfo[playerid][pCode], inputtext))

заменить на

 

if(pInfo[playerid][pCode] == strval(inputtext))

 

 

Заметка от keyl , создано

2.8. Если вы нашли ответ на свой вопрос, рекомендуется поощрить автора лучшего ответа поднятием репутации, а также обязательно пометить ответ на вопрос лучшим. Как пометить ответ лучшим?

Устное предупреждение.

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
Followers 0