Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

SQL - Co nie tak?


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
6 odpowiedzi w tym temacie

#1 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 10.12.2011 20:18

Plugin działa, jednak nie łączy się z bazą danych. sprawdzam na localu. błędnej bazy nie ma, bo diablo działa elegancko.

/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "CheQ"

new Handle:g_SqlTuple
new g_sqlTable[64] = "tables"
new g_boolsqlOK=0
new sqlstart = 30 // Tyle prob jest na mape na poprawne polaczenie - bo cos sie zapetla gdy wylancza sie serwer (zmiena mapy?)
new asked_sql[33]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)

register_cvar("sql_host","127.0.0.1",FCVAR_PROTECTED)
register_cvar("sql_user","root",FCVAR_PROTECTED)
register_cvar("sql_pass","",FCVAR_PROTECTED)
register_cvar("sql_database","achivments",FCVAR_PROTECTED)

register_cvar("sql_table","testow_baza",FCVAR_PROTECTED)

register_clcmd("say /zapisz","ZapiszDane")
}
public sql_start()
{
if(sqlstart<0) return
if(g_boolsqlOK) return

new host[128]
new user[64]
new pass[64]
new database[64]

get_cvar_string("sql_database",database,63)
get_cvar_string("sql_host",host,127)
get_cvar_string("sql_user",user,63)
get_cvar_string("sql_pass",pass,63)

g_SqlTuple = SQL_MakeDbTuple(host,user,pass,database)


 
get_cvar_string("sql_table",g_sqlTable,63)

new q_command[512]
format(q_command,511,"CREATE TABLE IF NOT EXISTS `%s` ( `nick` VARCHAR( 64 ),`ip` VARCHAR( 64 )",g_sqlTable)

SQL_ThreadQuery(g_SqlTuple,"TableHandle",q_command)
}
public TableHandle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
// lots of error checking
g_boolsqlOK=1
if(Errcode)
{
  g_boolsqlOK=0;
  console_print(0,"Nie polaczono!");
}
if(FailState == TQUERY_CONNECT_FAILED)
{
  g_boolsqlOK=0;
  console_print(0,"Nie polaczono!");
  return PLUGIN_CONTINUE
}
else if(FailState == TQUERY_QUERY_FAILED)
{
  g_boolsqlOK=0;
  console_print(0,"Nie polaczono!");
  return PLUGIN_CONTINUE
}
  
   
return PLUGIN_CONTINUE
}
public ZapiszDane(id)
{
new name[64];
new ip[64];
get_user_name(id,name,63);
get_user_ip(id, ip ,63,1)
if(g_boolsqlOK)
{
  new q_command[512];
  format(q_command,511,"UPDATE `%s` SET `ip`='%s' WHERE `nick`='%s'",g_sqlTable,ip,name)
  SQL_ThreadQuery(g_SqlTuple,"Save_xp_handle",q_command)
}
else
  sql_start()
}
public Save_xp_handle(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
if(Errcode)
{
  log_to_file("addons/amxmodx/logs/diablo.log","Error on Save_xp query: %s",Error)
}
if(FailState == TQUERY_CONNECT_FAILED)
{
  log_to_file("addons/amxmodx/logs/diablo.log","Could not connect to SQL database.")
  return PLUGIN_CONTINUE
}
else if(FailState == TQUERY_QUERY_FAILED)
{
  log_to_file("addons/amxmodx/logs/diablo.log","Save_xp Query failed.")
  return PLUGIN_CONTINUE
}
   

return PLUGIN_CONTINUE
}

co jest źle, gdzie błąd i pomoc bym prosił.
  • +
  • -
  • 0

#2 Gh0st

    :)

  • Power User

Reputacja: 852
Czempion

  • Postów:920
  • GG:
  • Imię:Tomek
  • Lokalizacja:Rabka-Zdrój
Offline

Napisano 10.12.2011 20:21

format(q_command,511,"CREATE TABLE IF NOT EXISTS `%s` ( `nick` VARCHAR( 64 ),`ip` VARCHAR( 64 )",g_sqlTable)

na

format(q_command,511,"CREATE TABLE IF NOT EXISTS `%s` ( `nick` VARCHAR( 64 ),`ip` VARCHAR( 64 ) )",g_sqlTable)
tutaj masz bład. Brakowało ) w Zapytaniu. Raczej nie pomoże ale już jakiś błąd mniej. Ale możesz sprawdzić ^^

Użytkownik Gh0st edytował ten post 10.12.2011 20:22

  • +
  • -
  • 0

#3 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Autor tematu
  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 11.12.2011 20:40

niestety, nie to.

podbijam.
  • +
  • -
  • 0

#4 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 11.12.2011 21:38

ghost ma racje, poza tym źle wywołujesz sql_start(), to powinno dziać się w npplugin_cfg()
  • +
  • -
  • 0

#5 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Autor tematu
  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 12.12.2011 19:30

to od Ghosta poprawiłem. Jak powinien kod wygladac? czy jak dodam
public plugin_cfg()
{
		 sql_start()
}

zadziała?

nie działa :P

podbijam. Prosiłbym nawet o krótki kod który pobiera i wczytuje dane z SQL'em jeśli tu walnąłem coś.
  • +
  • -
  • 0

#6 speedkill

    Godlike

  • Przyjaciel

Reputacja: 1 592
Godlike

  • Postów:2 733
  • GG:
  • Steam:steam
  • Imię:Michał
  • Lokalizacja:Prudnik
