Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Помощи с sql

Статус пользователя cr0h4
сообщение 11.5.2014, 20:34
Сообщение #1
Стаж: 12 лет

Сообщений: 1
Благодарностей: 1
Полезность: 0

Вообщем интересует работа с БД. Наработки есть
№1

Скрытый текст
Код:
#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#include <hamsandwich>
#include <colorchat>

#define PLUGIN "[SQLx.inc] SQL_ReadResult"
#define VERSION "1.0"
#define AUTHOR "Admin"

new Handle:SQL_Tuple
new Handle:SQL_Connection

new name[32], kills[33]
public plugin_init() {

register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar("SQLx_host","")
register_cvar("SQLx_db","")
register_cvar("SQLx_user","")
register_cvar("SQLx_password","")

register_clcmd("say /check","check")
RegisterHam(Ham_Killed,"player","ham_player_kill")
}
public plugin_cfg(){
new host[33],dbase[33],user[33],pass[33]
get_cvar_string("SQLx_host",host,30)
get_cvar_string("SQLx_db",dbase,30)
get_cvar_string("SQLx_user",user,30)
get_cvar_string("SQLx_password",pass,30)
SQL_Tuple = SQL_MakeDbTuple(host,user,pass,dbase) // Создание картежа данных для соединения с БД
new err, error[256]
SQL_Connection = SQL_Connect(SQL_Tuple, err, error, charsmax(error)) // Соединение с БД

if(SQL_Connection != Empty_Handle)
{
log_amx("[SQLx connect ok]") //Если соединение установлено
}else{
log_amx("[SQLX sql error] %s ",error) //Если нет и выводим причину(ошибку)
pause("a")
}

}
public check(id){

ColorChat(id,TEAM_COLOR, "^3killed %d", kills[id])
}

public ham_player_kill(victim, attacker){

if(is_user_connected(attacker))
kills[attacker]++;
set_task(0.1, "read")

}
public read(id){

new Handle:query = SQL_PrepareQuery(SQL_Connection,"UPDATE `table` SET `kills`='%d' WHERE `name` = '%s' ", kills[id], name )
SQL_Execute (query)

}
public client_authorized(id){

get_user_name(id, name, 31)
new Handle:query = SQL_PrepareQuery(SQL_Connection,"INSERT INTO `table` (`name`, `kills`) VALUES ('%s','0') ", name)
SQL_Execute (query)
}
public plugin_end(){

SQL_FreeHandle(SQL_Connection)

}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/

В этом случаи записи в БД делается, но не пишутся фраги(kills), то есть запись типа: Ник 0. И 0 остается всегда


№2, тут очень все запутано и не работает, пытался сделать не прямым запросом к базе, а поточным

Скрытый текст
Код:
#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#include <hamsandwich>
#include <colorchat>

#define PLUGIN "[SQLx.inc] SQL_ReadResult"
#define VERSION "1.0"
#define AUTHOR "Admin"

new Handle:SQL_Tuple
new Handle:SQL_Connection

new g_Error[512];

enum _:PlData
{
gId,gKills,gName
};

new name[32], kills[33]
new Host,User,Password,DbName
new UserData[33][PlData];
public plugin_init() {

register_plugin(PLUGIN, VERSION, AUTHOR)

Host = register_cvar("SQLx_host","")
DbName = register_cvar("SQLx_db","")
User = register_cvar("SQLx_user","")
Password = register_cvar("SQLx_password","")

register_clcmd("say /check","check")
RegisterHam(Ham_Killed,"player","ham_player_kill")
set_task(0.1, "sql_init");
}

