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.
|
Guest Message by DevFuse
jak to napisać ? MySQL + AMXX
Temat rozp.
shoter09
, 19.05.2011 17:59
12 odpowiedzi w tym temacie
#1
Napisano 19.05.2011 17:59
Witam
Mógłby ktoś powiedzieć jak zrobić, że jak ktoś wpisze say /add to wtedy dodaje nowy rekord do MySQL z jego nickiem ?
Mógłby ktoś powiedzieć jak zrobić, że jak ktoś wpisze say /add to wtedy dodaje nowy rekord do MySQL z jego nickiem ?
#2
Napisano 19.05.2011 19:08
to nie forum wsparcia MySQL, więc zanim zadałeś to pytanie na pewno zapoznałeś się z samym relacyjnym modelem danych oraz składnią języka SQL
mam rację, że nie i chcesz gotowca?
mam rację, że nie i chcesz gotowca?
#3
Napisano 19.05.2011 19:09
tak się składa że MySQL znam bardzo dobrze tylko nie umiem wykonywać zapytań przez amxx
#4
Napisano 19.05.2011 19:14
MySQL - z czym to się je. - AMXX.pl: Support AMX Mod X
w takim razie ten temat wyczerpuje asynchroniczne wykonywanie zapytań,
złap komendę add
dodajNickDoBazy powinno wywołać SQL_ThreadQuery z INSERTem
zanim insert to musisz mieć tabelę, więc w ten sam sposób w plugin_cfg powiedzmy zrób CREATE`y
w takim razie ten temat wyczerpuje asynchroniczne wykonywanie zapytań,
złap komendę add
register_clcmd("say /add", "cmdAdd");
public cmdAdd(id){ new szName[32]; get_user_name(id, szName, 31); dodajNickDoBazy(id, szName); }
dodajNickDoBazy powinno wywołać SQL_ThreadQuery z INSERTem
zanim insert to musisz mieć tabelę, więc w ten sam sposób w plugin_cfg powiedzmy zrób CREATE`y
#5
Napisano 19.05.2011 20:42
możesz podać gotowy skrypt do skompilowania ? Wiem, że to wygląda jak bym szedł na łatwiznę i nawet nie próbował ale próbowałem już z 50 razy dodawać ten rekord przez amxx i nic.
chciałbym żeby ktoś zrobił, że jak ktoś wpisze say /add to wykona się zapytanie
chciałbym żeby ktoś zrobił, że jak ktoś wpisze say /add to wykona się zapytanie
insert into config set keyname='NICK_GRACZA', val='yes'
#6
Napisano 19.05.2011 21:54
#include <amxmodx> #include <amxmisc> #include <sqlx> #define PLUGIN "SQL Test" #define VERSION "1.0" #define AUTHOR "R3X" new Handle:gTuple; new gszQuery[512]; new const giMax = sizeof(gszQuery); stock SQL_PrepareString(const szQuery[], szOutPut[], size){ copy(szOutPut, size, szQuery); replace_all(szOutPut, size, "'", "\'"); replace_all(szOutPut,size, "`", "\`"); } public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR); register_clcmd("say /add", "cmdAdd"); } public plugin_cfg(){ gTuple = SQL_MakeDbTuple("localhost", "root", "root", "test"); if(gTuple == Empty_Handle){ set_fail_state("Cant create connection tuple"); } new iErr, szError[32]; new Handle:link = SQL_Connect(gTuple, iErr, szError, 31); if(link == Empty_Handle){ log_amx("Error (%d): %s", iErr, szError); set_fail_state("Cant connect to database"); } new Handle:query; query = SQL_PrepareQuery(link, "CREATE TABLE IF NOT EXISTS `config`( \ cid INT(11) UNSIGNED AUTO_INCREMENT,\ keyname VARCHAR(32) NOT NULL, \ val VARCHAR(32) NOT NULL, \ PRIMARY KEY(cid) \ )"); SQL_Execute(query); SQL_FreeHandle(query); SQL_FreeHandle(link); } public cmdAdd(id){ new szName[64]; get_user_name(id, szName, 31); SQL_PrepareString(szName, szName, 63) new data[1]; data[0] = id; formatex(gszQuery, giMax, "INSERT INTO `config` SET keyname='%s', val='yes'", szName); SQL_ThreadQuery(gTuple, "handleInsertNick", gszQuery, data, sizeof(data)); } public handleInsertNick(failstate, Handle:query, error[], errnum, data[], size){ if(failstate != TQUERY_SUCCESS){ log_amx("SQL Insert error: %s",error); return; } client_print(data[0], print_chat, "Dodano!"); }
#7
Napisano 20.05.2011 14:04
dzięki wielkie bardzo mi pomogłeś reputacja dodana
#8
Napisano 20.05.2011 14:25
część w plugin_cfg jest wykonywana normalnie, bo może będziesz chciał zrobić 2 lub więcej tabel, wtedy nie ma sensu łączyć się tyle razy i można to zrobić jedno za drugim, insert jest tym drugim sposobem i nie zawiesza serwera na czas komunikacji pewnie doskonale o tym wiesz, ale jak dasz klucz główny na keyname to będziesz mógł w handleInsertNick złapać próby nadpisania klucza konfiguracji tematu na razie nie zamykam, bo może będziesz miał jeszcze jakieś pytania co do sql`owe api
#9
Napisano 20.05.2011 15:19
próbowałem dorzucić, że jak wpisze /add1 i /add2 to dodają się inne rekordy ale coś mi wyjść nie może. Możesz pokazać jak zrobić że jak wpisze /add1 to dodaje się to co w tym pluginie co wyżej mi podałeś a jak ktoś wpisze /add2 to w keyname dodaje nazwa mapy, a w val dodaje aktualną datę i godzinę w formacie rrrr-mm-dd hh:mm ?
Oto mój kod w załączniku ale nie działa
Oto mój kod w załączniku ale nie działa
Załączone pliki
Użytkownik shoter09 edytował ten post 20.05.2011 15:20
#10
Napisano 20.05.2011 15:37
Jak masz poważny zamiar napisać plugin używający bazy danych to najpierw naucz się pisać podstawowe pluginy. W kodzie z załącznika nie ma ani śladu próby pobrania nazwy mapy czy daty, a jedynie mój kod sprzed kilku postów z podwojonymi funkcjami.
Poczytaj tutoriale i dokumentację naszą czy też oryginalną. Dużo informacji jest też dostępnych w plikach .inc amxxa. Nie jestem Ci w stanie w tym momencie pomóc, wyjdzie ma to, że sam napiszę cały Twój plugin.
Poczytaj tutoriale i dokumentację naszą czy też oryginalną. Dużo informacji jest też dostępnych w plikach .inc amxxa. Nie jestem Ci w stanie w tym momencie pomóc, wyjdzie ma to, że sam napiszę cały Twój plugin.
#11
Napisano 20.05.2011 15:40
chodzi mi o to jak dodać 2 lub więcej funkcji z sql może być że /add1 dodaje keyname NICK a val 1 a jak /add2 to dodaje keyname NICK a val 2
#12
Napisano 20.05.2011 15:42
no to tak masz, jak nie działa szukaj logów
#13
Napisano 20.05.2011 15:55
Ok, udało mi się zrobić zapisywanie mapy, ale mam problem z czasem. Chcę zrobić tak, że jak wpisze say /t to doda rekord keyname=NICK, val=CZAS[rok-mies-dzien HH:MM]
Kod w załączniku powiedźcie co jest źle
i jeszcze jak zrobić, że jak wpisze /t to pokazuje się w say "Dodano czas", a jak /m to "Dodano mape" ?
Kod w załączniku powiedźcie co jest źle
i jeszcze jak zrobić, że jak wpisze /t to pokazuje się w say "Dodano czas", a jak /m to "Dodano mape" ?
Załączone pliki
Użytkownik shoter09 edytował ten post 20.05.2011 22:21
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych