←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Problem z zapytaniem

  • +
  • -
Andrzejek - zdjęcie 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

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie 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ć :P Ale raczej OR

 

Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 14.05.2013

Jednak nie działa :( A jak wykonać zapytanie, która usuwa blokadę?

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 15.05.2013

DELETE FROM?

 

Pokazałbyś może jakieś error logi.

Odpowiedz

  • +
  • -
Andrzejek - zdjęcie 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

Odpowiedz

  • +
  • -
Andrzejek - zdjęcie 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?

Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie 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 :)

Odpowiedz

  • +
  • -
Andrzejek - zdjęcie Andrzejek 15.05.2013

nie ogarniam, tego, jeżeli wybiorę jakiegoś gracza to nic się nie dzieje :(

Odpowiedz

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;--
Odpowiedz