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
  • Sry das ich jetzt mal noch so nen Alten Thread hervorrufe.
    Aber ich habe eine Frage zum Tutorial
    Ich benutze den Include a_sampmysql.inc .
    Da ich keine lust habe alle System in meinem Script wieder um zu schreiben und gerne hiervon diesen befehl benutzen möchte:
    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);
    mysql_query(query);
    mysql_store_result();
    new sqlint = mysql_fetch_int();
    mysql_free_result();
    return sqlint;
    }


    Ich habe es einigermaßen an die sampmysql.inc angepasst undzwar so:
    stock mysql_GetInt(Table[], Field[], Where[], Is[])
    {
    new query[128];
    samp_mysql_real_escape_string(Table, Table);
    samp_mysql_real_escape_string(Field, Field);
    samp_mysql_real_escape_string(Where, Where);
    samp_mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT %s FROM %s WHERE %s = '%s'", Field, Table, Where, Is);
    samp_mysql_query(query);
    samp_mysql_store_result();
    new sqlint = samp_mysql_fetch_int();
    samp_mysql_free_result();
    return sqlint;
    }


    Doch ich bekomme dort
    new sqlint = samp_mysql_fetch_int();
    einen Fehler. Da es kein samp_mysql_fetch_int gibt.
    In a_sampmysql.inc gibt es nur samp_mysql_fetch_row aber dann bekomm ich den fehler das fehlehnde argumente gibt....


    Ich hoffe da kann mir jemand helfen.

  • Versuchs mal so:
    stock mysql_GetInt(Table[], Field[], Where[], Is[])
    {
    new query[128],sqlint[11];
    samp_mysql_real_escape_string(Table, Table);
    samp_mysql_real_escape_string(Field, Field);
    samp_mysql_real_escape_string(Where, Where);
    samp_mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT %s FROM %s WHERE %s = '%s'", Field, Table, Where, Is);
    samp_mysql_query(query);
    samp_mysql_store_result();
    samp_mysql_get_field(Field, sqlint);
    samp_mysql_free_result();
    return strval(sqlint);
    }
    Aber ich würde drir dringed raten auf ein Aktuelles plugin umzusteigen.

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Wir suchen noch ein Team für unseren Server


    Mapper Scripter Forum Moderator

    Suche jemand der Bock auf Neues Projekt hat ;)


    Kann leider nicht Scripten, deswegen suche ich ein der Scripten kann ;)
    Aber Mappen kann ich sehr gut, habe auch schon bissl gemapptes ;)


    Skype: affenkack

  • Danke Maddin für deine Antwort,
    Bin auf die Lösung von dir auch schon draufgekommen.
    Doch dann wird man nichtmals mehr gespawnt.
    Habe mir überlegt jetzt eh auf das MySql Plugin umzusteigen auf dem das Tutorial hier bassiert.


    Aber Danke nochmals für deine Hilfe.

  • Bei mir wird komicher weise nur das Passwort und der Name in der MySQL datenbank gespeichert.
    Weiß jemand woran das liegen könnte ?

    Bereit jemand über Paypal oder Sonstiges zu bezahlen wenn er mir bei den Probleme hilft!

  • Erstmal zu Maddin echt geiles Tutorial, hat mir sehr geholfen, war schon fast am verzweifeln ;)
    So zu meinem Problem unzwar bekomme ich die Error Meldung Failed (libmysqlclient_r.so.15: cannot open shared object file: No such file or directory) wie auch unten gepostet.
    Könnte mir vielleicht jemand die libmysqlclient_r.so.15 oder libmysqlclient.so.15 hochladen oda liegt es doch an etwas anderem ?


    In der Server.log steht folgendes:


    v0.3c R5, (C)2005-2011 SA-MP Team


    [02:25:05]
    [02:25:05] Server Plugins
    [02:25:05] --------------
    [02:25:05] Loading plugin: mysql.so
    [02:25:05] Failed (libmysqlclient_r.so.15: cannot open shared object file: No such file or directory)
    [02:25:05] Loading plugin: streamer.so
    [02:25:05]


    *** Streamer Plugin v2.3.8 by Incognito loaded ***


    [02:25:05] Loaded.
    [02:25:05] Loading plugin: MapAndreas.so


    [02:25:05] Loaded.
    [02:25:05] Loaded 3 plugins.


    [02:25:05]
    [02:25:05] Ban list
    [02:25:05] --------
    [02:25:05] Loaded: samp.ban
    [02:25:05]


    [02:25:05] Script[gamemodes/mysqltest.amx]: Run time error 19: "File or function is not found"
    [02:25:05] Number of vehicle models: 0


    Mfg
    Rocc0w

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich hab mal en kleines problem^^. Jetzt wollt ich dich mal fragen, ob du mir viell jemand helfen könnten.


    Undzwar hab ich das Problem das mein GameServer immer crashed sobalt ich die stehende Mysql verbindung stope und dann mysql_ping aufrufe -.-
    Also ich hab halt ien Timer der jede minute schaut ob die verbindung noch steht.
    Weis jemand an was das liegt?


    Edit: Ich hab jetzt im Internet darüber gelesen. Dort habe ich dann auch die Antwort gefunden, dass man einfach nicht viel bei der Abfrage machen soll, sondern einfach nur die Verbindung neu starten, jedoch klappt das auch nicht -.-
    Hat keiner eine Ahnung an was das liegen könnte?

    Einmal editiert, zuletzt von Marius.B ()

  • Ne Frage, wenn ich bei Mysql new connection mache und alles so wie du machst. Dann möchte ich aber ein Passwort auswählen da dass Script ein Passwort hat. Nun gebe ich das Passwort ein und es kommt immer Access denied for user root@localhost (using Passwort Yes)


    Hoffe mir kann jemand helfen :D

  • Hallo,


    hätte mal eine Frage, und zwar wird hier leider keine Zal oder sonstiges in die MySql-Datenbank reingeschrieben.


    ocmd:ban(playerid,params[]){ if(mysql_GetInt("userdata", "AdminLevel", "Name", SpielerInfo[playerid][pName]) <2) return SendClientMessage(playerid,farbe_rot,"Du bist kein Admin!"); new pID,reason[128],string[128]; if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,farbe_blau,"/ban [ID] [Grund]"); format(string,sizeof(string),"AdmCmd: %s wurde von %s gebannt. Grund: %s",SpielerInfo[pID][pName],SpielerInfo[playerid][pName],reason); SendClientMessageToAll(farbe_rot,string); new zahl = 1; SpielerInfo[pID][pBan] = zahl; new name[MAX_PLAYER_NAME]; SpielerInfo[playerid][pName] = GetPlayerName(playerid,name, sizeof(name)); SpielerInfo[pID][pBanGrund] = reason; mysql_SetInt("userdata", "ban", SpielerInfo[pID][pBan], "Name", SpielerInfo[pID][pName]); mysql_SetString("userdata", "banadmin", SpielerInfo[playerid][pName], "Name", SpielerInfo[pID][pName]); mysql_SetString("userdata", "bangrund", SpielerInfo[pID][pBanGrund], "Name", SpielerInfo[pID][pName]); SavePlayer(pID); Kick(pID); return 1;}



    Kann mir jemand helfen?

  • also erstens würd ich das Adminlevel beim einlogen in ner Variable speicher, dann must du des nicht immer über die datenbank abfrage.
    Dann würd ich schon bevor du das erste mal SpielerInfo[playerid][pName] benutzt, das machen:
    GetPlayerName(playerid, SpielerInfo[playerid][pName], sizeof(SpielerInfo[playerid][pName]));


    so wird der Name des spieler in "SpielerInfo[playerid][pName]" gespeichert.
    Als nächtest, hast du schonmal überprüft ob deine Verbindung wirklich da ist(du kannst im Script mysql_ping(); benutzen um zu sehen ob die Verbindung steht. -1=sie steht nicht).
    Und als drittest würde mir nurnoch einfalen, dass du die Datenbank nochnicht erstellt hast.


    Du kannst auch im script ein Mysql Command machen das die Tabellen automatisch erstellt.
    Bsp:
    new query[126];
    format(query, sizeof(query), "CREATE TABLE IF NOT EXISTS `Accounts` (`Name` varchar(30), `Adminlevel` int(5), PRIMARY KEY (`Name`) );"
    mysql_query(query);


    Sobalt die Tabelle Accounts nicht vorhanden ist, wird sie erstellt und in die Talbele kommt ein 30Zeichen langer string und ein 5Zeichen langes Adminlevel.
    In diese kannst du dann alles speicher, laden usw.

  • Hallo Marius


    Ich bedanke mich erstmal für die schnelle Antwort. Allerdings konnte damit keine Lösung für das Problem gefunden werden. Es geht weiterhin nicht.
    Eine Frage hätte ich noch: Dein "mysql_ping();" wo muss ich das einfügen und wo gibt der mir dann die Zahl heraus, hab bis jetzt nichts gefunden.


    Gruß Dario

  • Also du hast doch unter OnGameModeInit eine verbindung mit mysql_connect(....); gemacht.
    Dann könntest du eingetlich direkt danach das machen:


    if(mysql_ping() == 1)
    {
    print("[MYSQL] Verbindung stabil!");
    }
    else if(mysql_ping() == -1)
    {
    Mysql_Reconnect();
    print("[MYSQL] Verbindung fehlgeschlagen.");
    print("[MYSQL] Verbindung wird hergestellt.");
    if(mysql_ping() == 1)
    {
    print("[MYSQL] Verbindung stabil!");
    }
    else if(mysql_ping() == -1)
    {
    Mysql_Reconnect();
    print("[MYSQL] Verbindung konnte nicht hergestellt werden.");
    SendRconCommand("exit");
    }
    }
    Wenn du das unter OnGameModeInit einfügts (Nach mysql_Connect!! ) wird überprüft ob eine Verbindung besteht. Falls sie besteht, wird in der Konsole "[MYSQL] Verbindung stabil!" geschrieben, damit man weis das die Verbindung steht. falls das nicht der Fall sein sollte, wird als erstes erneut versucht eine Verbindung herzustellen und man bekommt in der Konsole die Meldung: "[MYSQL] Verbindung fehlgeschlagen." .Wenn es dann auch bein zweiten mal nicht klappt kommt die Meldung: [MYSQL] Verbindung konnte nicht hergestellt werden." und das Script wird beendet.
    Das Problem ist, wenn das Script weiterläuft jedoch ohne verbindung. Treten fehler beim Laden, Speichern etc auf. Es wird auch immer angezeigt das man kein Account hat. Das liegt daran das er ja nicht auf die Datenbank zu greifen kann.


    PS: Lad mal die Debug.txt in deinem Server Ordner (Ganz vorne also da wo auch die samp-server.exe ist) hoch. Dort wird alles gespeichert was Mysql abfragen betrifft. Dort solltest du auch einen Fehler/Error sehen.


    //Verbesserung vorgenommen

    Einmal editiert, zuletzt von Marius.B ()

  • Hallo Marius


    Ich bedanke mich erstmal dafür. In der Konsole steht "Verbindung stabil".


    Das Problem konnte trotzdem gelöst werden, da ich die Datenbank nochmal neu aufgesetzt habe und da wird dann dort die 1 eingetragen.


    Gruß Dario

  • ok.
    Aber wenn mal wieder was sein sollte, schau mal in deine Debug datei. Da wird jede mysql Abfrage gespeichert und fals ein fehler/error passieren wir er dort angezeigt ;)


    Bei mir wird komicher weise nur das Passwort und der Name in der MySQL datenbank gespeichert.
    Weiß jemand woran das liegen könnte ?


    Bestehen alle Felder in deiner Mysql Daten bank? Wenn ja schau mal in deiner Debug datei. Da sollte eingetlich der fehler drin sein.



    //Edit Zweiter teil eingefügt (mit dem Zitat)

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