Question

tikwqq
Новичок

В общем, сделал авторизацию по известному уроку, отлично работает, проверка пароля имеется, если ввел пароль верно - перекидывает на другой диалог (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
tikwqq
Новичок

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

 

Решение:

Цитата

У тебя переменная 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
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Elvis
      By Elvis
      Идёт набор в команду по разработке CRMP-проекта! 
       
      Требуются специалисты на следующие роли:  
      - Технический администратор (1 человек)  
      - Технические разработчики (2 человека)  
      - Внутриигровые разработчики (5 человек)  
       
      Все подробности и условия обсудим лично — пишите руководителю в Telegram - @AntonLegost
    • Jasper231
      By Jasper231
      Идет набор в команду для создания CRMP MOBILE проекта. Нам нужны
      1) Кодеры
      2) Мапперы
      3) Люди которые вообще разбираются в создании серверов
       
      об зарпалте договоримся и об остальном поговорим в вк: @haslyyyim
    • otec
      By otec
      Копия радмира
      ║☑️Название CORVUS CRMP
      ║☑️Сервер у которого есть будущее и будет
      ║☑️Адекватная администрация
      ║☑️Идут наборы в Лидеры, Админы.
      ║☑️Вступайте в Telegram: t.me/corvusgta « Вступай!
      ║☑️Вступайте в ВКонтакте: vk.com/corvus_crmp « Вступай!
      ║☑️Постоянные ПРИЗЫ - МП | Интересный Мод
      ║☑️Все новости - обновления в Telegram и ВКонтакте
      ║☑️Сайт - corvus-crmp.ru
      ║☑️Форум - forum.corvus-crmp.ru
      ║☑️Скачать лаунчер - corvus-crmp.ru
      ║☑️Заходи мы ждем тебя
      ║☑️В случае возможных ошибок пишите сюда:@corvus_help_bot
    • vicegame
      By vicegame
      Доброго времени суток уважаемые форумчане
      Хочу представить наши услуги и цены:
      GTA SAMP от 75руб
      GTA CRMP от 75 руб
      GTA MTA от 120 руб
      Для каждого тарифа неограниченные слоты, оплата только за ресурсы 
      Удобная панель управления и широкий функционал 
      Работаем с 2023 года!
       
      Также имеются БЕСПЛАТНЫЕ тарифы для (ознакомительных целей)
       
      Мощные процессоры Ryzen 5950X (Германия)
       
      Платежная система YooKassa на борту:
      Банковские карты
      SberPay
      TinkoffPay
      Yoomoney

      Ссылка на хостинг: ТЫК