Elite Napisano 8 Stycznia (edytowane) Witam ponownie Tym razem mam problem z kodem. A mianowicie piszę plugin z podłączeniem pod bazę danych mysql. Plugin ma nabijać kille i asysty. Do tego jest stworzona topka. Wszystko super, ale gdy jakiś gracz wejdzie na serwer nie dodaje go do bazy i nie nalicza mu kili i asyst. Plugin łączy się z bazą, bo jak dodałem jakiegoś "gracza" w bazie to wyświetlało go w topce. To jest fragment, który powinien dodawać gracza do bazy. Spoiler public void OnClientPutInServer(int client) { kills[client] = 0; assists[client] = 0; if (IsFakeClient(client) || IsClientSourceTV(client)) return; int sid = GetSteamAccountID(client); char buffer[1024]; Format(buffer, sizeof(buffer), "SELECT `kills`,`assists` FROM `n_ranks` WHERE `steamid`=%d;", sid); DBResultSet query = SQL_Query(db, buffer); if (query == null) { char error[255]; SQL_GetError(db, error, sizeof(error)); PrintToServer("Nie udalo sie pobrac danych gracza %N. (error: %s)", client, error); return; } if (!SQL_GetRowCount(query)) { Format(buffer, sizeof(buffer), "INSERT INTO `n_ranks` VALUES(%d, `%N`, 0, 0);", sid, client); if (SQL_FastQuery(db, buffer)) { char error[255]; SQL_GetError(db, error, sizeof(error)); PrintToServer("Nie udalo sie dodac nowego gracza %N! (error: %s)", client, error); } return; } while (SQL_FetchRow(query)) { kills[client] = SQL_FetchInt(query, 0); assists[client] = SQL_FetchInt(query, 0); } } Nie wiem czy tylko tu może leżeć błąd, ale jakby co to pisać, bo całego kodu tez nie chcę dawać. @edit Tu jeszcze daje podłączenie do bazy i jak wygląda tabela. public void OnMapStart() { char error[128]; db = SQL_Connect("n_ranks", true, error, sizeof(error)); if (db == INVALID_HANDLE) { LogError("Could not connect: %s", error); return; } char buffer[1024]; Format(buffer, sizeof(buffer), "CREATE TABLE IF NOT EXISTS `n_ranks`(`steamid` INT NOT NULL PRIMARY KEY, `nick` VARCHAR(64), `points` INT NOT NULL, `kills` INT NOT NULL, `assists` INT NOT NULL);"); if (!SQL_FastQuery(db, buffer)) { SQL_GetError(db, error, sizeof(error)); PrintToServer("Nie udalo sie stworzyc tabeli. Error: %s", error); } } Edytowane 8 Stycznia przez Elite Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
KyOTV Napisano 8 Stycznia Porównaj sobie z tym co napisał @MAGNET Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Elite Napisano 8 Stycznia @KyOTV Też o tym pomyślałem, ale wydaje się wszystko dobrze. Nie wiem czy mam za słaby wzrok, ale nie wiem o co może chodzić Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
BinaR Napisano 11 Stycznia Robisz tabelę, w której umieszczasz 5 kolumn: SteamID, nick, punkty, zabójstwa i asysty z dopiskiem NOT NULL. Cytat `steamid` INT NOT NULL PRIMARY KEY, `nick` VARCHAR(64), `points` INT NOT NULL, `kills` INT NOT NULL, `assists` INT NOT NULL Twoje zapytanie do bazy danych podczas dodawania nowego użytkownika zawiera tylko 4 wartości. Powoduje to niezgodność, ponieważ na początku deklarujesz, że pole `assists` ma nie być puste, a nic do niego nie wprowadzasz Cytat Format(buffer, sizeof(buffer), "INSERT INTO `n_ranks` VALUES(%d, `%N`, 0, 0);", sid, client); Innymi słowy zapomniałeś dodać jeszcze jednego zera do zapytania dodającego nowego gracza do tabeli 😉 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Elite Napisano 11 Stycznia 27 minut temu, BinaR napisał: Innymi słowy zapomniałeś dodać jeszcze jednego zera do zapytania dodającego nowego gracza do tabeli 😉 Niestety nadal nic :/. Nie wiem o co może chodzić. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
fejmek 1 Napisano 12 Stycznia (edytowane) W dniu 8.01.2021 o 16:43, Elite napisał: Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Ukryj zawartość if (!SQL_GetRowCount(query)) { Format(buffer, sizeof(buffer), "INSERT INTO `n_ranks` VALUES(%d, `%N`, 0, 0);", sid, client); if (SQL_FastQuery(db, buffer)) { char error[255]; SQL_GetError(db, error, sizeof(error)); PrintToServer("Nie udalo sie dodac nowego gracza %N! (error: %s)", client, error); } return; } Masz tutaj taki łady debug... pokaż nam następnym razem co on tam wyświetla... (i w ogóle jakieś error logi jeśli są) W każdym bądź razie: poczytaj na temat mysql i sprawdzaj swoje polecenia INSERT INTO `n_ranks` (`steamid`, `nick`, `points`, `kills`, `assists`) VALUES ('%d', '%N', '0', '0', '0'); Też fajnie by było jakbyś zdefiniował wartości domyślne dla kolumn `points` `kill` i `assists` wtedy polecenie takie wyglądało by tak: INSERT INTO `n_ranks` (`steamid`, `nick`) VALUES('%d', '%N'); Jeszcze bardziej sponio by było gdyby tabela była w utf8mb4_unicode_ci Spoiler Nie wiem jak aktualizujesz nick gracza, ale ja zazwyczja robie tak, że l najpierw wrzucam dane do tabeli i jeśli ten gracz jest już w bazie aktualizuje nick gracza za pomocą takiego polecenia: INSERT INTO `n_ranks` (`steamid`, `nick`, `points`, `kills`, `assists`) VALUES ('%d', '%N', '0', '0', '0') ON DUPLICATE KEY UPDATE `nick` = '%N'; a potem dopiero pobieram dane na temat tego gracza za pomocą select. Edytowane 12 Stycznia przez fejmek Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Elite Napisano 12 Stycznia @fejmek Dzięki, ale sprawdzę w piątek, bo mnie w domu nie ma. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Elite Napisano 15 Stycznia @fejmek Ciągle nic ;/. Jak chcesz to na pw wyślę ci cały kod. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach
Elite 1 Napisano 15 Stycznia Można zamknąć pan fejmek pomógł serduszka dla niego ;D. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach