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
  • SQL
    WHERE Name = '%s'


    Bei dieser Abfrage, nehmen wir Higgy als Nick vom Spieler, werden auch Spieler aus der Datenbank mit den Nick HiggY ausgewählt, da die Abfrage nicht case-sensitive ist.
    Man kann sich damit Statistiken von anderen Spielern holen.

  • es wird einfach nicht gelöscht obwohl ich den code drinne habe


    else if(PlayerInfo[giveplayerid][pFrakSperre] == 1)
    {
    new year, month,day;
    getdate(year, month, day);
    format(query, sizeof(query), "DELETE FROM `test` WHERE `Wer` = '%s'", giveplayer);
    mysql_query(query);
    format(string, sizeof(string), "AdmCmd: %s hat von %s die Fraktionsperre aufgehoben! Grund: %s (%d-%d-%d)", giveplayer, sendername,(result),month,day,year);
    SperreLog(string);
    format(string, sizeof(string), "AdmCmd: Deine FraktionsSperre wurde von %s aufgehoben! Grund: %s",giveplayer,(result));
    SendClientMessage(giveplayerid,COLOR_LIGHTRED,string);
    PlayerInfo[giveplayerid][pFrakSperre] = 0;
    }

  • ich glaube so hier



    new query[128];
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid,X,Y,Z);
    format(query, sizeof(query), "INSERT INTO Tabellenname (XPosition,YPosition,ZPosition) VALUES ('%d', '%d', ''%d)", X,Y,Z);
    mysql_query(query);
    und bei der tabelle machste nicht varchar oder so sondern int

  • Ist das dann so richtig?


    Spieler[playerid][Values] = mysql_SetInt("accounts", "Values ('%f', '%f', '%f')" "Name", Spieler[playerid][Name]);



    //EDIT:


    Ich habe insgesamt 7 errors:



    public OnPlayerRequestClass(playerid, classid)
    {


    if(GetPVarInt(playerid,"Eingeloggt") == 0)
    {
    if(mysql_CheckAccount(playerid) == 0) /1143
    {
    SendClientMessage(playerid, 0xFFFFFFFF,"________-> Willkommen auf auf MyReallifeNetwork <-________");
    SendClientMessage(playerid, 0xFFFFFFFF,"Bevor es los geht,musst du dich registrieren!");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Register","Bitte Gib ein Passwort an:","Register","Exit");
    }
    else if(mysql_CheckAccount(playerid) == 1)/1149
    {
    SendClientMessage(playerid, 0xFFFFFFFF,"________-> Willkommen auf auf MyReallifeNetwork <-________");
    SendClientMessage(playerid, 0xFFFFFFFF,"Bitte Log dich nun ein!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Bitte gib dein Passwort ein:","Login","Abbrechen");
    }
    }
    return 1;
    }



    public OnPlayerConnect(playerid)
    {



    SetPlayerColor(playerid,0xFFFFFFAA);
    Ping1[playerid] = 0;
    SetTimerEx("Ping2", 1000*10, false, "%d", playerid);
    GangZoneShowForPlayer(playerid, gz3, -16777017);
    GangZoneShowForPlayer(playerid, gz5, -2147418167);
    GangZoneShowForPlayer(playerid, gz6, -8388424);
    GangZoneShowForPlayer(playerid, gz4, -65332);
    GangZoneShowForPlayer(playerid, gz1, -8388424);
    GangZoneShowForPlayer(playerid, gz2, -2147418167);
    GangZoneShowForPlayer(playerid, GroveStreet, 16711888);
    GangZoneShowForPlayer(playerid, MS13, 1538909898);
    GangZoneShowForPlayer(playerid, gz7, -66);
    GangZoneShowForPlayer(playerid, fafzone, Grau);
    GangZoneShowForPlayer(playerid, damialgazone, 0xFFFF0096);
    GangZoneShowForPlayer(playerid, hazone, Rot);
    new pName [MAX_PLAYER_NAME] ;
    new string [48];
    new name[128];
    GetPlayerName(playerid, pName, sizeof(pName) ) ;
    format(string, sizeof(string), "%s hat den Server betreten ", pName) ;
    SendClientMessageToAll (0xAAAAAAAA, string);
    GetPlayerName(playerid, Spieler[playerid][name], MAX_PLAYER_NAME);
    Spieler[playerid]GetPlayerMoney = mysql_GetInt("accounts", "geld" "Name", Spieler[playerid][name]); //1186
    Spieler[playerid]GetPlayerWantedLevel = mysql_GetInt("accounts", "wanted" "Name", Spieler[playerid][name]);
    Spieler[playerid][bankgeld] = mysql_GetInt("accounts", "bankgeld" "Name", Spieler[playerid][name]);

    Einmal editiert, zuletzt von User961 ()

  • haste


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




    im script?

  • Kann das sein, dass bei GetFloat ein Fehler ist? Denn immer wenn ich das benutze kommt Warning : tag mismatch.
    Ein GetFloat sieht zum Beispiel so aus:
    SpielerInfo[playerid][lastx] = mysql_GetFloat("accounts", "x", "Name", SpielerInfo[playerid][pName]);

  • Versuch mal obs geht wenn du die funktion durch die hier ersetzt.
    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);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_float(sqlfloat);
    mysql_free_result();
    return sqlfloat;
    }

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

  • SQL
    WHERE Name = '%s'


    Bei dieser Abfrage, nehmen wir Higgy als Nick vom Spieler, werden auch Spieler aus der Datenbank mit den Nick HiggY ausgewählt, da die Abfrage nicht case-sensitive ist.
    Man kann sich damit Statistiken von anderen Spielern holen.


    @ Maddin: Hast du den Beitrag vielleicht übersehen? Er stellt ein Problem für die Entwickler hier dar.

  • @Martez
    Im normalfall wird auch bei SAMP nicht zwischen Groß- und Kleinschreibung unterschieden. Sprich wenn du dir nen Account mit Martez erstellst kannst du dich auch mit MaRtEz einloggen. Sollte also, meiner meinung nach, kein Problem darstellen.


    @Denninho
    Du kannst immer nur einen Wert abfragen. Das heisst du musst, wenn du z.b X,Y und Z Position abfragen willst, drei abfragen machen. Zumal du GetFloat benutzen musst um einen Float Wert aus der Datenbank zu bekommen.
    So wäre es richtig:
    Spieler[playerid][Pos_X] = mysql_GetFloat("accounts", "XPos", "Name", Spieler[playerid][Name]);
    Spieler[playerid][Pos_Y] = mysql_GetFloat("accounts", "YPos", "Name", Spieler[playerid][Name]);
    Spieler[playerid][Pos_Z] = mysql_GetFloat("accounts", "ZPos", "Name", Spieler[playerid][Name]);


    Zitat

    error 017: undefined symbol "mysql_CheckAccount"
    error 017: undefined symbol "mysql_CheckAccount"


    Bedeutet warscheinlich das die funktion "mysql_CheckAccount" nicht existiert.


    Die anderen Fehler kommen, weil du die Variablen falsch benutzt hast.


    Spieler[playerid][pGeld] = mysql_GetInt("accounts", "geld" "Name", Spieler[playerid][name]); //1186
    Spieler[playerid][pWanted] = mysql_GetInt("accounts", "wanted" "Name", Spieler[playerid][name]);
    Spieler[playerid][bankgeld] = mysql_GetInt("accounts", "bankgeld" "Name", Spieler[playerid][name]);

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

  • Hi! ;)


    Erstmal respekt dafür,das Du soviel geschrieben hast!


    Ich finde Du hast mal so ein richtiges Vorbild-Tutorial geschrieben!



    So,zu meinem Problem:


    Also mein Server startet ohne Probleme!
    Jedoch wird der Account nicht erstellt wenn ich mich registriere..


    Die Daten die ich im Script angegeben habe sind 100% richtig!Auch auf Groß/Kleinschreibung habe ich geachtet.
    Dennoch wird der Account nicht erstellt.


    Ich habe einen Server bei samp4you.com und habe bisher mit jedem MySQL-Tutorial bzw. Script Probleme dort gehabt.



    In der Server-Log steht nur das der Server geladen wurde bla bla bla und das ich connected und disconnectet bin..
    Disconnect war natürlich absicht!



    Ich hoffe Du hast evtl. eine Lösung für mein Problem.



    Mfg, Hardcore
    P.s
    Nochmal vielen Dank für das Tutorial!;)

  • @Pizzarand:
    Danke :)


    @[FoR]Hardcore:


    Schreib mal
    mysql_debug(1);
    unter OnGameModeInit und starte dann den server. Wenn ein fehler bei MySQL vorliegt wird er dir dann in der mysql_log.txt ausgegeben. Kannst den Log ja hier Posten falls dir das so nicht weiter Hilft.


    Mfg.

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

  • So,habs mal gemacht..
    Hier der Text aus der Log:


    Ich hoffe Du kannst anhand der Log einen Fehler erkennen und mir sagen wie ich diesen behebe.


    Mfg, Hardcore


    //Edit:
    Ich habe jetzt mal Manuell einen Account in die Datenbank eingetragen und dann auf den Server connectet!
    Der Account wurde aber komischerweise nicht gefunden..


    Ich habe erneut die Daten die ich angegeben habe überprüft und konnte keinerlei Schreibfehler entdecken!
    Die Daten sind zu 100% korrekt!


    Hat zufällig einer von Euch auch einen Server bei samp4you und diese Probleme mit MySQL?


    //Edit2:
    Okay..
    Dir ist beim Muster-Script ein kleiner Fehler unterlaufen!
    Du hast unter OnGameModeInit()
    Connect_To_Database();
    Vergessen einzutragen!


    Bei mir funzt nun alles perfekt und schneller denn je!
    Vielen vielen Dank für ein umfangreiches Tutorial!