Od razu m?wi? ?e jestem zielony, poniewa? pierwszy raz pisz? cokolwiek z u?yciem sql oraz .db. Co do mojego problemu. Chcia?bym abym po wpisaniu komendy "/dodaj" do pliku.db zosta?y dodane 2 argumenty: nazwa pojazdu oraz jego ID(z gry) oraz po wpisaniu "/pobierz" aby si? te 2 argumenty wy?wietli?y. Prosz? o przerobienie albo podpowied? co jest ?le bo sam robie to pierwszy raz i nie wiem jak by to mia?o wygl?da?(poradnik do sql widzia?em). Mam co? takiego:
[lua]
local connect = dbConnect ( "sqlite", "aukcje.db" )
if connect then
outputDebugString( "Po??czenie z baz? SQLite zako?czy?o si? powodzeniem.")
else
outputDebugString( "Po??czenie z baz? SQLite zako?czy?o si? nie powodzeniem.")
stopResource(getThisResource())
end
function dodajs ()
dbQuery ( connect, "INSERT INTO aukcje ( pojazd, idpojazdu ) VALUES ( ?,?)", pojazd, idpojazdu)
end
addCommandHandler("dodajs", dodajs)
function create_table ()
dbExec ( connect, "CREATE TABLE IF NOT EXISTS aukcje ( pojazd VARCHAR, idpojazdu INTEGER )" )
end
addCommandHandler( "stworz", create_table)
function dodajdosql (source, commandName)
if isPedInVehicle(source) then
local idpo = getPedOccupiedVehicle(source)
local pojazd = getVehicleName (idpo)
local idpojazdu = getElementModel (idpo)
dbQuery ( connect, "UPDATE aukcje SET idpojazdu = ? WHERE pojazd = ?", idpojazdu, pojazd)
else
r...
Witam mam na swoim serverze kod bankomatu i troche sie boje ze mozna to zaatakowa?
Czy mozna wykonac sqlinjection na ten kod ?
[lua]addEvent("doATMOperation", true)
addEventHandler("doATMOperation", resourceRoot, function(kwota)
-- kwota dodatnia - wplata
-- kwota ujemna - wyplata
if kwota>0 and kwota>getPlayerMoney(client) then return end -- komunikat bledu po stronie klienta
local dbid=getElementData(client,"UID")
if not dbid then return end -- nie powinno sie zdarzyc
if kwota>0 then
if getPlayerMoney(client)<kwota then return end
takePlayerMoney(client, kwota)
exports["yc-mysql"]:ustawRekord("UPDATE ogrpg_users SET bank_money=bank_money+"..(tonumber(kwota) or 0).." WHERE id="..tonumber(dbid).." LIMIT 1")
--triggerEvent("broadcastCaptionedEvent", client, getPlayerName(client).." wp?aca pieni?dze do bankomatu", 3, 20, true)
outputChatBox("Wplaciles pieni?dze", client, 255,0,0)
elseif kwota<0 then
local sr=exports["yc-mysql"]:pobierzRekord("SELECT `bank_money` FROM `ogrpg_users` WHERE id="..tonumber(dbid).." LIMIT 1")
if not sr or not sr.bank_money then return end -- nie opwinno sie wydarzyc
sr.bank_money=tonumber(sr.bank_money)
if (sr.bank_money<math.abs(kwota)) then
outputChatBox("Nie masz tyle ?rodk?w na koncie!", client, 255,0,0)
-- triggerClientEvent(client,"o...
Witam, zwracam si? do was z pewnym problemem.
Chcia?bym sprawdzi? czy tabela w SQLite istnieje ale nie wiem jak.
Pr?bowa?em kilkoma sposobami ale ?adne nie zadzia?.
Je?eli kto? wie jak to poprosz? o przyk?ad takiego zastosowania.
if connect then
outputDebugString("Po??czono z baz? danych")
else
outputDebugString("Nie uda?o si? po??czy? z baz? danych")
end
function zapis()
for k,v in ipairs(getElementsByType("vehicle")) do
local paliwo = getElementData(v, "fuel") or 0
local przebieg = getElementData(v, "przebieg") or 0
local woda = getElementData(v, "zapelnienie") or 0
dbQuery(connect, "INSERT INTO dane VAULES(?,?,?)", paliwo, przebieg, woda)
end
end
addEventHandler("onResourceStop",resourceRoot,zapis)
function odczyt()
dbQuery(connect, "SELECT * FROM dane")
end
addEventHandler("onResourceStart",resourceRoot,odczyt)
function aktualizacja()
for k,v in ipairs(getElementsByType("vehicle")) do
local id = getElementData(v, "car_id")
if id then
local paliwo = getElementData(v, "fuel") or 0
local przebieg = getElementData(v, "przebieg") or 0
local woda = getElementData(v, "zapelnienie") or 0
dbExec(connect, "UPADTE dane SET paliwo = "..paliwo..", przebieg = "..przebieg..", woda = "..woda.."" "WHERE id="..id.."")
end
end
end
setTimer(aktualizacja, 1000, 0)[/lua]
Chc? aby w trakcie zatrzymania zasobu zapisywa?o dane takie jak przebieg,pali...
Dzisiaj chcia?em przetestowa? ju? gotowy panel zarz?dcy frakcji PSP, kt?r? tworz? dla Naszej spo?eczno?ci, lecz przy dodawaniu znajomego do frakcji zas?b wywala? mi b??d.
Tre?? DB3: ERROR: nazwa_skryptu/s-side.lua:59:attempt to index field '?' (a nil value)
59 linijka:
[lua]if w[1].rank > 1 or w[1].rank == 1 then outputChatBox("* Nie mo?na zatrudni? tego gracza - pracuje ju? w tej frakcji!", plr) return end [/lua]
Kod na dodawanie - strona servera:
[lua]local function dodajPSP(plr, gracz, id_rangi)
if plr and gracz and id_rangi then
if isElementWithinMarker(plr, marker) then
local accountName = getAccountName(getPlayerAccount(plr))
if accountName then
local q_lider = dbQuery(db, "SELECT rank FROM faction WHERE login=?", accountName)
local w_lider = dbPoll(q_lider, -1)
if w_lider and #w_lider > 0 then
if w_lider[1].rank == 10 then
local graczDodawanyKonto = getAccountName(getPlayerAccount(gracz))
if graczDodawanyKonto then
local spr = dbQuery(db, "SELECT rank FROM faction WHERE login=?", graczDodawanyKonto)
local w = dbPoll(spr, -1)
if w[1].rank >= 1 or w[1].rank == 1 then outputChatBox("* Nie mo?na zatrudni? tego gracza - pracuje ju? w tej frakcji!", plr) return end
local pay = 0
local q = dbQuery(db, "INSERT INTO faction (login, rank, payment) VALUES(?,?,?)", graczDodawanyKonto, id_rangi, pay)
outputChatBox("* Zatrudni?e?/a? gracza o loginie...
Dzie? dobry, jestem pocz?tkuj?cy je?li chodzi o MySQL, lecz uda?o stworzy? mi si? system kont oraz zapisu danych gracza (tj. pozycja, skin, pieni?dze etc.).
Opracowa?em pewien system ochrony przed atakami SQL Injection i chcia?bym zapyta? znawc?w tematu czy to wystaczaj?ce.
Mianowicie gdy skrypt musi zapisa? jaki? string do MySQL to najpierw z poziomu LUA koduje go do base64 i otrzymany szyfr jest zapisywany do bazy danych MySQL (zamiast "czystego" stringu), a gdy go pobieram jest dekodowany. Osobi?cie nie potrafie wyobra?i? sposobu na SQL injection przy zastosowaniu czego? takiego, ale mo?e jest co? o czym nie wiem
Czyta?em, ?e stosowanie mysql_escape_string nie jest w 100% bezpieczne, a ponadto nie pozwala mi na zapisywanie polskich znak?w kt?rych potrzebuje
// Edit
Mam jeszcze jeden problem z MySQL.
Gdy skrypt nie wykonuje ?adnych zapyta? w ci?gu minuty, to trace po??czenie z MySQL. Problem znika gdy doda?em timera kt?ry co 30 sekund pinguje baze danych, ale po??czenie traci sie gdy wchodze do bazy danych z phpmyadmin. To normalne?
siemano, wst?pnie informuj?, ?e nie chc?, ?adnych wycink?w kodu, ?adnego kodu, kompletnie, chc? tylko s?owne wsparcie.
Rozwa?a?em nad tym ale nie wpad?o mi kompletnie nic do g?owy, w jaki spos?b zrobi? by do gridlist kt?ry utworzy?em wcze?niej doda? auta kt?re pobra?em z sql, i odwrotnie, jak klikn? na gridlist, po czym waln? spawn to ma si? pojazd pojawi?, lecz jak wyci?gn?? z clienta dok?adnie ten pojazd, skoro np planuj? zrobi? by 1 osoba mog?a mie? 2 lub wi?cej rekord?w w tabeli z przypisanymi pojazdami, moze nada? im id, wszystkie auta kt?re kto? kupi numerowa?, jednak jest to troszk? nie pod m?j gust, mo?na by te? teoretycznie sprawdza? po id pojazdu i ograniczy? u?ytkownika do kupowania maks 1 pojazdu o takim id.
Witam, ot?? pobra?em sobie Gamemode, a dok?adnie to: http://gtao.pl/%3Cfont-co...v2-vt102145.htm
I mam serwer na hostingu ServerProject a chcia? bym sobie po??czy? baze danych tak aby wszystko dzia?a?o odpowiednio. PS. Mam baze danych na MySQL w ServerProject.
[size=18][color=orange][center]SQL - SQLite[/center][/color][/size]
Witaj [you], w tym poradniku nauczysz się rozróżniać czym jest SQLite, a czym jest samo SQL. Bardzo wiele osób myśli, że jest to to samo, ale tak nie jest. Kolejną rzeczą, którą się dowiesz w tym poradniku, jest to, że nauczysz się podstawowych zapytań SQL i będziesz je stosować w skryptach Lua. Na sam koniec dowiesz się, jakie są funkcje SQL (SQLite) w Lua i jak wygląda ich składnia oraz przykłady zastosowań.
[size=14][color=#aaff00]Czym jest SQL?[/color][/size]
Jest to język programowania (język zapytań), dzięki któremu możemy zarządzać bazą danych (SQLite i MSQL), dodawać, usuwać, aktualizować oraz pobierać dane z tabeli, a także tworzyć i modyfikować tabele w bazie danych.
[size=14][color=#aaff00]Czym jest SQLite?[/color][/size]
SQLite jest systemem zarządzania bazą danych (inaczej samą bazą danych). SQLite możemy otworzyć przy pomocy programu DB Browser for SQLite, który możemy pobrać tutaj. Bazę danych tę obsługuje język SQL, który tutaj opisuję.
[size=18][color=orange][center]SQL w MTA i jej funkcje[/center][/color][/size]
W tej części poradnika postaram się wyjaśnić, jakie są funkcje SQL w MTA i jak ich używać.
[size=14][color=#aaff00]dbConnect[/color][/size]
Na samym początku wyjaśnię, jak połączyć się z Twoją bazą danych i poprzez jaką funkcję. Funkcja nazywa się dbConnect i jest bardzo łatwa w zastosowaniu.
[b]dbConnect[/b] jest funkcją typu [b]Side-Server[/b], możemy tylko używać...
Mam Problem poniewa? jak wchodze na serwer to mam 0 poten zarabiam np 150
wychodz? i zapisuj? si? 150 wchodze i mam 150 poten znowu zarabiam i mam 300 potem wychodze z serwer i wchodze i mam znowu 150
addEventHandler ( "onPlayerQuit", root, function ()
if polaczenie then
plr = source
konto = getPlayerAccount ( plr )
dbExec ( polaczenie, "CREATE TABLE IF NOT EXISTS OP_Players ( login INTEGER, skin INTEGER, portfel INTEGER, serial INTEGER )" )
local zapytanie = dbQuery ( polaczenie, "SELECT login FROM OP_Players WHERE login = ?", getPlayerName ( plr ) )
local wynik = dbPoll ( zapytanie, -1 )
dbFree ( zapytanie )
if #wynik == 0 then
dbQuery ( polaczenie, "INSERT INTO OP_Players ( login, portfel, skin, serial ) VALUES ( ?,?,?,? )", getPlayerName ( plr ), getPlayerMoney ( plr ), getElementModel ( plr ), getPlayerSerial ( plr ) )
elseif #wynik == 1 then
dbQuery ( polaczenie, "UPDATE INTO OP_Players SET skin = '?', portfel = '?', serial = '?', WHERE login = ?", getElementModel ( plr ), getPlayerMoney ( plr ), getPlayerSerial ( plr ), getPlayerName ( plr ) )
end
end
end)
addEventHandler ( "onPlayerLogin", root, function ( _, konto )
if polaczenie then
plr = source
local zapis = dbQuery ( polaczenie, "SELECT * FROM OP_Players WHERE login = ?", getPlaye...
Witam chce napisa? list? 10 os?b kt?re maj? najwi?cej exp. Ilo?? exp mia?aby by? pobierana z tabeli sql. Tu zaczyna si? problem bo nie wiem jak pobra? te dane z bazy i wy?wietli? t? list?.
Witam mam ma?y problem napisa?em sobie funkcj? na zapisywanie pojazdu gracza do bazdy danych (db.db) i mam problem. Jak zrobi? ?eby wyszukiwa?o po ID w bazie danych czy jest i je?eli jest to ?eby zamienia?y kordy x,y,z oraz rotacji rx,ry,rz. a je?eli nie ma to ?eby dodawa?o do bazydanych nowy pojazd.
Witam chwia?bym si? nauczy? u?ywania funkcji db (Bazy Danych). Wiem ?e s? funkcje takie jak :
-dbConnect - ??czenie z baza Danych ( MSQL, SQLite) - z tym nie mam problem?w
-dbExec - chodzi o zapytania ale nie wiem dok?adnie o co chodzi.
-dbQuery - Pobiera wyniki z bazy danych( chyba o to chodzi)
-dbPoll - sprawdza podan? warto?? pobran? z dbQuery
-dbFree - co? w stylu dbPoll
Chodzi mi g??wnie o to jak stosowa? zapytania SQL w podanych funkcjach i b?d? u?ywa? funkcji opracowanych przez Wielebnego :
[lua]
local SQL
local function connect()
-- w ponizszej linii uzupelnij dane autoryzacji
SQL = dbConnect("mysql", "dbname=x;host=y", "nazwa_uzytkownika","haslo","share=1")
if (not SQL) then
outputServerLog("BRAK POLACZENIA Z BAZA DANYCH!")
else
zapytanie("SET NAMES utf8;")
end
function pobierzTabeleWynikow(...)
local h=dbQuery(SQL,...)
if (not h) then
return nil
end
local rows = dbPoll(h, -1)
return rows
end
function pobierzWyniki(...)
local h=dbQuery(SQL,...)
if (not h) then
return nil
end
local rows = dbPoll(h, -1)
if not rows then return nil end
return rows[1]
end
function zapytanie(...)
local h=dbQuery(SQL,...)
local result,numrows=dbPoll(h,-1)
return numrows
end
--[[
function insertID()
return mysql_insert_id(SQL)
end
function affectedRows()
re...
Dobry, problem tkwi w pobraniu ilo?ci zapis?w w bazie sql...
Chcia?bym dowiedzie? si? jak sprawdzi? ILE zapis?w jest w bazie danych... Bez ?adnych b?achostek typu wyniki z dan? warto?ci?... Po prostu ilo?? wszystkich zapis?w...
Prosz? ?eby kto? zrobi? tak ?ebym tylko musia? uzupe?ni? dane do bazy tutaj daje kod.
[code]function saveallvehicles(modelID)
executeSQLDropTable ( "vehiclesaver" )
executeSQLCreateTable ( "vehiclesaver", "VehicleID INTEGER, px REAL, py REAL, pz REAL, rx REAL, ry REAL, rz REAL, Color1 INTEGER, Color2 INTEGER, Health REAL, upgrades TEXT, paintjob INTEGER, Hood INTEGER, Trunk INTEGER, FrontLeft INTEGER, FrontRight INTEGER,RearLeft INEGER, RearRight INEGER, FrontLeftPanel INTEGER, FrontRightPanel Integer, RearLeftPanel Integer, RearRightPanel Integer,Windscreen Integer,FrontBumper Integer, RearBumper Integer,FLL Integer,FRL Integer,RLL Integer, RRL Integer, VehOvL Integer, HR Real,TR Real,FLR Real,FRR Real, RLR Real, RRR Real,WFL Integer, WRL Intger, WFR Integer, WRR Integer, VehSirena Integer, EngineState Integer, XTUR Real, YTUR Real" )
local vehicles = (getElementsByType("vehicle"))
for i, vehicle in pairs (vehicles) do
local id = (getElementModel(vehicle))
if id == 602 or id == 545 or id == 496 or id == 517 or id == 401 or id == 410 or id == 518 or id == 600 or id == 527 or id == 436
or id == 589 or id == 580 or id == 419 or id == 439 or id == 533 or id == 549 or id == 526 or id == 491 or id == 474 or id == 445
or id == 467 or id == 604 or id == 426 or id == 507 or id == 547 or id == 585 or id == 405 or id == 587 or id == 409 or id == 466
or id == 550 or id == 492 or id == 566 or id == 546 or id == 540 o...
Cze??, mam pytanie do ludzi kt?rzy znaj? si? na j?zyku SQL, jak mog? doda? tablic? do SQLite? Poniewa? chcia?bym zapisa? tuning pojazdu, a nie wiem jaki typ danych da? do bazy. Jakie? sugestie?
Witam! Mam problem z jedn? w?asn? funkcj?. Mianowicie nie mog? jako? sprawi? by ona dzia?a?a poprawnie.
Kod:
function giveBusMoney(plr) local c = math.random(2, 7) local cel = getPlayerAccount(getAccountName(plr)) givePlayerCash(cel, c) outputChatBox("* Otrzyma?e? "..c.."PLN!", plr) end
addEvent("giveBusMoney", true) addEventHandler("giveBusMoney", getRootElement(), giveBusMoney)
Funkcja givePlayerCash:
function givePlayerCash(name, amount) local ac = getAccount(name) or getPlayerAccount(name)
if name then
name = getAccountName(ac) local plr = getPlayersAccounts(ac)
if plr then
local ac = getElementData(plr, "cash")
if ac then
setElementData(plr, "cash", ac+amount) end
executeSQLQuery("UPDATE PRS_Accounts SET cash='cash+"..amount.."' WHERE acc=?", name)
else executeSQLQuery("UPDATE PRS_Accounts SET cash='cash+"..amount.."' WHERE acc=?", name) end
end
end
B??dy w debugu:
/bus_s.lua:21: Bad Argument @ 'getAccount'
/bus_s.lua:21: Bad ARgument @ 'getPlayerAccount'
Wi?c tak jak w temacie, prosz? o jakie? przyk?ady z wyt?umaczeniem, bo na wiki nie rozumiem robi? jak w przyk?adzie i nie dzia?a, wi?c przyk?ady by si? przyda?y Podobno lepsze s? te funckje ni? modu? mta_mysql, dlatego chc? si? ich nauczy?.
[glow=orange]Witajcie ponownie ;D[/glow]
A wi?c panowie i panie, ostatnio zacz??em robi? system sql kont, wg waszych wskaz?wek.
Oczywi?cie all dzia?a, lecz jest problem teraz getPlayerAccount i getAccountName oraz co si? wi??e z tym ACL odpadaj?.
Mo?na si? z tym pogodzi?.
OnPlayerLogin mo?na ztrigerrowa?, to wiem i to mi dzia?a, lecz problem jest jak p??niej w grze przy zabezpieczeniach pobra? login gracza z SQL?
My?la?em ?eby przy logowaniu gracza nada? elementData z loginem pobranym z sql.
Tylko teraz pytanie: Czy to b?dzie bezpieczne ?
Witajcie!
Zrobi?em system SQL dzia?aj?cy na zasadzie zapisu na login.
I tu pojawia si? problem.
Dwa konta o loginach Oski i oski w SQL i w LUA znacz? to samo.
Oski = oski
I w takim wypadku buguje mi si? sql.
Macie jak?? rade ?