Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 8 из 8
  1. #1
    Аватар для Rachade
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.07.2014
    Сообщений
    20
    Репутация:
    1 ±

    MySQL R7. Проблема с сохранением аккаунта.

    Здравствуйте.
    Недавно по уроку создал регистрацию/авторизацию с нуля на MySQL R7.
    Я добавил свою переменную pGend, которая отвечает за пол персонажа.
    Вроде всё работает, но когда я присваиваю значение 1 переменной pGend (через команду) и выхожу из игры
    в БД у меня остаётся эта переменная на нуле. Если нужны какие-нибудь сведения, чтобы найти ошибку, пишите,
    сразу же предоставлю. А пока я даю вам саму команду, сохранение аккаунта, и где оно применяется.
    PHP код:
        if(strcmp(cmd"/mygend_one"true) == 0)
        {
          
    pInfo[playerid][pGend] = 1;
          
    pInfo[playerid][pScore] = 55;
          
    SendClientMessage(playeridCOLOR_YELLOW"Поздравляем, ты стал мужчиной! :)");
          return 
    true;
        } 
    Уровень кстати тоже не обновляется.
    PHP код:
    stock SavePlayer(playerid)
    {
        if(
    GetPVarInt(playerid"pLogged") > 0)
        {
          new 
    strsave[128];
          
    format(strsavesizeof(strsave), "UPDATE `Accounts` SET `pKey`, `pScore` = '%d', `pGend` = '%d'",
          
    pInfo[playerid][pKey], pInfo[playerid][pScore], pInfo[playerid][pGend]);
          
    format(strsavesizeof(strsave),"%s WHERE `Name` = '%s'"strsavepNick(playerid));
          
    mysql_query(strsave, -10ConnectHandle);
          
    printf("[MySQL]: Аккаунт %s был успешно сохранён."pNick(playerid));
        }
        else 
    printf("[MySQL]: Ошибка сохранения аккаунта %s"pNick(playerid));
        return 
    true;

    PHP код:
    public OnPlayerDisconnect(playeridreason)
    {
        if(
    GetPVarInt(playerid"pLogged") > 0)
        {
          
    SavePlayer(playerid);
        }
        return 
    true;

    В логах пишет, что аккаунт всё же сохранён. Но почему-то в phpmyadmin ничего не обновляется.

    Вот ещё кое что, может быть поможет:
    Последний раз редактировалось Rachade; 27.07.2014 в 18:50. Причина: Добавил сведения

  2. #2
    Аватар для underwoker
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Сообщений
    333
    Репутация:
    47 ±
    Пробуйте так.
    PHP код:
    stock SavePlayer(playerid)
    {
        if(
    GetPVarInt(playerid"pLogged") > 0)
        {
            new 
    strsave[128];
            
    format(strsavesizeof(strsave), "UPDATE `Accounts` SET `pKey` = '%s', `pScore` = '%d', `pGend` = '%d'"pInfo[playerid][pKey], pInfo[playerid][pScore], pInfo[playerid][pGend]);
            
    format(strsavesizeof(strsave),"%s WHERE `Name` = '%s'"strsavepNick(playerid));
            
    //mysql_query(strsave, -1, 0, ConnectHandle);
            
    mysql_function_query(ConnectHandlestrsavetrue"","");//
            
    printf("[MySQL]: Аккаунт %s был успешно сохранён."pNick(playerid));
        }
        else 
    printf("[MySQL]: Ошибка сохранения аккаунта %s"pNick(playerid));
        return 
    true;

    Не заработает - логи mysql_log.txt сюда скиньте, предварительно включив mysql_debug или mysql_log(Не помню как там на R7).
    И еще проверьте пвар pLogged устанавливается в значение 1 при логине или нет. Помню на таком простом месте запнулся когда-то.
    "Власть, кровь, няш-мяш, кровь, власть, Крым наш!" - (c) Наталья Поклонская.

    Критик должен быть готов и способен в любой момент и по первому требованию занять место критикуемого им и выполнять его дело продуктивно и компетентно. В противном случае критика превращается в наглую, самодовлеющую силу и становится тормозом на пути прогресса. (с) AXE

  3. Пользователь сказал cпасибо:
    Rachade (27.07.2014)
  4. #3
    Аватар для Rachade
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.07.2014
    Сообщений
    20
    Репутация:
    1 ±
    Не помогло.
    О как. 55 присвоилось переменной pGend, а хотя должно было присвоиться pScore. Но в phpmyadmin все равно значение не изменилось.
    PHP код:
    [20:55:50] >> mysql_connect(localhostrootnewbase, ******) on port 3306
    [20:55:50CMySQLHandler::CMySQLHandler() - constructor called.
    [
    20:55:50CMySQLHandler::CMySQLHandler() - Connecting to "localhost" DB"newbase" Username"root"
    [20:55:50CMySQLHandler::Connect() - Connection was successful.
    [
    20:55:50CMySQLHandler::Connect() - Auto-Reconnect has been enabled.
    [
    20:55:50] >> mysql_pingConnection handle)
    [
    20:55:50CMySQLHandler::Ping() - Connection is still alive.
    [
    20:56:08] >> mysql_real_escape_stringConnection handle)
    [
    20:56:08CMySQLHandler::EscapeString(Steve_Hudso); - Escaped 11 characters to Steve_Hudso.
    [
    20:56:08] >> mysql_query_callbackConnection handle)
    [
    20:56:08Passing query SELECT `NameFROM `AccountsWHERE `Name` = 'Steve_Hudso' d
    [20:56:08ProcessQueryThread(OnPlayerRegCheck) - Query was successful. (SELECT `NameFROM `AccountsWHERE `Name` = 'Steve_Hudso')
    [
    20:56:08ProcessQueryThread(OnPlayerRegCheck) - Data caching enabled.
    [
    20:56:08CMySQLHandler::StoreResult() - Result was stored.
    [
    20:56:08CMySQLHandler::FreeResult() - Result was successfully free'd.
    [20:56:08] CMySQLHandler::ProcessQueryThread() - Data is getting passed to ->ProcessTick()
    [20:56:08] OnPlayerRegCheck(d) - Threaded function called.
    [20:56:08] >> cache_get_data( Connection handle: 1 )
    [20:56:08] ProcessTick() - The cache has been cleared.
    [20:56:26] >> mysql_query_callback( Connection handle: 1 )
    [20:56:26] Passing query INSERT INTO `Accounts` (`Name`, `pKey`) VALUES ('
    Steve_Hudso', '123123') | d
    [20:56:26] ProcessQueryThread(RegisterCallback) - Query was successful. (INSERT INTO `Accounts` (`Name`, `pKey`) VALUES ('
    Steve_Hudso', '123123'))
    [20:56:26] CMySQLHandler::ProcessQueryThread() - Data is getting passed to ->ProcessTick()
    [20:56:26] RegisterCallback(d) - Threaded function called.
    [20:56:35] >> mysql_query_callback( Connection handle: 1 )
    [20:56:35] Passing query UPDATE `Accounts` SET `pKey`, `pScore` = '
    0', `pGend` = '55' WHERE `Name` = 'Steve_Hudso' | 
    [20:56:35] CMySQLHandler::ProcessQueryThread() - Error will be triggered to OnQueryError() 
    Переменной pLogged присваивается значение: 1 при регистрации/авторизации. Проблема не в этом.

  5. #4
    Аватар для Rachade
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.07.2014
    Сообщений
    20
    Репутация:
    1 ±
    Заметил кое что.
    В вашем коде:
    PHP код:
    format(strsavesizeof(strsave), "UPDATE `Accounts` SET `pKey` = '%s', `pScore` = '%d', `pGend` = '%d'"pInfo[playerid][pKey], pInfo[playerid][pScore], pInfo[playerid][pGend]); 
    Вы для pKey поставили значение %s. Когда я его ставлю, то в таблице в pKey появляется пустота. Но, pScore and pGend сохраняются (даже в phpmyadmin). Я попробовал поставить вместо %s числовое значение %d, и в таблице появляется 0. Но сохранение остальных переменных в порядке. Помогите пожалуйста разобраться с паролем :)

  6. #5
    Аватар для J-Ex
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2014
    Сообщений
    40
    Репутация:
    9 ±
    А зачем каждый раз вообще пароль сохранять? Запрос, который вам дали, верный, остальное нужно смотреть в записи значения пароля на переменную.


    PHP код:
    if(GetPVarInt(playerid"pLogged"
    Не по теме, но зачем дважды проверять?
    Последний раз редактировалось J-Ex; 27.07.2014 в 21:14.

  7. Пользователь сказал cпасибо:
    Rachade (27.07.2014)
  8. #6
    Аватар для Rachade
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.07.2014
    Сообщений
    20
    Репутация:
    1 ±
    Цитата Сообщение от J-Ex Посмотреть сообщение
    А зачем каждый раз вообще пароль сохранять? Запрос, который вам дали, верный, остальное нужно смотреть в записи значения пароля на переменную.
    Как я понял из ваших слов: нужно убрать сохранение пароля при SavePlayer и поставить сохранение только при регистрации?
    Вот вся информация, где запрашивается переменная пароля:
    PHP код:
    enum PlayerInfo
    {
        
    pName[MAX_PLAYER_NAME],                                                     
        
    pKey[128],                                                                  
        
    pScore,                                                                     
        
    pGend,                                                                      
    }; 
    PHP код:
    stock OnPlayerRegister(playeridpassword[])
    {
        new 
    strreg[128];
        
    format(strregsizeof(strreg), "INSERT INTO `Accounts` (`Name`, `pKey`) VALUES ('%s', '%s')"pNick(playerid), password);
        
    mysql_function_query(ConnectHandlestrregfalse"RegisterCallback""d"playerid);
        return 
    true;

    PHP код:
    stock OnPlayerLogin(ipassword[])
    {
        new 
    strlogin[128];
        
    format(strloginsizeof(strlogin), "SELECT * FROM `Accounts` WHERE `Name` = '%s' AND `pKey` = '%s'"pNick(i), password);
        
    mysql_function_query(ConnectHandlestrlogintrue"LoginCallback""ds"ipassword);
        return 
    true;

    Цитата Сообщение от J-Ex Посмотреть сообщение
    PHP код:
    if(GetPVarInt(playerid"pLogged"
    Не по теме, но зачем дважды проверять?
    Это проверка будет полезна в будущем. Кроме сохранения там будут другие функции, которые должны работать, только при авторизованном игроке.
    Последний раз редактировалось Rachade; 27.07.2014 в 21:18.

  9. #7
    Аватар для J-Ex
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2014
    Сообщений
    40
    Репутация:
    9 ±
    Верно меня поняли, уберите. Сейв пароля нужен при смене пароля, поэтому нет смысла каждый раз его сейвить.

  10. Пользователь сказал cпасибо:
    Rachade (27.07.2014)
  11. #8
    Аватар для Rachade
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.07.2014
    Сообщений
    20
    Репутация:
    1 ±
    Всё работает. Огромное спасибо underwoker и J-Ex.
    Тему можно закрывать, а может и пригодиться для кого-нибудь.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •