Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3
  1. #1
    Аватар для Don_Omare
    Пользователь

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

    [MySQL R-34] ORM функции | "Система регистрации"

    Суть проблемы:

    * В БД MySQL R-34 (работаю с денвером) сохраняются все данные кроме Ника игрока и Ника человека который его пригласил.
    * Интересно то что пароль, email и другие данные типа string вполне удачно записываются в БД.
    * Всю систему регистрации построил на ORM функциях.
    * Делая все это через стандартные запросы, сохраняется все прекрасно, но в разные строки, по этому и решил использовать orm - помогло!
    * Использую ID аккаунта в таблице, установил auto_increment ( A_I );
    * В sever_log и в логе mysql ошибок нет! Все запросы обрабатываются верно, как нужно.
    =================================================================
    ::: Значит просто не прописал этот запрос, но все увидите ниже...
    =================================================================
    __Больше добавить мне нечего, на все вопросы буду отвечать в каментариях.
    __Код и скриншот прилагаются ниже:
    __P.S. Код будет сокращен, показаны только "рабочие" моменты - там где используются сами функции
    =================================================================



    PHP код:
    #include <a_samp>
    #include <a_mysql>

    #define MYSQL_HOST              "localhost" //127.0.0.1
    #define MYSQL_USER              "root"
    #define MYSQL_DATABASE       "R.com"
    #define MYSQL_PASSWORD      ""
    #define TBDP                         "accounts" //Название БД
    #define MYSQL_CONNECT_INFO      MYSQL_HOST,MYSQL_USER,MYSQL_DATABASE,MYSQL_PASSWORD
    //------
    #define MAX_PASS_LEN            20
    #define MAX_PASS_EMAIL          64

    enum PlayerInfo
    {
        
    ORM:ORM_ID,
        
    pID  //id аккаунта в таблице БД
        
    pInvite_Player_Name[MAX_PLAYER_NAME],
        
    pName[MAX_PLAYER_NAME],
        
    pPassword[MAX_PASS_LEN],
        
    pEmail[MAX_PASS_EMAIL],
        
    pSex//Ну и тип int для примера 1/0
    }

    new 
    pInfo[PlayerInfo];
    new 
    mysql_connect_ID;

    forward OnPlayerDataLoad(playerid);

    public 
    OnGameModeInit()
    {
        
    mysql_connect_ID mysql_connect(MYSQL_CONNECT_INFO);
        
    printf("id подключения BD R.com = %i",mysql_connect_ID); // показывает 1
        
    return 1;
    }
    public 
    OnPlayerConnect(playerid)
    {
        
    Clear_The_Variables(playerid); // Тут мы почистили все переменные из енума.
        
    GetPlayerName(playerid,pNick(playerid),MAX_PLAYER_NAME);
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    //Прошу обратить внимание на 2ой параметр, во всех уроках его нет, так же как и связи БД с таблицей. 
    //Думаю что поставил правильно
        
    pInfo[playerid][ORM_ID] = orm_create(TBDP,mysql_connect_ID);//создаем ORM
    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   
        
    new ORM:pInfo[playerid][ORM_ID]; //для упрощения привязки[/COLOR]
        
    orm_addvar_int(p,pInfo[playerid][pID],"ID"); // Привязываем переменную pInfo[playerid][pID] к значеню "ID" в таблице БД
        
    orm_addvar_string(p,pInfo[playerid][pName],MAX_PLAYER_NAME,"pName");
        
    orm_addvar_string(p,pInfo[playerid][pPassword],MAX_PASS_LEN,"pPassword");
        
    orm_addvar_string(p,pInfo[playerid][pEmail],MAX_PASS_EMAIL,"pEmail");
        
    orm_addvar_int(p,pInfo[playerid][pSex],"pSex");
        
    orm_addvar_string(p,pInfo[playerid][pInvite_Player_Name],MAX_PLAYER_NAME,"pInvite_Player_Name");  //-------------------
        
    orm_setkey(p,"pName"); //т.к. мы не знаем ID игрока в БД, ставим за ключ Ник игрока
        
    orm_load(p,"OnPlayerDataLoad","d",playerid); //сценарий выгрузки информации из БД и записи их в прикрепленные переменные
        
    return 1;
    }
    public 
    OnPlayerDataLoad(playerid)
    {
        switch(
    orm_errno(pInfo[playerid][ORM_ID]))
        {
            case 
    ERROR_OK//Авторизация
            
    case ERROR_NO_DATA//Отправляем на диалог регистрации
        
    }
       return 
    1;
    }
    //=========================
    //Далее игрок проходит все диалоги реги
    //Спавним его и записываем все данные
    //собранные во время реги в БД "account"
    //==========================
    stock CreateNewAccount(playerid)
    {
    //Спавним игрока;
    //Выставляем значение переменным енума
        
    pInfo[playerid][pMoneyBank] = 0;
        
    pInfo[playerid][pHealth] = 100.0;
    SetPlayerHealth(playeridpInfo[playerid][pHealth]);
    //==============
        
    orm_insert(pInfo[playerid][ORM_ID],"OTVET","d",playerid); //И вот мы записываем в БД все, что накопил в себе наш ORM
       
    return 1;
    }
    forward OTVET(playerid);
    public 
    OTVET(playerid)
    {
        switch(
    orm_errno(pInfo[playerid][ORM_ID]))
        {
            case 
    ERROR_OK: print("Все ок");
            case 
    ERROR_NO_DATA: print("Не сохранили");
        }
        return 
    1;
    }
    //----------------
    //Как вы видите выше, мы отправляем результат в паблик OTVET, в консоль сервера выдает, "все ок"
    //----------------
    stock Clear_The_Variables(playerid)
    {
        
    pInfo[playerid][pID] = 0;
        
    pInfo[playerid][pSex] = 0;
       return 
    1;

    Последний раз редактировалось Osetin; 20.04.2015 в 22:27. Причина: Отредактировал тему

  2. #2
    Аватар для Osetin
    •Администратор•

    Статус
    Оффлайн
    Регистрация
    26.03.2013
    Адрес
    ♔Osetia, Vladikavkaz♔
    Сообщений
    3,432
    Репутация:
    1093 ±
    И не лень вам было каждую строку выделять отдельным цветом?

  3. #3
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Я конечно не специалист, но разве ORM не медленнее простого варианта?

 

 

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

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

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

Ваши права

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