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

    • shedexx
      By shedexx
      PERFONSE RP | 2025
      Скачать файл Всем привет. Возвращаюсь в сферу Pawno-разработчика и ютубера по сампу. Ранее Вы могли узнать меня по нику "Minekaev Play", но теперь мой новый ник - shedexx.
       
      Perfonse Role Play:
      Уже не помню у кого я брал основу, этот мод должен был работать только через специальный addon-ключ, который использует лаунчер Arizona RP. Я убрал систему этого лаунчера / ключа, и мод заработал на обычном SAMP лаунчере. Я даже открывал проект с этим модом, но к сожалению или к счастью, никто не хотел у нас играть. Разработка мода велась где-то в начале 2025 года.
       
      Уникальный этот мод тем, что в нём есть система Air-Drop'а, система крафта аксессуаров на TextDraw, система выбора семейных автомобилей на TextDraw. В общем, у меня уже были загружены скрины с этого мода, я их выложил на imgur, и Вы сможете сами посмотреть визуально, что в этом моде имеется.
       
      Строчек в моде: [ 57.370 ]
      Быстрая компиляция: [ Да ]
      Варнингов: [ 3 шт. ] - Не влияют на работу мода.
       
      Скриншоты: *кликабельно*
      Видео-Слив: *кликабельно*
      Добавил shedexx Добавлено 17.03.2025 Категория Моды Автор shedexx  
    • shedexx
      By shedexx
      Всем привет. Возвращаюсь в сферу Pawno-разработчика и ютубера по сампу. Ранее Вы могли узнать меня по нику "Minekaev Play", но теперь мой новый ник - shedexx.
       
      Perfonse Role Play:
      Уже не помню у кого я брал основу, этот мод должен был работать только через специальный addon-ключ, который использует лаунчер Arizona RP. Я убрал систему этого лаунчера / ключа, и мод заработал на обычном SAMP лаунчере. Я даже открывал проект с этим модом, но к сожалению или к счастью, никто не хотел у нас играть. Разработка мода велась где-то в начале 2025 года.
       
      Уникальный этот мод тем, что в нём есть система Air-Drop'а, система крафта аксессуаров на TextDraw, система выбора семейных автомобилей на TextDraw. В общем, у меня уже были загружены скрины с этого мода, я их выложил на imgur, и Вы сможете сами посмотреть визуально, что в этом моде имеется.
       
      Строчек в моде: [ 57.370 ]
      Быстрая компиляция: [ Да ]
      Варнингов: [ 3 шт. ] - Не влияют на работу мода.
       
      Скриншоты: *кликабельно*
      Видео-Слив: *кликабельно*
    • Sams0n0v
      By Sams0n0v
      Приветствую! Есть ```SetPlayerChatBubble```, оно выводит какой либо текст над головой ИГРОКА, и этот текст абсолютно динамичен, он следует всем движениям игрока, включая анимации. Так вот вопрос, а как сделать так, но с NPC (Актером), чтобы не обычный каменный статичный 3д текст, а чтобы было наподобии текста над головой при отправке сообщения в чат. Надеюсь, меня поняли, с нетерпением жду ответа, этот форум, моя последняя надежда) Спасибо!