Question

Вообщем,когда человек регистрируется на сервере,то мне надо записать этот пароль в перемуную(енум) 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);
            }
        }

 

Edited by Antoxa39

Share this post


Link to post

8 answers to this question

  • 0

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

Share this post


Link to post
  • 0
1 минуту назад, 20th century сказал:

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

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

Share this post


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

 

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

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

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

 

 

Share this post


Link to post
  • 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 цифорки и буковки, все успешно.

Share this post


Link to post
  • 0

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

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

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

Share this post


Link to post
  • 0

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

printf("%s", inputtext);

 

if(strlen(inputtext))

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

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

Edited by SCRIPTMAN

Share this post


Link to post
  • 0

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

Share this post


Link to post
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Dexter Nomad
      By Dexter Nomad
      При попытке компиляции кода возникает ошибка:
      error 076: syntax error in the expression, or invalid function call
      Не могу найти причину, буду благодарен, если не только укажете, где сама ошибка, но еще и исправите ее.
      Сам код:
          if(strcmp(cmd, "/carsharing", true) == 0)     {         if(IsPlayerConnected(playerid))         {             if(PlayerInfo[playerid][CarLic] == 0) return SCM(playerid, COLOR_RED, "У вас нет вод.прав! Вы можете получить их в автошколе!");         }     }  
    • Sanya_Greison
      By Sanya_Greison
      Куплю РП мод под сервер без бонуса. Бюджет до 150 $
      А также скриптера с Украины
      мой вк vk.com/i_am_sashko