Problem z zapytaniem
Andrzejek
14.05.2013
Witam, mam problem z zapytaniem ponieważ zrobiłem tak:
public client_connect(id) { if(SqlConnected) { new Data[1] Data[0] = id new qCommand[512], sid[32], name[33]; get_user_authid(id, sid, charsmax(sid)) get_user_name(id, name, charsmax(name)); format(qCommand, sizeof qCommand-1, "SELECT * FROM `amx_jailbansct` WHERE `nick_gracza` = '%s', WHERE `authid` = '%s'", name, sid) SQL_ThreadQuery(SQL_TUPLE, "CheckHandler", qCommand, Data, 1) } else lacz_sql(); } public CheckHandler(FailState, Handle:Query, Error[], Errorcode, Data[], DataSize) { new id = Data[0] if(Errorcode) { log_amx("Blad w zapytaniu %s [CheckData]", Error) return PLUGIN_CONTINUE; } if(FailState == TQUERY_CONNECT_FAILED) { log_amx("Nie mozna podlaczyc sie do bazy danych.") return PLUGIN_CONTINUE; } else if(FailState == TQUERY_QUERY_FAILED) { log_amx("Zapytanie anulowane [CheckData]") return PLUGIN_CONTINUE; } if(!SQL_MoreResults(Query)) { blokada[id] = false; } else { blokada[id] = true; } return PLUGIN_CONTINUE }
I powinno to tak działać, że jeżeli gracz jest wpisany w bazie to daje mu zmienną blokada[id] = true; Ale coś nie działa
Kolega mi pomagał z tym, ale on nie wie czemu tak się dzieje
GwynBleidD
14.05.2013
Zamień
if(!SQL_MoreResults(Query)) { blokada[id] = false; } else { blokada[id] = true; }
na:
blokada[id] = SQL_NumResults(Query)>0;
bo MoreResults nie służy do tego. A poza tym masz błąd w zapytaniu
SELECT * FROM `amx_jailbansct` WHERE `nick_gracza` = '%s', WHERE `authid` = '%s'
Zamień na:
SELECT * FROM `amx_jailbansct` WHERE `nick_gracza` = '%s' OR `authid` = '%s'
Tylko nie wiem, czy powinno być OR, czy AND. Nie wiem jak to ma działać Ale raczej OR
Andrzejek
15.05.2013
Brak, error logów, chodzi o to że baza się łaczy, dodaje komuś tam blokadę i sprawdzam w bazie to jest, tylko gdy zmienię mapę i połączę się z serwerem to nie mam tej blokady a w bazie danych jest
Andrzejek
15.05.2013
Okej, sam sobie poradziłem, ale mam problem z usuwaniem bazy
new sZapytanie[512]; format(sZapytanie, 511, "INSERT INTO `amx_jailbansct` (`nick_gracza`, `authid`, `date`, `admin_sid`, `admin_name` ) VALUES ('%s', '%s', '%s', '%s', '%s')", name, sid, date, admin_sid, admin_name); SQL_ThreadQuery(SQL_TUPLE, "ADD_handle", sZapytanie);
To jak to przerobić żeby usuwało bana?
GwynBleidD
15.05.2013
Po 1. musisz mieć unikalną wartość, która pozwoli Ci usunąć konkretnego bana. Może być to nick, może być steamid, może być po prostu ID bana. Następnie wykonujesz zapytanie
DELETE FROM `amx_jailbansct` WHERE `nick_gracza`=%s OR `authid`=%s
Z przerobieniem na ID bana problemów mieć nie powinieneś, ale wątpię, żebyś używał id
Andrzejek
15.05.2013
nie ogarniam, tego, jeżeli wybiorę jakiegoś gracza to nic się nie dzieje
Gość_21977_* 15.05.2013
new Data[1] Data[0] = id new qCommand[512], sid[32], name[33]; get_user_authid(id, sid, charsmax(sid)) get_user_name(id, name, charsmax(name)); format(qCommand, sizeof qCommand-1, "SELECT * FROM `amx_jailbansct` WHERE `nick_gracza` = '%s', WHERE `authid` = '%s'", name, sid) SQL_ThreadQuery(SQL_TUPLE, "CheckHandler", qCommand, Data, 1)
Unban dla wszystkich gwarantuje dobrodziej o nicku:
';DELETE FROM amx_jailbansct;--