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

@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

@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

    • KAIF
      By KAIF


      Скачать файл GTA RolePlay-МОД,СБОРКА
      !!!!!ВСЕГО ОДНА КОПИЯ!!!! 
      Единственный мод GTA RP.
       
      Фракции:
      Правительство
      ГИБДД
      Полиция Южного
      ФСБ
      ЦГБ-А
      Автошкола
      Китайская мафия
      Русская Мафия
      Итальянская Мафия
      Американская Мафия
      Чеченская Мафия
      ВВС
      МЧС
      ОПГ Тяп-Ляп
      ОПГ Хади-Такташ
      СМИ Южного
      ФСИН
      В комплекте идёт СБОРКА И МОД.
      Единственный мод GTA RP.
      Добавил KAIF Добавлено 01.01.2024 Категория Моды Автор Aleksandr  
    • gooding
      By gooding


      Скачать файл REDROW RP | ЛУЧШИЙ БОНУСНИК | АВТОПАРКИ
      Доброго времени суток! Я выложил на продажу игровой мод RedRow RolePlay!
       
      17 ТИТУЛОВ, 14 КОСТЮМОВ (КАМЕРМЭН, ФЕЯ, СИ-ДЖЕЙ, ДЭДПУЛ, СПАНЧ БОБ, НИНДЗЯ, ДЕД МОРОЗ и другие!),
      BMW I8, BMW M5, BMW Vision M NEXT, Mercedes-Benz G-CLASS, Rolls-Royce Phantom! Система рулетки  (Исправлена, теперь не выпадает одно и то же),
      Автопарки Фракций (FBI и банд), МОД ОПТИМИЗИРОВАЛИ под ИГРУ, ДОБАВИЛИ НОВЫЙ АНТИЧИТ (Latest Nex-AC) и АНТИЧИТ настроен. Проделано много работы (Над модом работали полгода) и исправили множество багов.
       
      Что было добавлено?
      1. 17 титулов,
      2. 14 костюмов,
      3. Эксклюзивный транспорт (SandKing, Rolls-Royce Phantom, BMW I8, BMW M5, BMW Vision M NEXT, Mercedes-Benz G-CLASS).
      4. Автопарк ФБР и всех банд.
      5. Новый анти-чит.
      6. Оптимизация игрового мода.
      7. Премиум и уникальные возможности для владельцев Премиума.
      8. Команда /bonus, где можно получить бесплатно Red Coins.
      9. За АКТИВ даются Red Coins!
      10. Рестарт сервера в 5:00 по МСК.
      11. Радужный клист.
      12. Уникальный тюнинг для эксклюзивных машин и ускорение.
      13. Новая система банка.
      14. Исправлено множество багов.
      15. Новый маппинг.
      Добавил gooding Добавлено 28.01.2024 Категория Моды Автор GOODING (Я)  
    • gooding
      By gooding
      Доброго времени суток! Я выложил на продажу игровой мод RedRow RolePlay!
       
      17 ТИТУЛОВ, 14 КОСТЮМОВ (КАМЕРМЭН, ФЕЯ, СИ-ДЖЕЙ, ДЭДПУЛ, СПАНЧ БОБ, НИНДЗЯ, ДЕД МОРОЗ и другие!),
      BMW I8, BMW M5, BMW Vision M NEXT, Mercedes-Benz G-CLASS, Rolls-Royce Phantom! Система рулетки  (Исправлена, теперь не выпадает одно и то же),
      Автопарки Фракций (FBI и банд), МОД ОПТИМИЗИРОВАЛИ под ИГРУ, ДОБАВИЛИ НОВЫЙ АНТИЧИТ (Latest Nex-AC) и АНТИЧИТ настроен. Проделано много работы (Над модом работали полгода) и исправили множество багов.
       
      Что было добавлено?
      1. 17 титулов,
      2. 14 костюмов,
      3. Эксклюзивный транспорт (SandKing, Rolls-Royce Phantom, BMW I8, BMW M5, BMW Vision M NEXT, Mercedes-Benz G-CLASS).
      4. Автопарк ФБР и всех банд.
      5. Новый анти-чит.
      6. Оптимизация игрового мода.
      7. Премиум и уникальные возможности для владельцев Премиума.
      8. Команда /bonus, где можно получить бесплатно Red Coins.
      9. За АКТИВ даются Red Coins!
      10. Рестарт сервера в 5:00 по МСК.
      11. Радужный клист.
      12. Уникальный тюнинг для эксклюзивных машин и ускорение.
      13. Новая система банка.
      14. Исправлено множество багов.
      15. Новый маппинг.
    • Redmondd
      By Redmondd
      Хочу сделать команду /gpsoff, которая убирает метку