Offline

Napisano 12.12.2011 19:56

Sprawdź
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <sqlx>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Administrator"

new nazwa_gracza[33][64]
new name[64]
new Handle:g_SqlTuple
new bool:WczytaneDane[33] = {false}

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_cvar("amx_test_host", "localhost")
	register_cvar("amx_test_user", "root")
	register_cvar("amx_test_pass", "root")
	register_cvar("amx_test_db", "db")
	set_task(1.0, "polacz")
}
public polacz()
{
	new Host[32], User[32], Pass[32], DB[32]
	get_cvar_string("amx_test_host", Host, 31)
	get_cvar_string("amx_test_user", User, 31)
	get_cvar_string("amx_test_pass", Pass, 31)
	get_cvar_string("amx_test_db", DB, 31)
	g_SqlTuple = SQL_MakeDbTuple(Host,User,Pass,DB)
	
	new error, szError[128]
	new Handle:hConn = SQL_Connect(g_SqlTuple,error,szError, 127)
	if(error){
		log_amx("Error: %s", szError)
		return;
	}
	
	new Handle:Queries = SQL_PrepareQuery(hConn,"CREATE TABLE IF NOT EXISTS `Test` (name VARCHAR(64) NOT NULL, ip VARCHAR(64) NOT NULL, PRIMARY KEY(name))") 
	
	SQL_Execute(Queries)
	SQL_FreeHandle(Queries)
	SQL_FreeHandle(hConn)
}
public plugin_end()
{
	SQL_FreeHandle(g_SqlTuple)
}
public client_connect(id)
{
	new name[64];
	get_user_name(id, name, charsmax(name))
	if(strcmp(nazwa_gracza[id], name))
	{
		WczytaneDane[id] = false
		load(id)
	}		
}

public client_disconnect(id)
{
	save(id)
}
public client_authorized(id)
{
	get_user_name(id, nazwa_gracza[id], charsmax(nazwa_gracza[]))
}
public load(id)
{
	new name[64], szTemp[512]
	get_user_name(id, name, 63)
	replace_all(name, 63, "'", "\'")
	replace_all(name, 63, "`", "\`")
	
	new data[1]
	data[0] = id
	
	formatex(szTemp,charsmax(szTemp),"SELECT * FROM `Test` WHERE `name` = '%s'", name)
	SQL_ThreadQuery(g_SqlTuple,"register_client",szTemp, data, sizeof(data))
}

public register_client(failstate, Handle:query, error[],errcode, data[], datasize)
{
	if(failstate != TQUERY_SUCCESS){
		log_amx("<Query> Error: %s", error)
		return;
	}
	new id = data[0];
	if(!is_user_connected(id) && !is_user_connecting(id))
		return;
	
	if(SQL_NumRows(query))
	{
		SQL_ReadResult(query,SQL_FieldNameToNum(query,"name"), name, 63)
		WczytaneDane[id] = true
	} 
	else
	{
		new name[64],ip[16]
		get_user_name(id, name, 63)
		get_user_ip(id,ip,15,1)
		replace_all(name, 63, "'", "\'")
		replace_all(name, 63, "`", "\`")
		
		new szTemp[512], data[1]
		data[0] = id
		formatex(szTemp,charsmax(szTemp),"INSERT INTO `Test` (`name`, `ip`) VALUES ('%s','%s')", name, ip)
		SQL_ThreadQuery(g_SqlTuple,"IgnoreHandleInsert",szTemp,data, 1)
	}
}
public save(id)
{	
	if(!WczytaneDane[id])
	{
		load(id);
		return PLUGIN_HANDLED;
	}
	new szTemp[512]
	new name[64],ip[16]
	get_user_name(id, name, 63)
	get_user_ip(id,ip,15,1)
	replace_all(name, 63, "'", "\'")
	replace_all(name, 63, "`", "\`")
	
	formatex(szTemp,charsmax(szTemp),"UPDATE `Test` SET `ip` = '%s' WHERE `name` = '%s'",ip, name)
	SQL_ThreadQuery(g_SqlTuple,"IgnoreHandleSave",szTemp)
	return PLUGIN_CONTINUE
}

public IgnoreHandleInsert(failstate, Handle:query, error[], errnum, data[], size){
	if(failstate != TQUERY_SUCCESS){
		log_amx("<Query> Error: %s", error);
		return;
	}
	WczytaneDane[data[0]] = true;
}

public IgnoreHandleSave(failstate, Handle:query, error[], errnum, data[], size){
	if(failstate != TQUERY_SUCCESS){
		log_amx("<Query> Error: %s", error);
		return;
	}
}
Sebul wbija pierwszy raz to nie sprawdza nawet , wbija drugi raz to sprawdza bo nick jest pobrany więc co źle ?
Jak gośc wbija na serwer pierwszy raz na tej mapie to zeruje wartości tu chodzi głównie jak by dodał zmienne, więc jakoś nie kapuje co źle :P
Ps.Jeśli nick jest pobrany na tej mapie to nie będzie zerował zmiennych.
sebul (12.12.2011 20:14):
Coś chyba źle... "client_authorized" wykonuje się po "client_connect".

Użytkownik speedkill123 edytował ten post 12.12.2011 20:21

  • +
  • -
  • 1

If you can dream it, you can do it.


#7 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Autor tematu
  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 13.12.2011 17:08

jedną rzecz zmieniłem i działa. Dzięki wielkie ;)
  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych