Talkactions Zarz?dzanie baz? danych z serwera

Status
Zamknięty.

Fafaper

User
Zarejestrowany
Dołączył
Luty 20, 2012
Posty
30
Liczba reakcji
2
Witam. Dzisiaj z nud?w napisa?em skrypt zarz?dzania baz? danych z poziomu serwera.

Spos?b dzia?ania:
  • W przypadku polecenia SELECT skrypt wykona funkcj? db.getResult - sk?adnia wygl?da w nast?puj?cy spos?b !sql SELECT * FROM players WHERE name = 'Specc'; level
    Pojawi nam si? na ekranie level postaci (w tym przypadku o nicku Specc) - !sql polecenie; co ma by? wy?wietlone. R?wnie? mo?emy u?y? komendy !sql SELECT level FROM players WHERE name = 'Specc'
  • W przypadku innych polece? kt?re zmieniaj? warto?ci w bazie danych skrypt wykona funkcj? db.executeQuery - sk?adnia wygl?da tak !sql UPDATE players SET level = '666' WHERE name = 'Specc'
    Czyli zamieni warto?? dla kolumny level gracza o nicku Specc.

Zabezpieczenia skryptu:
  • zabezpieczenia przez Group ID,
  • zabezpieczenie przez Access,
  • zabezpieczenie nickiem (nowe nicki dodaje si? w skrypcie tablica name),
  • je?li osoba nieodpowiednia (tj. bez odpowiedniego GID, Accessu czy nicku w skrypcie) b?dzie pr?bowa?a wykona? operacje zostanie wyrzucona z serwera. Skrypt zawiera r?wnie? warunek, kt?ry odpowiada za to i? po 3 pr?bach wpisania tej komendy - banuje (lecz funkcja nie jest dodana w skrypcie bo jej nie do ko?ca ogarniam [nie dzia?a?a na moim serwerze testowym]).

Skrypt:
Tworzymy plik onSay.lua i zapisujemy go w folderze data\talkactions\script\sql\onSay.lua
Do pliku wklejamy nast?puj?c? tre??.
PHP:
local config = {
	storage = 9999,
}

local name = {
	"Specc",
}

function onSay(cid, words, param)

	local user = {
		groupid = getPlayerGroupId(cid),
		access = getPlayerAccess(cid),
		name = getPlayerName(cid)
	}

	local zapytanie = string.explode(param, ";")
	local polecenie = string.explode(param, " ")
	
	
	if (user.groupid == 6) and (user.access == 5) and (isInArray(name, user.name)) then
		if (polecenie[1] == "SELECT") then
			if (polecenie[2] == "*") then
				local result = db.getResult(zapytanie[1])
				local zaznacz = result:getDataString(zapytanie[2])
				doPlayerSendCancel(cid, zaznacz)
				return true
			else
				local result = db.getResult(zapytanie[1])
				local zaznacz = result:getDataString(polecenie[2])
				doPlayerSendCancel(cid, zaznacz)
			end
		else
			db.executeQuery(zapytanie[1])
			doPlayerSendCancel(cid, zapytanie[1])
			return true
		end
	else
		local playerStorage = getCreatureStorage(cid, config.storage)
		if (playerStorage < 3 ) then
			doPlayerSetStorageValue(cid, config.storage, playerStorage+1)
			doRemoveCreature(cid)
			return true
		else
			-- tutaj mo?ecie doda? funkcj? banuj?c?, lecz nie doko?ca j? ogarn??em wi?c pozostawiam to wam ;)
			doRemoveCreature(cid)
			return true
		end
	end
end

W pliku talkactions.xml dopisujemy:
PHP:
	<talkaction log="yes" words="!sql" event="script" value="sql/onSay.lua"/>

Dobra to by by?o na tyle, jakby?cie zauwa?yli jaki? b??d to piszcie. Pisa?em na szybko ten post (w po?piechu). Pozdrawiam.
 
Odp: Zarz?dzanie baz? danych z serwera

Nie testowa?em ale wydaje si? dobry, z tym ?e nie wiem czy bardzo u?yteczny. W przypadku podania z?ych danych np odwo??nia si? do tabeli kt?ra nie istnieje mamy b??d.
Poza tym dost?p do bazy powinien mie? tylko admin a za pomoc? phpmyadmin jest bardzo wygodnie i intuicyjnie(nie ka?dy zna SQL)
 
Odp: Zarz?dzanie baz? danych z serwera

Dlatego jest zabezpieczenie nickiem, jak i r?wnie? mo?na zrobi? przez IP.
A my?l? ?e dla drobnych popraw w bazie danych nie potrzeba wchodzi? i ??czy? si? z baz? jak mo?na szybko i wygodnie przez klienta ;)
 
Odp: Zarz?dzanie baz? danych z serwera

Og?lnie unikalny skrypt. Masz wielkiego + za pomys?owo?? - skrypt jest u?yteczny.
Nie testowa?em ale my?l? ?e zadzia?a.


Pozdrawiam


Kahras
 
Status
Zamknięty.
Back
Do góry