Question

Всем привет! Я пишу своё мод с нуля, и тут у меня возникла проблема с авторизацией. Я не могу сделать проверку на правильность введённого пароля.

        case DLG_LOG:
        {
            if(response)
            {
                //ВОТ ТУТ ДОЛЖНА БЫТЬ ПРОВЕРКА НА ПРАВИЛЬНОСТЬ ПАРОЛЯ
                {
                    static const fmt_query[] = "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'";
                    new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+32)];
                    format(query, sizeof(query), fmt_query, player_info[playerid][PASSWORD]);
                    mysql_tquery(dbHandle, query, "PlayerLogin""i", playerid);
                    SCM(playerid, COLOR_GOLD, "Вы авторизовались!");
                }
                else
                {
                    new string[87];
                    SetPVarInt(playerid, "WrongPassword", GetPVarInt(playerid, "WrongPassword")-1);
                    if(GetPVarInt(playerid, "WrongPassword") > 0)
                    {
                        format(string, sizeof(string), "[Ошибка] {FFFFFF}Вы ввели неверный пароль от аккаунта. У вас осталось %d попыток ввода.", GetPVarInt(playerid, "WrongPassword"));
                        SCM(playerid, COLOR_RED, string);
                    }
                    if(GetPVarInt(playerid, "WrongPassword") == 0)
                    {
                        SCM(playerid, COLOR_RED, "[Ошибка] {FFFFFF} Вы исчерпали лимит попыток ввода и были отключеный от сервера.");
                        SPD(playerid, -10" "" "" """);
                        return Kick(playerid);
                    }
                    ShowLogin(playerid);
                }
            }
            else
            {
                SCM(playerid, COLOR_RED, "Используйте \"/q(uit)\", для выхода из игры");
                SPD(playerid, -10" "" "" """);
                return Kick(playerid);
            }
        }
    }
    return 1;

 

Share this post


Link to post

27 answers to this question

  • 0

@rediska 

if(!strcmp(inputtext, player_Info[playerid][pPassword], false))

Share this post


Link to post
  • 0

@_bogdan_ не нифига

Share this post


Link to post
  • 0

@rediska 

                if(GetPVarInt(playerid, "WrongPassword") == 2return SCM(playerid,COLOR_LIGHTRED," Неверный пароль. Используйте /q для выхода."), Kick(playerid);
                SetPVarInt(playerid, "WrongPassword", GetPVarInt(playerid, "WrongPassword")+1);
                format(QUERY,256"Ваш текст.",3-GetPVarInt(playerid, "WrongPassword"));
                ShowPlayerDialog(playerid,1,DIALOG_STYLE_MSGBOX, "Ошибка!",QUERY, "Повтор""Выйти");

 

Share this post


Link to post
  • 0

@_bogdan_ Это у меня есть. Мне нужна проверка на правильность введённого пароля, вот она:

if(inputtext, player_info[playerid][PASSWORD])

И она не работает, она пропускает любой введёный пароль

 

Код самой авторизации

Спойлер

case DLG_LOG:
        {
            if(response)
            {
                if(inputtext, player_info[playerid][PASSWORD])
                {
                    new query[126];
                    format(query, sizeof query, "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'", player_info[playerid][NAME], player_info[playerid][PASSWORD]);
                    mysql_tquery(dbHandle, query, "PlayerLogin""i", playerid);
                }
                else
                {
                    new string[87];
                    SetPVarInt(playerid, "WrongPassword", GetPVarInt(playerid, "WrongPassword")-1);
                    if(GetPVarInt(playerid, "WrongPassword") > 0)
                    {
                        format(string, sizeof(string), "[Îøèáêà] {FFFFFF}Âû ââåëè íåâåðíûé ïàðîëü îò àêêàóíòà. Ó âàñ îñòàëîñü %d ïîïûòîê ââîäà.", GetPVarInt(playerid, "WrongPassword"));
                        SCM(playerid, COLOR_RED, string);
                    }
                    if(GetPVarInt(playerid, "WrongPassword") == 0)
                    {
                        SCM(playerid, COLOR_RED, "[Îøèáêà] {FFFFFF} Âû èñ÷åðïàëè ëèìèò ïîïûòîê ââîäà è áûëè îòêëþ÷åíûé îò ñåðâåðà.");
                        SPD(playerid, -10" "" "" """);
                        return Kick(playerid);
                    }
                    ShowLogin(playerid);
                }
            }
            else
            {
                SCM(playerid, COLOR_RED, "Èñïîëüçóéòå \"/q(uit)\", äëÿ âûõîäà èç èãðû");
                SPD(playerid, -10" "" "" """);
                return Kick(playerid);
            }
        }
    }
    return 1;
}

 

 

Edited by rediska

Share this post


Link to post
  • 0
15 часов назад, rediska сказал:

                    static const fmt_query[] = "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'";

этот запрос по сути и проверяет правильность пароля. 

Вы достаете всю информацию по пользователю, у которого такой ник и пароль. 

15 часов назад, rediska сказал:

                    mysql_tquery(dbHandle, query, "PlayerLogin""i", playerid);

вот эта строка отправляет SQL запрос, его результат придет в public PlayerLogin. 

Там необходимо проверить количество строк, если их ноль => пользователя с таким логином и паролем нет, в противном случае там будет вся информация по этому пользователю из базы данных. 

Share this post


Link to post
  • 0

@DEST @DESTТеперь жалуется на это:

error 017: undefined symbol "query"
warning 203: symbol is never used: "fmt_query"

 

Share this post


Link to post
  • 0

@rediska а что значит теперь? Я же не вносил никаких правок, я просто рассказал что и за что отвечает. 

В коде этого диалога (как я понимаю это диалог ввода пароля) должно остаться только формирование запроса и его отправка с помощью mysql_tquery. Вся остальная логика должна быть вынесена в PlayerLogin, туда придет ответ от плагина mysql

Share this post


Link to post
  • 0

@DEST не подскажешь как исправить? warning 219: local variable "query" shadows a variable at a preceding level

строчка на которую жалуется:

new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+32)];

 

Share this post


Link to post
  • 0

@rediska 

warning 219: local variable "%s" shadows a variable at a preceding level - переменная дважды объявлена;

@rediska У вас дважды обьявлена одна и та же переменная. Из-за чего появилась ошибка.

Share this post


Link to post
  • 0

@_bogdan_ так её тут не убрать, вот код:

if(response)
            {
                new checkpass[32];
                new query[126];
                static const fmt_query[] = "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'";
                mysql_tquery(dbHandle, query, "PlayerLogin""i", playerid);
                if(strcmp(player_info[playerid][PASSWORD], checkpassfalse))
                {
                    static const fmt_query2[] = "SELECT * FROM `users` WHERE `name` = '%s' AND `password` = '%s'";
                    new query[sizeof(fmt_query)+(-2+MAX_PLAYER_NAME)+(-2+32)];//ОШИБКА ТУТ - warning 219: local variable "query" shadows a variable at a preceding level
                    format(query, sizeof(query), fmt_query, player_info[playerid][PASSWORD]);
                    mysql_tquery(dbHandle, query, "PlayerLogin""i", playerid);
                }

 

Share this post


Link to post
  • 0

@rediska тут нужно остановиться, дать отдохнуть рукам и перестать просто копировать код. Нужно подумать. 

Зачем нужно условие 

2 часа назад, rediska сказал:

                if(strcmp(player_info[playerid][PASSWORD], checkpassfalse))

если я раннее писал, что в этом диалоге не получится проверить правильность пароля. 

У нас есть то, что нам ввел пользователь, но нет правильного пароля. Поэтому в strcmp не получится ничего сравнить. 

Давайте мелкими шагами, задача: оставить в диалоге только формирование и отправку SQL запроса. Как сделаете, скидывайте сюда что получилось. 

Share this post


Link to post
  • 0

@DEST 

new checkpass[32];
mysql_tquery(inputtext, player_info[playerid][PASSWORD], checkpass, 32);
if(strcmp(player_info[playerid][PASSWORD], checkpassfalse32) == 0 && isnull(checkpass))

и она жалуется сейчас на строчку:

mysql_tquery(inputtext, player_info[playerid][PASSWORD], checkpass, 32);

Ошибка:error 035: argument type mismatch (argument 1)

error 035: argument type mismatch (argument 1)

 

Edited by rediska

Share this post


Link to post
  • 0

@rediska создали переменную checkpass, затем вызвали mysql_tquery, проверили на совпадение строку player_info[playerid][PASSWORD] и то, что хранится в новой переменной checkpass. 

Что этот набор действий должен был сделать? 

Share this post


Link to post
  • 0

@DEST Я просто только начал заниматься этим делом. И мод пишу по урокам. Ещё пока что не совсем понимаю что и как делать. Можете подсказать?

Share this post


Link to post
  • 0

@rediska Вот хорошая точка старта => https://pro-pawn.ru/showthread.php?4082-Учебник-Pro-Pawn-ru

Посмотрите, почитайте уроки что там есть (их там немного, всего 15). Это даст больше понимания того, что происходит в коде и как он вообще выполняется. 

Share this post


Link to post
  • 0

@DEST Хорошо прочту я как раз ищу такие уроки. Ну я так понимаю мне с моей проблемой не помогут?

 

 

Share this post


Link to post
  • 0

@rediska конечно помогут, но чтобы понять то,  что вам пытаются подсказать, нужно основы узнать. Иначе так и останетесь на уровне скопировать -вставить. 

Share this post


Link to post
  • 0

@DEST не рабочая ссылка на скачку

 

Edited by rediska

Share this post


Link to post
  • 0

@rediska рабочая. Какие проблемы? 

Share this post


Link to post
  • 0

@rediska Вот, держи

ProPawnManualsSetup.zip

Share this post


Link to post
  • 0

@SCRIPTMAN спасибо

 

 

Share this post


Link to post
  • 0

@SCRIPTMAN не подскажешь как сделать запрос в бд проверку на правильность пароля. А то у меня мод уже 4 день стоит

Share this post


Link to post
  • 0

@rediska Могу посоветовать один хороший канал на YouTube(не реклама), человек писал мод с нуля. Можете посмотреть видео-уроки, так же там есть видео-уроки по написанию системы авторизации/регистрации. Тык

Share this post


Link to post
  • 0

@_bogdan_ По его видео и делаю мод.У меня проблема в том что он подключал соль(шифровку) и через неё делает проверку пароля, а я не стал этого делать и теперь не знаю как сделать проверку.

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

    • danya_white
      By danya_white


      Просмотр файла Игровой мод Renaissance RolePlay
      Доброго времени суток, хочу выставить на продажу игровой мод проекта Renaissance RP.
       
      Данный мод является не последний актуальный версии проекта, а версия ниже, многие актуальные систему отсутствуют, но они будут дополняться, со временем. Основные функции на проекте Renaissance RP присутствую в данном моде, это первая версия проекта, поэтому буду дополнять тему своими доработками, также есть TEST IP, реальному покупателю в личные сообщение на форуме, дам данные.
       
      Информация о моде:
      Версия MYSQL - R39-6
      Античит - Встроенный + SAMP-AC
      Стример - Streamer Plugin v2.9.4 by Incognito
      Командный процессор - Pawn CMD
      Основа мода - Brilliant RP
      Остальное Все плагины обновлены до последней версии
       
       
      Основные системы которые присутствуют в данном моде:
      - Система промокодов для семей (/family) - Система выборов - Динамичная система (/lmenu), возможность назначать транспорт, форму сотрудников - Система подразделений в гос.организациях - Система КАЗИНО - Система акксесуаров - Оптимизация игрового мода. - Риелторское агенство. - Квестовая линия (НАЧАЛО) p.s И еще многие другие системы, более подробно на тестовом сервере.
      Добавил danya_white Добавлено 26.10.2021 Категория Моды Автор danya  
    • danya_white
      By danya_white
      Доброго времени суток, хочу выставить на продажу игровой мод проекта Renaissance RP.
       
      Данный мод является не последний актуальный версии проекта, а версия ниже, многие актуальные систему отсутствуют, но они будут дополняться, со временем. Основные функции на проекте Renaissance RP присутствую в данном моде, это первая версия проекта, поэтому буду дополнять тему своими доработками, также есть TEST IP, реальному покупателю в личные сообщение на форуме, дам данные.
       
      Информация о моде:
      Версия MYSQL - R39-6
      Античит - Встроенный + SAMP-AC
      Стример - Streamer Plugin v2.9.4 by Incognito
      Командный процессор - Pawn CMD
      Основа мода - Brilliant RP
      Остальное Все плагины обновлены до последней версии
       
       
      Основные системы которые присутствуют в данном моде:
      - Система промокодов для семей (/family) - Система выборов - Динамичная система (/lmenu), возможность назначать транспорт, форму сотрудников - Система подразделений в гос.организациях - Система КАЗИНО - Система акксесуаров - Оптимизация игрового мода. - Риелторское агенство. - Квестовая линия (НАЧАЛО) p.s И еще многие другие системы, более подробно на тестовом сервере.
    • Kirill_Bess
      By Kirill_Bess
      Приветствую
      При запуске сервера на хостинге выдаёт ошибку [Unknown] 
      При запуске сервера через приложение samp-server.exe выдаёт ошибки плагинов,но я не знаю как из исправить подскажите пожалуйста
      Сразу спасибо за помощь
      Вот логи: