martinpozs

MySQL lekérdezés

13 hozzászólás ebben a témában

Sziasztok. Van egy kis login részem, full hülye vagyok a MySQL-hez, azt elmondom. Lekérem a MySQL-ből az accounts táblában lévő username részt. Eddig megvan, viszont ezek után hogyan lehetne azt, hogy ha már van ilyen felhasználónév regisztrálva, akkor ne engedje ezt az adott illetőnek?

MySQL scriptem: https://pastebin.com/RXk2ztwf

Illetve egyáltalán helyesen kértem én ezt le?

	local check = exports.mysql:_QuerySingle("select * from accounts where username = ? ",username)
	

Megosztás


Megosztás link alapján
Megosztás egy közösségi oldalon

Szia!

Tedd az username oszlopot unique-ra, és a probléma megoldva. Sőt, alapból azon kéne lennie, ha valami igényesebb dolgot szeretnél összevágni.

1 személy kedveli ezt

Megosztás


Megosztás link alapján
Megosztás egy közösségi oldalon

Amit leraktál if-be rakod és jó is, de igen 

Idézet Robika1 felhasználótól, 2 órája

 

Tedd az username oszlopot unique-ra

 

Megosztás


Megosztás link alapján
Megosztás egy közösségi oldalon

Köszönöm válaszotokat :) És feltölteni rá adatot hogyan tudok? Mármint melyik kell hozzá?

Megosztás


Megosztás link alapján
Megosztás egy közösségi oldalon

Köszönöm a segítségeteket! :) Igából nem az UPDATE-t használom, viszont maga az oldal segített jobban értelmezni az adott dolgot, amit köszönöm : ) ( végül rájöttem, hogy amit keresek az a dbExec )

	dbExec( connection, "INSERT INTO accounts VALUES (?,?,?,?,?)", 1, "username","password","email","ip" )
	

Megosztás


Megosztás link alapján
Megosztás egy közösségi oldalon

Nem baj, ez segített nekem kicsit, illetve legalább ezt is megtudtam, biztos hasznomra fog még válni ;) ! Illetve még egy kérdésem lenne ( igazából mondhatni ugyan az mint az alap kérdés, a lekérdezés... ), az előző másolt sorom az egy undorító, youtube videó utánzat volt. Most úgy gondoltam, magamtól is megpróbálok rájönni az SQL lekérdezésére, illetve adat feltöltésére. A "feltöltés" már megvan, ugye az a dbExec, viszont arra nem tudok rájönni, hogyan lehetséges magát az adatot lekérdezni, esetleg ezt egy outputChatBox-ba is kiíratni. ( pl.: lekérni a serial-t, ha van már ilyen felh. ne tudjon regisztrálni + ki is írni neki outputChatBox-ba a serialját. ) dbQuery-t nagyon nézegetem, próbálok rájönni, viszont nem megy. ( A MySQL-em: https://imgur.com/a/vfBR6, serial és az IP szándékosan van kitakarva! )

Megosztás


Megosztás link alapján
Megosztás egy közösségi oldalon

Nos, az előzőt megoldottam végül is. Viszont már tényleg egy utolsó kérdésem lenne. Sikeresen megcsináltam, hogy ha nem az adott felhasználónév/jelszó nem a kiválasztott géphez van társítva, akkor nem tud bejelentkezni, viszont nem tudom megcsinálni, hogy ha van már ilyen serial az accounts-ba, akkor ne tudjon létrehozni új felhasználót :/ . Esetleg valaki még ebben tudna segíteni?

	addEvent("loginPlayer", true)
function loginPlayer(player, username, password, serial)
    local check = exports.mta_connection:_QuerySingle("SELECT * FROM accounts WHERE username = ?",username)
    local serial = getPlayerSerial(player)
    if check then
        local checkPass = check.password
        local checkSerial = check.serial
        if ( checkSerial == serial ) then
            if (checkPass == password) then
                logIn(player,tostring(username),tostring(password))
                outputDebugString("User is loggined!")
                triggerClientEvent(player,"showHide",getRootElement())
            else
                exports["notices"]:addNotification(root,"Hibás felhasználónév/jelszó!",'error')
            end
        else
            exports["notices"]:addNotification(root,"Ez a felhasználó nem ehhez a számítógéphez van társítva!",'error')
        end
    else
        exports["notices"]:addNotification(root,"Hibás felhasználónév/jelszó!",'error')
    end
end
addEventHandler("loginPlayer", getRootElement(),loginPlayer)
	addEvent("registerPlayer", true)
function registerPlayer(player, username, password, email, serial, ip, money)
    local serial = getPlayerSerial(player)
    local check = exports.mta_connection:_QuerySingle("SELECT * FROM accounts WHERE serial = ?",serial)
    if ( check ~= serial ) then
        local account = getAccount(username)
        if account == false then
            local ip = getPlayerIP(player)
            local money = 100
            exports.mta_connection:_Exec("INSERT INTO accounts(username,password,email,serial,ip,money) values (?,?,?,?,?,?)",username,password,email,serial,ip,money)
            local addAccount = addAccount(tostring(username), tostring(password))
            if addAccount then
                exports["notices"]:addNotification(root,"A felhasználó sikeresen létrehozva!",'succes')
            else
                exports["notices"]:addNotification(root,"Hiba történt! Keress fel egy fejlesztőt a problémával kapcsolatban!",'error')
            end
        else
            exports["notices"]:addNotification(root,"Ez a felhasználónév már foglalt! Válassz másikat!",'error')
        end
    else
        exports["notices"]:addNotification(root,"Ehhez a számítógéphez van felhasználó társítva!",'error')
    end
end
addEventHandler("registerPlayer", getRootElement(), registerPlayer)
	

Megosztás


Megosztás link alapján
Megosztás egy közösségi oldalon

Elküldve (szerkesztve)

Unique legyen a serial oszlop.

Meg keress rá selectel a serial oszlopra, és ha false akkor még nincs bent olyan serial.

Szerkesztve thegergo02 által

Megosztás


Megosztás link alapján
Megosztás egy közösségi oldalon

Nos, hát jelenleg így állok, viszont ugye ezzel az a baj, hogy az accounts-ban az első sort íratja ki, amit legelsőnek talál. Hogyan tudnám megcsinálni, hogy az összeset keresse ki?

	local serial = getPlayerSerial(player)
local query = dbQuery(connect,"SELECT * FROM accounts WHERE serial = serial", serial)
local result, num_rows = dbPoll(query, -1)
if not ( result == nil ) then
    outputServerLog(result[1]["serial"])
else
    dbFree(query)
end
	

Megosztás


Megosztás link alapján
Megosztás egy közösségi oldalon

Vagy igazából itt van a MySQL scriptje, amit ugye youtube-ról másoltam. Esetleg eltudná valaki mondani, mit jelent maga a querySingle? Előre is köszönöm.

	local connection = nil
addEventHandler("onResourceStart",resourceRoot,function(resource)
        connection = dbConnect("mysql","dbname=ig_mta;host=localhost;port=3306;","root","martinka02")
        if connection then
            outputDebugString(getResourceName(resource) .. " : connected to database.")
            return true
        else
            outputDebugString(getResourceName(resource) .. " : Unable to connect with database. Please contact Developer.")
            return false
        end
    end
)
	function _Query( ... )
    if connection then
        local query = dbQuery(connection, ... )
        local result = dbPoll(query,-1)
        return result
    else
        return false
    end
end
	function _QuerySingle(str,...)
    if connection then
        local result = _Query(str,...)
        if type(result) == 'table' then
            return result[1]
        end
    else
        return false
    end
end
	function _Exec(str,...)
    if connection then
        local query = dbExec(connection,str,...)
        return query
    else
        return false
    end
end
	

Megosztás


Megosztás link alapján
Megosztás egy közösségi oldalon

Regisztrálj vagy jelentkezz be, hogy válaszolhass

Csak felhasználóként kommentelhetsz.

Regisztrálj

Légy közösségünk tagja még ma! Csak fél perc.


Regisztrálok

Jelentkezz be

Már van felhasználód? Lépj be!


Bejelentkezek