Вопросы

Вообщем,когда человек регистрируется на сервере,то мне надо записать этот пароль в перемуную(енум) password,но когда я пишу вместо inputtext p_info[playerid][pass], в базе данных либо ничего в той колонке, либо восклицательный знак.

 

Спойлер

//Enum
enum player_info{
id,
pNick[MAX_PLAYER_NAME],
pass[24]
};
new p_info[MAX_PLAYERS][player_info];

enum dialog{
D_REG
D_LOG,
D_EXIT
};
//-------------------------------------
public OnPlayerConnect(playerid)
{
    GetPlayerName(playerid,p_info[playerid][pNick],MAX_PLAYER_NAME);
    new query[41-2+24];
    format(query,sizeof(query),"SELECT * FROM `users` WHERE `name` = '%s'",p_info[playerid][pNick]);
    mysql_function_query(dbHandle,query,true,"check","i",playerid);
    return 1;
}
//

//паблик на проверку игрока в БД
forward check(playerid);
public check(playerid)
{
    new rows,fields;
    cache_get_data(rows,fields,dbHandle);
    if(!rows)
    {
        ShowPlayerDialog(playerid, D_REG, DIALOG_STYLE_INPUT, "Ðåãèñòðàöèÿ àêêàóíòà""Ïðèâåòñòâóåì íà ñåðâåðå Urok RP.\n Âàø àêêàóíò íå çàðåãèñòðèðîâàí,ââåäèòå ïàðîëü íèæå.""Äàëåå""Âûõîä");
    }
    else
    {
        ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, "Àâòîðèçàöèÿ""Ìû ðàäû ÷òî âû âåðíóëèñü íà Urok RP. Àâòîðèçóéòåñü""Äàëåå""Âûõîä");
        cache_get_field_content(rows,"password",p_info[playerid][pass],dbHandle);
    }
    return 1;
}
//----

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case D_REG:{
        if(!response) return SendClientMessage(playerid,-1,"Âû îòêàçàëèñü îò ðåãèñòðàöèè!") & Kick(playerid);
        if(strlen(inputtext))
        {
            new query[250];
            format(query,sizeof(query),"INSERT INTO `users` (`name`,`password`) VALUES ('%s','%s')",p_info[playerid][pNick],inputtext); //Если тут написать не "inputtext" а p_info[playerid][pass]; то в БД будет в колонке пароля пусто. Я пытался обнулять p_info[playerid][pass],смысла нет
            mysql_function_query(dbHandle,query,true,"spawn_player","i",playerid);
            p_info[playerid][pass] = EOS;//ее я пытался обнулять
            

        }

        }

//------спавн игрока после регистрации-----------------

forward spawn_player(playerid);
public spawn_player(playerid)
{
    SpawnPlayer(playerid);
    SetPlayerPos(playerid,1874.1333,2239.7324,15.0305);
    SetPlayerSkin(playerid,15);
    GivePlayerMoney(playerid,500);
    return 1;
}

Так же я пытался сделать авторизацию, но тоже не вышло

case D_LOG:{
        if(!response) return SendClientMessage(playerid,-1,"Вы отказались от регистрации!") & Kick(playerid);
        if(strlen(inputtext))
        {
            if(!strcmp(inputtext, p_info[playerid][pass], false))
            {
             return ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, "Авторизация", "Неверный пароль", "Далее", "Выход");
            }
            else if(strcmp(inputtext, p_info[playerid][pass], false))
            {
                SetTimer("spawn_player",50,false);
            }
        }


case D_LOG:{
        if(!response) return SendClientMessage(playerid,-1,"Вы отказались от регистрации!") & Kick(playerid);
        if(strlen(inputtext))
        {
            if(!strcmp(inputtext, p_info[playerid][pass], false))
            {
             return ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, "Авторизация""Неверный пароль""Далее""Выход");
            }
            else if(strcmp(inputtext, p_info[playerid][pass], false))
            {
                SetTimer("spawn_player",50,false);
            }
        }

 

Отредактировано пользователем Antoxa39

Поделиться сообщением


Ссылка на сообщение

8 ответов на этот вопрос

  • 0

неправильно записываешь данные из inputtext в переменную
покажи код

Поделиться сообщением


Ссылка на сообщение
  • 0
1 минуту назад, 20th century сказал:

неправильно записываешь данные из inputtext в переменную
покажи код

@20th century код в спойлере

Поделиться сообщением


Ссылка на сообщение
  • 0
if(!strcmp(inputtext, p_info[playerid][pass], false))
            {
             return ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, "Авторизация""Неверный пароль""Далее""Выход");
            }

 

!strcmp наоборот означает то, что строки идентичны. а ты ошибку показываешь пользователю. пиши мод и просматривай вики и документацию по функциям.

пробовал перед запросом дебажить inputtext? пробовал этот запрос в phpMyAdmin вручную выполнять?

я так и не увидел, где записывается пароль в переменную

 

 

Поделиться сообщением


Ссылка на сообщение
  • 0
9 минут назад, 20th century сказал:

if(!strcmp(inputtext, p_info[playerid][pass], false))
            {
             return ShowPlayerDialog(playerid, D_LOG, DIALOG_STYLE_INPUT, "Авторизация""Неверный пароль""Далее""Выход");
            }

 

!strcmp наоборот означает то, что строки идентичны. а ты ошибку показываешь пользователю. пиши мод и просматривай вики и документацию по функциям.

пробовал перед запросом дебажить inputtext? пробовал этот запрос в phpMyAdmin вручную выполнять?

я так и не увидел, где записывается пароль в переменную

 

 

я и не понял как это сделать, ну я пытался приравнять inputtext к   p_info[playerid][pass]. Пробовал этот запрос  в ручную, и ставил вместо %s цифорки и буковки, все успешно.

Поделиться сообщением


Ссылка на сообщение
  • 0

в гугле "как записать текст в переменную pawn", и все встало бы на свои места

strmid, format, функции делают одно и то же, по сути. нагугли как их правильно использовать.

но вот почему в БД записывается мусор - мне не понятно. пробовал шаги, которые я описал в прошлом сообщении?

Поделиться сообщением


Ссылка на сообщение
  • 0

@20th century дебажить?

Поделиться сообщением


Ссылка на сообщение
  • 0

@Antoxa39 выводить значение переменной в консоль 

printf("%s", inputtext);

 

if(strlen(inputtext))

Я может и забыл, но к чему эта проверка? Что она даёт? strlen узнает количество символов. Она будет работать как то, что введено больше 1 символа? Или что. Я просто понять не могу. По моему, она здесь не нужна, нужны явно другие проверки, а лучше юзать regex

Либо сделать if(!strlen(inputtext)) - если текст не введён, выдавал диалог заново

Отредактировано пользователем SCRIPTMAN

Поделиться сообщением


Ссылка на сообщение
  • 0

@20th century этот запрос я в БД делал, все ок

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Узбек
      От Узбек
      Всем добрый вечер ребят! 
      Я начинающий, сегодня я вам сливаю команду 2(шт) на технические работы
      Ловите 
       
    • nazpol9
      От nazpol9
      Привет всем.

      У меня имеется мод для самп сервера и VPS с Ubuntu, на котором я пытаюсь его запустить.

      В чем суть проблемы: при запуске samp03svr, сервер запускается, но на версии 0.3.DL R-1. Когда я пытаюсь запустить этот же мод локально на Windows, сервер работает на версии 0.3.7 и я могу зайти на него без клиента 0.3.DL.

      Для решения этой проблемы я уже пробовал заменять инклуды и исполнительные файлы теми, что есть в архивах на официальном сайте сампа, перекомпилировал мод, и ничего не изменилось.
       
      #include <a_samp> #include <a_mysql> #include <foreach> #include <Pawn.RakNet> #include <streamer> #include <sscanf2> #include <float2> #include <crashdetect> #include <fmt> #include <a_http> #include <Pawn.CMD> #include <Pawn.Regex> #include <requests> #include <callbacks> #include <MD5> #include <mxdate> #include <TOTP> #include <gvar> #include <md-sort> #include <nex-ac> #include <weapon-config> #include <discord-connector> #include <3DTryg> #include <textdraw-streamer>  
      plugins crashdetect.so streamer.so textdraw-streamer.so sscanf.so pawnraknet.so pawncmd.so mysql.so requests.so profiler.so pawnregex.so TOTP.so gvar.so discord-connector.so

      Если у кого-то будут какие-либо догадки, прошу ими поделиться, если понадобится больше информации - я постараюсь её предоставить.