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

jak to napisać ? MySQL + AMXX


  • Zamknięty Temat jest zamknięty
12 odpowiedzi w tym temacie

#1 shoter09

    Życzliwy

  • Użytkownik

Reputacja: 5
Nowy

  • Postów:38
  • Lokalizacja:Poland
Offline

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 ?
  • +
  • -
  • 0
Dołączona grafika 178.19.107.42:27104
Dołączona grafika 31.134.62.28:27812


www.CS-POL[i]gon.eu

#2 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

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

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?
  • +
  • -
  • 0

#3 shoter09

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 5
Nowy

  • Postów:38
  • Lokalizacja:Poland
Offline

Napisano 19.05.2011 19:09

tak się składa że MySQL znam bardzo dobrze tylko nie umiem wykonywać zapytań przez amxx
  • +
  • -
  • 0
Dołączona grafika 178.19.107.42:27104
Dołączona grafika 31.134.62.28:27812


www.CS-POL[i]gon.eu

#4 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

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

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
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
  • +
  • -
  • 0

#5 shoter09

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 5
Nowy

  • Postów:38
  • Lokalizacja:Poland
Offline

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

insert into config set keyname='NICK_GRACZA', val='yes'

  • +
  • -
  • 0
Dołączona grafika 178.19.107.42:27104
Dołączona grafika 31.134.62.28:27812


www.CS-POL[i]gon.eu

#6 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

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

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!");

}




  • +
  • -
  • 1

#7 shoter09

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 5
Nowy

  • Postów:38
  • Lokalizacja:Poland
Offline

Napisano 20.05.2011 14:04

dzięki wielkie bardzo mi pomogłeś ;) reputacja dodana ;)
  • +
  • -
  • 0
Dołączona grafika 178.19.107.42:27104
Dołączona grafika 31.134.62.28:27812


www.CS-POL[i]gon.eu

#8 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

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

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 :P tematu na razie nie zamykam, bo może będziesz miał jeszcze jakieś pytania co do sql`owe api
  • +
  • -
  • 0

#9 shoter09

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 5
Nowy

  • Postów:38
  • Lokalizacja:Poland
Offline

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

Załączone pliki


Użytkownik shoter09 edytował ten post 20.05.2011 15:20

  • +
  • -
  • 0
Dołączona grafika 178.19.107.42:27104
Dołączona grafika 31.134.62.28:27812


www.CS-POL[i]gon.eu

#10 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

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

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.
  • +
  • -
  • 0

#11 shoter09

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 5
Nowy

  • Postów:38
  • Lokalizacja:Poland
Offline

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
  • +
  • -
  • 0
Dołączona grafika 178.19.107.42:27104
Dołączona grafika 31.134.62.28:27812


www.CS-POL[i]gon.eu

#12 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

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

Napisano 20.05.2011 15:42

no to tak masz, jak nie działa szukaj logów
  • +
  • -
  • 0

#13 shoter09

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 5
Nowy

  • Postów:38
  • Lokalizacja:Poland
Offline

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" ?

Załączone pliki


Użytkownik shoter09 edytował ten post 20.05.2011 22:21

  • +
  • -
  • 0
Dołączona grafika 178.19.107.42:27104
Dołączona grafika 31.134.62.28:27812


www.CS-POL[i]gon.eu




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

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