MySQL (Installation, Zugriff, Einstellungen, Login & Register Beispiel)

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Wie kann mit einem Query Mehrere Colums aus 2 Tabellen auslesen, aber aus der einen Tabelle soll es ein Colum sein, der durch eine Bedinung die mit aus einem Colum der anderen Tabelle besteht?

    Falsche Freunde: Fragen nach Kippen !
    Wahre Freunde: Sind der Grund, warum du keine Kippen hast !
    Falsche Freunde: Nennen deine Eltern Frau/Herr !
    Wahre Freunde: Nennen deine Eltern Mom/Dad !
    Falsche Freunde: Holen dich aus dem Knast und sagen dir, was getan hast, war falsch !
    Wahre Freunde: Sitzen in der Zelle neben dir und sagen: Scheiße...wir haben‘s verkackt...war aber verdammt lustig ! :P
    Falsche Freunde: Haben dich noch nie weinen sehen !
    Wahre Freunde: Weinen mit dir !
    Falsche Freunde: Werden dich stehen lassen, wenn die Menge das tut !
    Wahre Freunde: Werden der kompletten Menge den Arsch treten, die dich stehen gelassen hat ! c:
    Falsche Freunde: Bleiben für ne Weile !
    Wahre Freunde: Bleiben ein Leben lang !
    Falsche Freunde: Werden die Person, die Scheiße über dich erzählt, blöd vollabern !
    Wahre Freunde: Werden sie einfach ausknocken !
    Falsche Freunde: Werden das hier ignorieren !
    Wahre Freunde: Es Kopieren !

  • Bei mir funzt das irgendwie nicht, der ließt sich da beim geld en smiley mit ner 9 dahinter aus.
    in der log lässt er dann den smiley raus
    [22:52:52] 9
    [22:52:52] 9


    gestern hatte ich, wo ich uff utf8 war, nur
    [21:50:03] ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    [21:50:03] ÿÿÿÿÿÿÿÿÿÿÿÿ
    [21:50:03] ÿÿÿÿÿÿÿÿ
    [21:50:03] ÿÿÿÿ


    Wo ist mein Fehler?



    /edit: ich habe das script beim oberen eintrag 1:1 kopiert un zwar in ein blank-script von pawno.

    coming soon ... ;)

  • // This is a comment
    // uncomment the line below if you want to write a filterscript
    //#define FILTERSCRIPT


    #include <a_samp>
    #include <a_mysql>


    #define SQL_HOST "127.0.0.1"
    #define SQL_USER "root"
    #define SQL_PASS ""
    #define SQL_DATA "samp"


    #define DIALOG_REGISTER (1)
    #define DIALOG_LOGIN (2)


    enum SpielerDaten
    {
    pName[MAX_PLAYER_NAME],
    pLevel,
    pGeld,
    pKills,
    pTode,
    Float:pHealth
    }
    new SpielerInfo[MAX_PLAYERS][SpielerDaten];


    #if defined FILTERSCRIPT


    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }


    #else


    main()
    {
    print("\n----------------------------------");
    print(" Blank Gamemode by your name here");
    print("----------------------------------\n");
    }


    #endif


    public OnGameModeInit()
    {
    mysql_debug(1);
    Connect_To_Database();


    // Don't use these lines if it's a filterscript
    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
    }


    public OnGameModeExit()
    {
    return 1;
    }


    public OnPlayerRequestClass(playerid, classid)
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 0) //Als erstes fragen wir ab ob der Spieler schon eingeloggt ist oder nicht, damit wir nicht bei jeder Skin Auswahl uns neu Einloggen müssen.
    {
    if(mysql_CheckAccount(playerid) == 0)//Wir überprüfen ob der Account Existiert, falls nicht Zeigen wir den Dialog zum Registrieren.
    {
    SendClientMessage(playerid, 0xFFFFFFFF,"________-> Willkommen auf auf meinem Server <-________");
    SendClientMessage(playerid, 0xFFFFFFFF,"Dein Account wurde nicht gefunden, bitte Registriere dich!");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register","Bitte Gib ein Passwort an:","Register","Exit");
    }
    else if(mysql_CheckAccount(playerid) == 1)//Falls doch zeigen wir den Dialog zum Einloggen.
    {
    SendClientMessage(playerid, 0xFFFFFFFF,"________-> Willkommen auf auf meinem Server <-________");
    SendClientMessage(playerid, 0xFFFFFFFF,"Dein Account wurde gefunden, bitte Log dich nun ein!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Bitte gib dein Passwort ein:","Login","Abbrechen");
    }
    }


    return 1;
    /*SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;*/
    }


    public OnPlayerConnect(playerid)
    {
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    SavePlayer(playerid);
    DeletePVar(playerid,"Eingeloggt");


    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    return 1;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    return 1;
    }


    public OnVehicleSpawn(vehicleid)
    {
    return 1;
    }


    public OnVehicleDeath(vehicleid, killerid)
    {
    return 1;
    }


    public OnPlayerText(playerid, text[])
    {
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
    // Do something here
    return 1;
    }
    return 0;
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    return 1;
    }


    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnRconCommand(cmd[])
    {
    return 1;
    }


    public OnPlayerRequestSpawn(playerid)
    {
    return 1;
    }


    public OnObjectMoved(objectid)
    {
    return 1;
    }


    public OnPlayerObjectMoved(playerid, objectid)
    {
    return 1;
    }


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    return 1;
    }


    public OnVehicleMod(playerid, vehicleid, componentid)
    {
    return 1;
    }


    public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
    {
    return 1;
    }


    public OnVehicleRespray(playerid, vehicleid, color1, color2)
    {
    return 1;
    }


    public OnPlayerSelectedMenuRow(playerid, row)
    {
    return 1;
    }


    public OnPlayerExitedMenu(playerid)
    {
    return 1;
    }


    public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
    {
    return 1;
    }


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    return 1;
    }


    public OnRconLoginAttempt(ip[], password[], success)
    {
    return 1;
    }


    public OnPlayerUpdate(playerid)
    {
    return 1;
    }


    public OnPlayerStreamIn(playerid, forplayerid)
    {
    return 1;
    }


    public OnPlayerStreamOut(playerid, forplayerid)
    {
    return 1;
    }


    public OnVehicleStreamIn(vehicleid, forplayerid)
    {
    return 1;
    }


    public OnVehicleStreamOut(vehicleid, forplayerid)
    {
    return 1;
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    switch(dialogid)
    {
    case DIALOG_REGISTER:
    {
    if(response)
    {
    if(strlen(inputtext) == 0) // Wenn kein Passwort angegebene wurde
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register","Das angegebene Passwort war zu Kurz...\nBitte Registrier dich jetzt mit einem Passwort:","Register","Abbrechen");
    return 1;
    }
    else
    {
    CreateAccount(playerid, inputtext); //Account wird erstellt
    SetPVarInt(playerid,"Eingeloggt",1); //Die variable wird auf 1 gesetzt, damit wir nun die Skin Auswahl benutzen können ohne wieder nach unserem Passwort gefragt zu werden.
    SpawnPlayer(playerid); //Wir lassen den Spieler Spawnen
    return 1;
    }
    }
    else
    {
    Kick(playerid); //Wenn auf Abbrechen geklickt wurde, wird der Spieler gekickt damit man ohne Account nicht Spielen kann.
    }
    }
    case DIALOG_LOGIN:
    {
    if(response)
    {
    if(strlen(inputtext) == 0) // Wenn kein Passwort angegebene wurde
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das Angegebene Passwort war Falsch.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
    return 1;
    }
    else
    {
    new SpielerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, SpielerName, MAX_PLAYER_NAME);
    if(!strcmp(inputtext, mysql_ReturnPasswort(SpielerName), true)) // Wir holen uns das Passwort aus der MySQL Datenbank und überprüfen es mit dem angegebenen passwort.
    {
    SetPVarInt(playerid,"Eingeloggt",1); //Falls beide passwörter übereinstimmen wird die Variable auf 1 gesetzt damit wir die Skin auswahl benutzen können.
    LoadPlayer(playerid); //Der Spieler wird "geladen", speich es werden seine Daten aus der Datenbank geholt und in variablen gespeichert um diese im Skript zu verwenden.
    SpawnPlayer(playerid); //Wir lassen den Spieler Spawnen
    return 1;
    }
    else
    {
    //Wenn das Passwort falsch war, lassen wir erneut das Login fenster erscheinen damit der Spieler das Richtige Passwort eingibt.
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das war das Falsche Passwort.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
    return 1;
    }
    }
    }
    else
    {
    Kick(playerid); //Wenn auf Abbrechen geklickt wurde, wird der Spieler gekickt damit man ohne Account nicht Spielen kann.
    }
    }
    }


    return 1;
    }


    public OnPlayerClickPlayer(playerid, clickedplayerid, source)
    {
    return 1;
    }




    stock LoadPlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))//Wir fragen ab ob der angegebene Spieler auch Online ist, und kein NPC ist (nur zur sicherhheit)
    {
    GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME); //Wir Speichern den Namen des Spielers in der Variable SpielerInfo[playerid][pName]
    SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "level", "name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Level" eingetragen ist und Speichern ihn in unserer Variable.
    SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "money", "name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Geld" eingetragen ist und Speichern ihn in unserer Variable.


    print(SpielerInfo[playerid][pName]);
    print(SpielerInfo[playerid][pLevel]);
    print(SpielerInfo[playerid][pGeld]);
    }
    return 1;
    }


    stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid)) //wir überprüfen ob der Spieler überhaupt noch Connected ist und ob er nicht ein NPC ist.
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1) //Und hier ob er noch eingeloggt ist.
    {
    //Nun speichern wir die Daten in der Datenbank.
    mysql_SetInt("accounts", "level", SpielerInfo[playerid][pLevel], "name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "money", SpielerInfo[playerid][pGeld], "name", SpielerInfo[playerid][pName]);
    }
    }
    return 1;
    }


    stock Connect_To_Database()
    {
    mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS); //Wir versuchen mit den Angaben die wir oben im Script gemacht haben uns mit dem MySQL Server zu verbinden.
    if(mysql_ping() == 1) //Es wird überprüft ob die Verbindung steht.
    {
    //Falls ja wird das in die Console geschrieben und die Funktion wird beendet.
    print("<-| [MYSQL] Verbindung zur Datenbank wurde erfolgreich hergestellt!");
    return true;
    }
    else
    {
    //Falls nicht wird erneut versucht eine Verbindung aufzubauen.
    print("<-| [MYSQL] Es konnte keine Verbindung zur Datenbank hergestellt werden!");
    print("<-| [MYSQL] Es wird erneut versucht eine Verbindung zur Datenbank herzustellen!");
    mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS);
    if(mysql_ping() == 1)
    {
    print("<-| [MYSQL] Es konnte im 2 Versuch eine Verbindung hergestellt werden!");
    return true;
    }
    else
    {
    //Falls das auch nicht Funktioniert wird der Server zur Sicherheit wieder heruntergefahren.
    print("<-| [MYSQL] Es konnte keine Verbindung zur Datenbank hergestellt werden!");
    print("<-| [MYSQL] Der Server wird nun beendet!");
    SendRconCommand("exit");
    return true;
    }
    }
    }


    stock mysql_CheckAccount(playerid)
    {
    new Query[128],Name[MAX_PLAYER_NAME],count;
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name, Name);
    format(Query, sizeof(Query), "SELECT * FROM `accounts` WHERE `name` = '%s'", Name);
    print(Query);
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    mysql_free_result();
    return count;
    }


    stock CreateAccount(playerid, pass[])
    {
    new query[256],Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name,Name);
    mysql_real_escape_string(pass,pass);
    format(query, sizeof(query), "INSERT INTO `accounts` (`name`, `password`) VALUES ('%s', '%s')", Name, pass);
    print(query);
    mysql_query(query);
    return true;
    }


    stock mysql_ReturnPasswort(Name[])
    {
    new query[130], Get[130];
    mysql_real_escape_string(Name, Name);
    format(query, 128, "SELECT `password` FROM `accounts` WHERE `name` = '%s'", Name);
    print(query);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    mysql_free_result();
    return Get;
    }


    stock mysql_GetInt(Table[], Field[], Where[], Is[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    print(query);
    mysql_query(query);
    mysql_store_result();
    new sqlint = mysql_fetch_int();
    mysql_free_result();
    return sqlint;
    }


    stock mysql_GetString(Table[], Field[], Where[], Is[])
    {
    new query[128], Get[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    print(query);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    mysql_free_result();
    return Get;
    }


    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Float:sqlfloat;
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    print(query);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_float(sqlfloat);
    mysql_free_result();
    return sqlfloat;
    }


    stock mysql_SetInt(Table[], Field[], To, Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%d' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    print(query);
    mysql_query(query);
    return true;
    }


    stock mysql_SetString(Table[], Field[], To[], Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(To, To);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%s' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    print(query);
    mysql_query(query);
    return true;
    }


    stock mysql_SetFloat(Table[], Field[], Float:To, Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%f' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    print(query);
    mysql_query(query);
    return true;
    }



    DB ist auf latin1-charset.



    /edit: MySQL-Batch

    SQL
    CREATE TABLE `accounts` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(24) NOT NULL,
      `password` varchar(128) NOT NULL,
      `level` int(11) NOT NULL DEFAULT '1',
      `money` int(11) NOT NULL DEFAULT '0',
      `health` float NOT NULL DEFAULT '100',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1

    coming soon ... ;)

  • C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(606) : error 006: must be assigned to an array
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(607) : error 006: must be assigned to an array
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(608) : error 006: must be assigned to an array
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(609) : error 006: must be assigned to an array
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(621) : error 017: undefined symbol "mysql_SetInt"
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(622) : error 017: undefined symbol "mysql_SetInt"
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(623) : error 017: undefined symbol "mysql_SetInt"
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(624) : error 017: undefined symbol "mysql_SetInt"
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(625) : error 017: undefined symbol "mysql_SetFloat"
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(643) : error 079: inconsistent return types (array & non-array)
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(644 -- 645) : error 029: invalid expression, assumed zero
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(644 -- 647) : error 035: argument type mismatch (argument 1)
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(647) : warning 217: loose indentation
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(647) : error 029: invalid expression, assumed zero
    C:\Users\Jan\Desktop\Mein Selfmade\gamemodes\Befehlezgaming.pwn(647) : fatal error 107: too many error messages on one line


    Ich habe beim Compilen immer diese errors

  • Hey,
    bei mir steht wenn ich den Server anmache, bei Gamemode: "Unknown"


    Hier der mysql_log:

    Code
    [09:30:40] >> mysql_connect(localhost, samp539, samp539_log, ******) on port 3306
    [09:30:40] CMySQLHandler::CMySQLHandler() - constructor called.
    [09:30:40] CMySQLHandler::CMySQLHandler() - Connecting to "localhost" | DB: "samp539_log" | Username: "samp539"
    [09:30:40] CMySQLHandler::Connect() - Connection was successful.
    [09:30:40] CMySQLHandler::Connect() - Auto-Reconnect has been enabled.
    [09:30:40] >> mysql_ping( Connection handle: 1 )
    [09:30:40] CMySQLHandler::Ping() - Connection is still alive.


    Hier der server_log:


    Hier noch die Datenbank:

    __________________________________________


    Scripter & Programmierer im Ruhestand

    Derzeitiges Projekt:
    __________________________________________

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen