[VERALTET] [Tutorial] MySQL Login/Register System [Simple]

  • Guten Tag!
    Hiermit werde ich ein kleines Tutorial schreiben, wie man ein Login/Register System Basierend auf MySQL erstellt.
    Sollte jemand Fehler finden, so kann er sich Frei fühlen, sie hier zu Posten.


    Was benötigt man?


    - Ein MTA 1.3 Server oder höher
    - Das MTA MySQL-Plugin (Nicht zwingend benötigt, jedoch arbeite ich hier damit)
    - Ein MySQL-Server(Hier zu Finden)
    - MySQL- Workbench(Hier zu finden) Nicht zwingend notwendig, die Datenbanken kann man auch per Kommandozeile erstellen, Ich arbeite hier damit
    - Lua Kentnisse
    - MySQL Kentnisse


    Und das war's eigentlich schon.


    MySQL Setup + Datenbank.


    Wenn ihr die Sachen Installiert habt, die ihr Installiert haben solltet, und womit ich nun Arbeite, müsst ihr folgendes Tuen.
    (Falls ein paar Schritte nicht klappen, rebootet euren PC einmal.)
    Achtet darauf, dass der MySQL Server gestartet ist. Dies könnt ihr im XAMPP Control Panel überprüfen. (Ein Grünes "Running" muss bei MySQL erscheinen)
    Wenn ihr dies gemacht habt, können wir uns nun der Workbench zuwenden.
    Startet die MySQL Workbench, und es müsste nun ein Fenster mit 3 Tabellen oder Listen vor euch zu finden sein.
    Schaut in der ersten Liste rein, und eventuel findet ihr dort ein Eintrag namens "Localhost". Dies ist euer Lokale MySQL Server.
    Falls er nicht exestiert, klickt auf "New Connection" und gebt im Hostname die IP "127.0.0.1" und als Username "root" ein. (Ohne "")
    Der Standartport ist 3306, den müsstet ihr Standartgemäß haben. Oben bei "Connection Name" könnt ihr noch einen Namen bestimmen, wie zum Beispiel "Homeserver".
    Klickt auf Fertig.
    Nun macht ihr ein Doppelklick auf den Eintrag, und ihr müsstet zu einem neuen Fenster gelangen.
    Links findet ihr dem Object Browser, wo die Schemas(Schemen?) zu finden sind, also die Datenbanken.
    Standartdatenbanken sind dort auch aufgelistet, wie z.B. "cdcol" oder "test".
    In der Mitte müsste sich ein Eingabefenster befinden, wo ihr MySQL-Abfragen ausführen könnt. Was das Rechts ist, bin ich mir noch nicht sicher. Warscheinlich Codeschnipsel.
    Da wir aber eine neue Datenbank für unserem Server brauchen, müssen wir sie erst Erstellen.


    Klickt dazu oben auf das Goldene Zeichen mit dem Plus(Neue Datenbank erstellen.)
    Wenn ihr das gemacht habt, könnt ihr ein Name für die Datenbank auswählen. Ich nenne meine testweise "dbs_login".
    Klickt auf "Apply" und erstellt die Datenbank.
    Nun müsste sie Links auftauchen.
    Mit einem Doppelklick wählen wir sie aus.
    Wenn ihr das gemacht habt, findet ihr 3 "Unterodner".
    Mit einem Rechtsklick auf den unterordner "Tables" können wir einen Table erstellen, weil wir ja noch keinen Haben.
    Klicken wir also auf "create Table".


    Oben könnt ihr wieder den Tablename eingeben. Ich nenne meinen "accounts".
    Nun sieht ihr weiter unten viele Spalten.


    "Column Name" -> Neue Spalte
    "Datatype" -> Den Datentyp angeben.
    Primary Key wird verwendet, um 2 Tables miteinander zu verknüpfen, brauchen wir aber nicht. Aber wir müssen einen angeben, damit wir später die Daten in der Tabelle bearbeiten können.


    Erstellen wir also die Spalte "NAME", mit einem Doppelklick auf eine Freie flächer in der Gridliste, können wir das tuen.
    Ein Doppelklick auf den Eintrag bearbeitet ihn.
    Der Datentyp wird "varchar" sein, und wird für jeden Eintrag 32 Zeichen reserviert haben. also varchar(32).
    Wenn man ganze Zahlen abspeichern will, sollte man ein INT verwenden. Für Koordinaten oder Zahlen mit Nachkommastellen lieber ein Float.
    Für ganze Texte die man Abspeichern will, entweder TINYTEXT, TEXT oder LONGTEXT. Ich glaube es gibt auch MEDIUMTEXT.


    Warum 32? Weil ein Name in MTA nur 32 Zeichen enthalten kann. Glaube ich. :D


    Gut, haben wir dies gemacht, werde ich eine zweite Spalte namens "PASSWORT" erstellen.
    Auch wieder mit dem Datentyp varchar(100). 100 Deshalb, weil wir das Passwort spaeter verschluesseln.


    Außerdem erstelle ich noch die Spalte "ADMINLEVEL". Welcher Datentyp?
    Richtig, ein Integer.
    Ich setze die Default Value auf 0, da dort sonst garnichts steht. Wir können das am Script auch ändern, das kann aber MySQL für uns schon tun.
    So sieht es bei mir nun aus:


    Externer Inhalt www.abload.de
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.


    Gut, jetzt klicken wir auf "apply" und speichern die Tabelle.


    Nun erscheint links in dem Unterodner "Table" die Tabelle.
    Ein Rechtsklick auf die Tabelle und auf "Select Rows" können wir die Zeilen bekommen, die sich in der Tabelle befinden.
    Logisch, ist noch nichts drinne, das machen wir nun.


    MySQL im Script


    Wir benötigen 2 Scripts, ein Serverseitiges Script und ein Client-seitiges.
    Das Client-Seitige für die Grafische Benutzeroberfläche(GUI) und das Server-Seitige Script für die MySQL-Sachen.


    Ich beschleunige das jetzt mal. Erstellt eine neue Resourcen, von mir auch ein Gamemode, mit dem 2 Dateien.


    Meine Meta.xml sieht so aus:

    Code
    <meta>
    	<script src="client.lua" type="client" />
    	<script src="server.lua" type="server" />
    </meta>








    In dem Server-Seitigem script schreiben wir nun die Funktion, mitder wir überprüfen können, ob sich der Spieler schon in der Datenbank beim Betreten des Server exestiert.
    Dazu fügen wir das in dem Client-Seitigem Script ein:


    Lua
    local gMe = getLocalPlayer()addEventHandler("onClientResourceStart", getResourceRootElement(), function()	triggerServerEvent("onDatenbankCheck", gMe)end)


    (gMe ist eine Angewohnheit von mir, ist der Lokale spieler)


    Beim Server müssen wir nun die Verbindung mit unserem MySQL Server + Datenbank herstellen, darum fügen wir das oben rein:


    Lua
    local mysqlhost = "localhost" -- die Adresselocal mysqluser = "root" -- der Benutzer(Bis jetzt der Adminstrator, ich hab die einrichtunge eines MySQL Benutzerkontos uebersprungen)local mysqlpw = "" -- Passwort(Keins, oder wenn das, was angegeben wurde bei der Installation von XAMPP)local mysqldatabase = "dbs_login" -- die Datenbankhandler = mysql_connect ( mysqlhost, mysqluser, mysqlpw, mysqldatabase ) -- Herstellung der Verbindung




    Nun müssten wir die Verbindung haben, wenn alles gut Läuft.


    Dann fügen wir das in das Server-Seitige Script rein:


    Lua
    addEvent("onDatenbankCheck", true) -- Event hinzugfuegenaddEventHandler("onDatenbankCheck", getRootElement(), function() -- der Event Handler	local result = mysql_query( handler, "SELECT * FROM accounts WHERE NAME = '"..getPlayerName(source).."';" ) -- MySQL Abfrage, ob der Account in der Tabelle ist	if(result) then -- Wenn er Vorhanden ist		triggerClientEvent(source, "onDatenbankCheckBack", source, true) -- Event Triggern	else -- Wenn nicht		triggerClientEvent(source, "onDatenbankCheckBack", source, false) -- Event Triggern	endend)




    Im Clienten tuen wir nun wieder das rein:


    Lua
    addEvent("onDatenbankCheckBack", true) -- Event hinzufuegenaddEventHandler("onDatenbankCheckBack", getRootElement(), function(typ) -- Event Handler, der vom Server getriggert wurde	end)


    Hier ist aber noch nichts drinne, das machen wir aber nun.


    Wir springen nun zu dem Eventhandler im Client-Script, wenn die Resource Startet, dort haben wir das drinne:


    Lua
    addEventHandler("onClientResourceStart", getResourceRootElement(), function()	triggerServerEvent("onDatenbankCheck", gMe)end)




    Das ersetzen wir aber nun hiermit:


    Lua
    addEventHandler("onClientResourceStart", getResourceRootElement(), function()	createGui()end)




    Weil ich gerade gemerkt habe, dass es besser ist.


    Nun fügen wir das GUI ein.
    Mein Client-Seitiges Script sieht nun so aus:


    Lua
    local gMe = getLocalPlayer()local Guivar = 0 -- Guivariable, damit das Gui sich nicht 2 mal oeffnen kannlocal Fenster = {}local TabPanel = {}local Tab = {}local Knopf = {}local Label = {}local Edit = {}	local function createGui()	if(Guivar == 1) then return end -- Check	Guivar = 1 -- setze Variable auf 1		local sWidth, sHeight = guiGetScreenSize() -- Code zum Fixieren des GUIS in alle Aufloesungen		 	local Width,Height = 370,219 -- ""	local X = (sWidth/2) - (Width/2) -- ""	local Y = (sHeight/2) - (Height/2) -- ""				Fenster[1] = guiCreateWindow(X, Y, Width, Height, "Register Login Fenster",false)	TabPanel[1] = guiCreateTabPanel(9,22,352,188,false,Fenster[1])	Tab[1] = guiCreateTab("Einloggen",TabPanel[1])	Label[1] = guiCreateLabel(10,7,330,28,"Dein Account wurde gefunden, bitte logge dich Ein!",false,Tab[1])	guiSetFont(Label[1],"default-bold-small")	Edit[1] = guiCreateEdit(77,35,160,28,"passwort",false,Tab[1])	Knopf[1] = guiCreateButton(15,76,112,29,"Einloggen",false,Tab[1])	Label[2] = guiCreateLabel(9,38,88,30,"Passwort:",false,Tab[1])	guiSetFont(Label[2],"default-bold-small")	Tab[2] = guiCreateTab("Registrieren",TabPanel[1])	Label[3] = guiCreateLabel(8,5,331,15,"Dein Account wurde nicht gefunden, bitte Registriere dich!",false,Tab[2])	guiSetFont(Label[3],"default-bold-small")	Edit[2] = guiCreateEdit(77,30,123,27,"Passwort1",false,Tab[2])	Label[4] = guiCreateLabel(10,32,78,22,"Passwort:",false,Tab[2])	guiSetFont(Label[4],"default-bold-small")	Label[5] = guiCreateLabel(9,68,62,15,"Nochmal:",false,Tab[2])	guiSetFont(Label[5],"default-bold-small")	Edit[3] = guiCreateEdit(76,65,123,27,"Passwort2",false,Tab[2])	Knopf[2] = guiCreateButton(62,100,135,27,"Registrieren",false,Tab[2])endaddEventHandler("onClientResourceStart", getResourceRootElement(), function()	createGui()end)addEvent("onDatenbankCheckBack", true) -- Event hinzufuegenaddEventHandler("onDatenbankCheckBack", getRootElement(), function(typ) -- Event Handler, der vom Server getriggert wurde	if(typ == false) then		else		endend)


    Part 2 im nächsten Post.

    Mit freundlichen Grüßen

    2 Mal editiert, zuletzt von Noneatme (29. November 2016 um 14:46)

  • Dieses Thema enthält 33 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind, bitte registrieren Sie sich oder melden Sie sich an um diese lesen zu können.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!