public sql_init()
{
new szHost[64],szUser[64],szPassword[64],szDbName[64],ErrorCode;
get_pcvar_string(Host,szHost,63);
get_pcvar_string(User,szUser,63);
get_pcvar_string(Password,szPassword,63);
get_pcvar_string(DbName,szDbName,63);
SQL_Tuple = SQL_MakeDbTuple(szHost,szUser,szPassword,szDbName);
new Handle:SQL_Connection = SQL_Connect(SQL_Tuple,ErrorCode,g_Error,511)
if(SQL_Connection == Empty_Handle)
set_fail_state(g_Error);

new Handle:Queries = SQL_PrepareQuery(SQL_Connection,"CREATE TABLE IF NOT EXISTS `table`(`id` INT(10) NOT NULL AUTO_INCREMENT,`name` VARCHAR(32) NOT NULL,`kills` INT(10000) NOT NULL,PRIMARY KEY (id));")
if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
set_fail_state(g_Error);
}
SQL_QueryAndIgnore(SQL_Connection, "DELETE FROM table WHERE kills=0"); // 24.10.12
SQL_FreeHandle(Queries)
SQL_FreeHandle(SQL_Connection);
}
//
public plugin_end()
{
if(SQL_Tuple != Empty_Handle)
SQL_FreeHandle(SQL_Tuple);
}
//
public client_putinserver(id)
{
UserData[id] = UserData[0];
load_data(id);
}

public load_data(id)
{
new Name[33];
get_user_name(id,Name,32);
new reaad[256]
SQL_QuoteString(SQL_Connection, Name, 32, Name);
if(SQL_Connection == Empty_Handle)
{
log_amx(g_Error);
return ;
}
format(reaad,255,"SELECT id, kills FROM table WHERE name = '%s';", Name) //вытаскиваем фраги из таблицы, где имя равно переменной
SQL_ThreadQuery(SQL_Tuple,"result_load_data",reaad);//читаем результаты
}

public result_load_data(id, FailState, Handle:Query, error[], err, data[], size, Float:querytime)
{
//Если произошла ошибка
if(FailState != TQUERY_SUCCESS)
{
log_amx("sql error: %d (%s)", err, error)//пишется в лог об ошибке
return
}

//Ошибки не было и если результат не нулевой
if( SQL_NumResults(Query) > 0 )
{
UserData[id][gId]= SQL_ReadResult(Query,0); //Как я понимаю, тут записываются данные из 1 поля в БД -> id
UserData[id][gKills]= SQL_ReadResult(Query,1); //а тут уже со 2 поля в БД -> kills
}
else
{
register_player(id); //если в базе не найден, тогда идет регистрация
}
}
public check(id){

ColorChat(id,TEAM_COLOR, "^3 User ID %d killed %d",UserData[id][gId], UserData[id][gKills])
}

public register_player(id){

get_user_name(id, name, 31)
new Handle:query = SQL_PrepareQuery(SQL_Connection,"INSERT INTO `table` (`name`, `kills`) VALUES ('%s','0') ", name)
SQL_Execute (query)

}

public ham_player_kill(victim, attacker){

if(is_user_connected(attacker))
kills[attacker]++;
set_task(0.1, "read")

}
public read(id){

new query[256]
format(query,charsmax(query),"UPDATE `table` SET `kills`='%d' WHERE `name` = '%s' ",UserData[id][gKills],UserData[id][gName] )

//Выполнение запроса
SQL_ThreadQuery(SQL_Tuple,"QueryHandler",query)


//new Handle:query = SQL_PrepareQuery(SQL_Connection,"UPDATE `table` SET `kills`='%d' WHERE `name` = '%s' ", kills[id], name )
//SQL_Execute (query)

}

public QueryHandler(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
if(FailState != TQUERY_SUCCESS)
{
log_amx("sql error: DB connected")
return
}

//Ошибки не было и если результат не нулевой
if( SQL_NumResults(Query) > 0 )
server_print("Sql result [%d] data[%d]",SQL_ReadResult(Query,0), SQL_ReadResult(Query,1))


}

public save_usr(id)
{
new query[256]
format(query,charsmax(query),"UPDATE `table` SET `kills`='%d' WHERE `name` = '%s' ",UserData[id][gKills],UserData[id][gName] )

//Выполнение запроса
SQL_ThreadQuery(SQL_Tuple,"QueryHandler",query)
}



В этом случаи ничего не создает, даже таблицу.
Если кто может поделится кодом для такой задачи:
Записать в БД ник\стим_ид и фраги. Потом вывести в команду /check . Ключом будет ник\стим_ид
Ваш ник: лал фрагов: 12
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: