Русское сообщество по скриптингу

сохранение ника в бд в утф8 без бом

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Re: сохранение ника в бд в утф8 без бом

Сообщение RevCrew » 27 сен 2017, 13:42

Dmitry Beast, смотря какой у вас amxx
в 1.8.3 есть специальная функция
в 1.8.2 нужно запрос делать SET NAMES 'utf8';
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: сохранение ника в бд в утф8 без бом

Сообщение Dmitry Beast » 27 сен 2017, 14:44

RevCrew писал(а):Dmitry Beast, смотря какой у вас amxx
в 1.8.3 есть специальная функция
в 1.8.2 нужно запрос делать SET NAMES 'utf8';

1.8.3, что за функция?
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: сохранение ника в бд в утф8 без бом

Сообщение RevCrew » 27 сен 2017, 15:09

Код: Выделить всё
SQL_SetCharset(g_sql_tuple"utf8"
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: сохранение ника в бд в утф8 без бом

Сообщение Dmitry Beast » 27 сен 2017, 18:09

RevCrew писал(а):
Код: Выделить всё
SQL_SetCharset(g_sql_tuple, "utf8"

Это уже в plugins_end?

Добавлено спустя 8 минут 47 секунд:
Код: Выделить всё
#include <amxmodx>
#include <sqlx>

#define PLUGIN "Sql"
#define VERSION "1"
#define AUTHOR "BeasT"

#define LOG_FILE "addons/amxmodx/logs/Log.log" 
#define MAX_CLIENTS    32

new Handle:g_Sqlx

new g_cvars[4];
new const 
g_cvars_string[][] = 
{
    
"stats_sql_host",
    
"stats_sql_user",
    
"stats_sql_pass",
    
"stats_sql_db"
}

new const 
g_cvars_value[][] = 
{
}

new 
g_iAuth[MAX_CLIENTS+1][32],
    
bool:g_iLoad[MAX_CLIENTS 1],
    
g_playername[MAX_CLIENTS+1][MAX_CLIENTS]
    
public 
plugin_init() {
  
    
register_plugin(PLUGINVERSIONAUTHOR)

    for(new 
0j<sizeof(g_cvars_string);j++)
        
g_cvars[j] = register_cvar(g_cvars_string[j],g_cvars_value[j])
        
    
SQL_Init_Connect();
    
SQL_Prepare_Table();
}

public 
plugin_end()
{
    
SQL_FreeHandle(g_Sqlx)
}

public 
SQL_Init_Connect()
{
    static 
data[4][64];
    
    for(new 
0i<4;i++)
    
get_pcvar_string(g_cvars[i],data[i],63)
    
    
g_Sqlx SQL_MakeDbTuple(data[0],data[1],data[2],data[3])
    
    static 
g_Error[128],ErrorCode
    
static Handle:SqlConnection;SqlConnection SQL_Connect(g_Sqlx,ErrorCode,g_Error,127)
    
    if(
SqlConnection == Empty_Handle)
    {
        
Print_to_log("Can't connect to Mysql (Error %s)",g_Error)
        
Print_to_log("Host <%s> User <%s> DB <%s>",data[0],data[1],data[2])
        
set_task(20.0,"SQL_Init_Connect")
    }
    else 
Print_to_log("Connection for Database run success!")
        
    
SQL_FreeHandle(SqlConnection);
}

SQL_Prepare_Table()
{
    static 
Query[512],len;
        
    
len formatex(Querycharsmax(Query), "CREATE TABLE IF NOT EXISTS `Stats` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`player_name` varchar(32) NOT NULL,")
    
len += formatex(Query[len], charsmax(Query)- len," `player` int(10) NOT NULL, PRIMARY KEY (`id`));")
    
SQL_ThreadQuery(g_Sqlx"QueryCreateTable"Query);
}

public 
client_putinserver(id)
{
    
get_user_authid(id,g_iAuth[id],charsmax(g_iAuth[]))
    
get_user_name(idg_playername[id], charsmax(g_playername[]))
    
LoadDataid );
}

LoadData(id)
{
    static 
query[128],data[1];data[0]=id
    formatex
(querysizeof(query) - 1,\
        
"SELECT * FROM `Stats` WHERE `player_id` = '%s'",\
        
g_iAuth[id]
        );
        
    
SQL_ThreadQuery(g_Sqlx,"LoadDataPlayer",querydata1)
}

Save_Data(id)
{
      static 
query[256],data[1];data[0]=id
    
static ip[26]; get_user_ip(id,ip,25,1)
    
    if( 
g_iLoad[id])
    {
        
formatex(querysizeof(query) - 1"UPDATE `Stats` SET `player_name` = ^"%s^" WHERE `player_id` = '%s';"g_playername[id],g_iAuth[id]);
    }
    else
    
formatex(querysizeof(query) - 1"INSERT INTO `Stats` ( `player_name`, `player_id` ) VALUES ( '%s', '%s' );"g_playername[id],g_iAuth[id]);
        
    
SQL_ThreadQuery(g_Sqlx,"SaveDataPlayer",querydata1)
}

public 
QueryCreateTable(failstateHandle:queryerror[], errcodedata[], datasizeFloat:queuetime)
{
    if(
failstate)
    {
        return 
SQL_Error(queryerrorerrcodefailstate);
    }
    
    return 
SQL_FreeHandle(query)
}

public 
LoadDataPlayer(failstateHandle:queryerror[], errcodedata[], datasizeFloat:queuetime)
{
    if(
failstate)
    {
        return 
SQL_Error(queryerrorerrcodefailstate);
    }
    static 
id;id=data[0];
    if(
SQL_NumResults(query))
    {
        
g_iLoad[id] = true
    
}
    else
    {
        
g_iLoad[id] = false
    
}
    return 
SQL_FreeHandle(query);
}

public 
SaveDataPlayer(failstateHandle:queryerror[], errcodedata[], datasizeFloat:queuetime)
{
    if(
failstate)
    {
        return 
SQL_Error(queryerrorerrcodefailstate);
    }
    
    return 
SQL_FreeHandle(query);
}

stock Print_to_log(const szMessage[], any:...)
{
    static 
szMsg[256];
    
vformat(szMsgcharsmax(szMsg), szMessage2);
    
    
log_amx("[Stats] %s",szMsg)
    
log_to_file(LOG_FILE,"[Stats] %s",szMsg)
    
    return;
}

stock SQL_Error(Handle:query, const error[], errornumfailstate)
{
    static 
qstring[512]
    
SQL_GetQueryString(queryqstring1023)
    
    if(
failstate == TQUERY_CONNECT_FAILED
    {
        
Print_to_log("[SQLX] Error connected to database")
    } 
    else if (
failstate == TQUERY_QUERY_FAILED
    {
        
Print_to_log("[SQLX] Failed")
    }
    
Print_to_log("[SQLX] Error '%s' with '%s'"errorerrornum)
    
Print_to_log("[SQLX] %s"qstring)

    
set_task(20.0,"SQL_Init_Connect")
    return 
SQL_FreeHandle(query)
}
 


Можно, пожалуйста :-[
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Re: сохранение ника в бд в утф8 без бом

Сообщение RevCrew » 27 сен 2017, 23:13

Что то типа того
Код: Выделить всё
public SQL_Init_Connect()
{
 
/////
 
g_Sqlx SQL_MakeDbTuple(data[0],data[1],data[2],data[3])
 
SQL_SetCharset(g_Sqlx"utf8"
/////
 
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: сохранение ника в бд в утф8 без бом

Сообщение Dmitry Beast » 29 сен 2017, 15:51

RevCrew писал(а):Что то типа того
Код: Выделить всё

public SQL_Init_Connect
()
{
 /////
 g_Sqlx = SQL_MakeDbTuple(data[0],data[1],data[2],data[3])
 SQL_SetCharset(g_Sqlx, "utf8") 
/////

Большое спасибо, всё, как надо! :thumbs_up
Аватара пользователя
Dmitry Beast
 
Сообщения: 1560
Зарегистрирован: 24 дек 2010, 10:35
Откуда: Египет
Благодарил (а): 440 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет
Языки программирования: All Languages

Пред.

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 14