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
  • HeHo maddin nice tut habe aber n problem, unzwar wird adminlevel immer zu -1 Hier zeilen:


    Enum: [Sind immer nur teile]


    pKills,
    pTode,
    pAdminlevel,
    Float:pHealth
    new SpielerInfo[MAX_PLAYERS][SpielerDaten];


    stock LoadPlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    SafeResetPlayerMoney(playerid);
    GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
    SetPlayerScore(playerid,mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]));
    SafeGivePlayerMoney(playerid,mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]));
    SpielerInfo[playerid][pAdminlevel] = mysql_GetInt("accounts", "Adminlevel", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", SpielerInfo[playerid][pName]);
    }
    return 1;
    }


    stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
    mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Adminlevel", SpielerInfo[playerid][pAdminlevel], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Geld", GetPlayerMoney(playerid), "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Kills", SpielerInfo[playerid][pKills], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Tode", SpielerInfo[playerid][pTode], "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "Health", SpielerInfo[playerid][pHealth], "Name", SpielerInfo[playerid][pName]);


    }
    }
    return 1;
    }



    Ja ich habe den Rest! Ist okay brauchst net fragen deke das liegt an Loadepayer oder was meinst du?

    Mit freundlichen Grüßen,

  • Schreib mal
    mysql_debug(1); Unter OnGameModeInit, starte den server und log dich dann ein und veränder das Admin level und log dich wieder aus etc.


    Wenn es bei Laden oder Speichern ein Problem mit MySQL gibt dann wird dir der fehler in der mysql_log.txt Datei aussgegeben. Am besten postest du sie dann hier dann kann ich dir besser Helfen.

    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.


    Dies sollte kein Problem sein da wenn der Account schon existiert du immernoch das Passwort brauchst um an die "Stats" zu kommen.
    Oder bei welcher funktion meinst du soll dies ein Problem darstellen?

  • Wie kann ich alles werte in einer Tabelle zählen?
    und wie kann ich werte mit der wert blabla zählen
    z.b
    ID|Name|Fraktion
    1|Test|1
    2|Test2|3
    3|Test3|1


    das er mir beim ersten 3 ausspuckt und beim dritten 2

  • Meinst du reihen oder spalten?
    Reihen kannst du so zählen:
    new anzahl;
    mysql_query("SELECT * FROM meine_tabelle");// Wir holen uns alles (* = Alles) aus der tabelle meine_tabelle
    mysql_store_result();//Speichern das ergebnis
    anzahl = mysql_num_rows();//Zählen dann die reihen und speichern die anzahl der reihen in der variable "anzahl"
    mysql_free_result();//und mach zu guter letzt den speicher wieder frei.
    printf("In der Tabelle 'meine_tabelle' sind '%d' reihen", anzahl);
    Spalten so:
    new anzahl;
    mysql_query("SELECT * FROM meine_tabelle");// Wir holen uns alles (* = Alles) aus der tabelle meine_tabelle
    mysql_store_result();//Speichern das ergebnis
    anzahl = mysql_num_fields();//Zählen dann die spalten und speichern die anzahl der spalten in der variable "anzahl"
    mysql_free_result();//und mach zu guter letzt den speicher wieder frei.
    printf("In der Tabelle 'meine_tabelle' sind '%d' spalten", anzahl);


    Wenn du aber nur bestimmte reihen haben willst, musst du deine abfrage einschränken.
    Z.b durch
    mysql_query("SELECT * FROM meine_tabelle WHERE Kills = 10");
    Holst du nur die reihen, wo unter Kills der wert 10 gespeichert ist.

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

  • Du bist Krank Maddin XDD, im Sinne von total genial :D.
    Das ist mit Abstand das best erklärteste Tutorial.
    Ziemlich hilfreich. :D


    lg


    pS

  • ehm noch eine FRage gibt es auchsowas wie >= zum Abfragen in MYSQL?

  • @FoL du kannst es weiter als ganz normale Variablen nutzen, nur das sie dann nicht in Dini sondern in MySQL gespeichert werden.


    lg


    pS

  • Falls du meinst ob sowas geht:
    mysql_query("SELECT * FROM meine_tabelle WHERE Kills > 10");
    Ja das sollte gene. Aber ob <= bzw >= geht weiss ich nicht genau. Musst du einfach mal ausprobieren.
    Ansonsten kannst du anstatt >= 10 ja auch > 9 benutzen^^

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

  • forward SaveCars();
    public SaveCars()
    {
    for(new i = 0; i < (Frakcars*8); i++)
    {
    mysql_SetInt("frakcars","CarID",Fraktionscar[i][fCarID], "ID",i );
    mysql_SetInt("frakcars","FID",Fraktionscar[i][fFID], "ID",i );
    mysql_SetFloat("frakcars","PosX",Fraktionscar[i][fPosX], "ID",i );
    mysql_SetFloat("frakcars","PosY",Fraktionscar[i][fPosY], "ID",i );
    mysql_SetFloat("frakcars","PosZ",Fraktionscar[i][fPosZ], "ID",i );
    mysql_SetFloat("frakcars","Rot",Fraktionscar[i][fRot], "ID",i );
    mysql_SetInt("frakcars","Farbe",Fraktionscar[i][fFarbe], "ID",i );
    }
    return 1;
    }
    stock LoadCars()
    {
    for(new i = 0; i < (Frakcars*8); i++)
    {
    Fraktionscar[i][fCarID] = mysql_GetInt("frakcars", "CarID", "ID", i);
    Fraktionscar[i][fFID] = mysql_GetInt("frakcars","FID","ID",i);
    Fraktionscar[i][fPosX] = mysql_GetFloat("frakcars","PosX","ID",i);
    Fraktionscar[i][fPosY] = mysql_GetFloat("frakcars","PosY","ID",i);
    Fraktionscar[i][fPosZ] = mysql_GetFloat("frakcars","PosZ","ID",i);
    Fraktionscar[i][fRot] = mysql_GetFloat("frakcars","Rot","ID",i);
    Fraktionscar[i][fFarbe] = mysql_GetInt("frakcars","Farbe","ID",i);
    }
    return 1;
    }
    Dort bekomme ich diese Errors, diese befinden sich jeweils in den mysql zeilen.



    mfg
    //edit
    ich bräuchte bitte schnelle Hilfe...

    Einmal editiert, zuletzt von FoL-Community ()

  • Dein Problem ist dass der Where2 Parameter, also da wo bei dir i steht, ein string sein muss.
    Du kannst das ganze mal so versuchen:
    forward SaveCars();
    public SaveCars()
    {
    for(new i = 0,str[2]; i < (Frakcars*8); i++)
    {
    format(str,2,"%d",i);
    mysql_SetInt("frakcars","CarID",Fraktionscar[i][fCarID], "ID",str );
    mysql_SetInt("frakcars","FID",Fraktionscar[i][fFID], "ID",str );
    mysql_SetFloat("frakcars","PosX",Fraktionscar[i][fPosX], "ID",str );
    mysql_SetFloat("frakcars","PosY",Fraktionscar[i][fPosY], "ID",str );
    mysql_SetFloat("frakcars","PosZ",Fraktionscar[i][fPosZ], "ID",str );
    mysql_SetFloat("frakcars","Rot",Fraktionscar[i][fRot], "ID",str );
    mysql_SetInt("frakcars","Farbe",Fraktionscar[i][fFarbe], "ID",str );
    }
    return 1;
    }
    stock LoadCars()
    {
    for(new i = 0,str[2]; i < (Frakcars*8); i++)
    {
    format(str,2,"%d",i);
    Fraktionscar[i][fCarID] = mysql_GetInt("frakcars", "CarID", "ID", str);
    Fraktionscar[i][fFID] = mysql_GetInt("frakcars","FID","ID",str);
    Fraktionscar[i][fPosX] = mysql_GetFloat("frakcars","PosX","ID",str);
    Fraktionscar[i][fPosY] = mysql_GetFloat("frakcars","PosY","ID",str);
    Fraktionscar[i][fPosZ] = mysql_GetFloat("frakcars","PosZ","ID",str);
    Fraktionscar[i][fRot] = mysql_GetFloat("frakcars","Rot","ID",str);
    Fraktionscar[i][fFarbe] = mysql_GetInt("frakcars","Farbe","ID",str);
    }
    return 1;
    }

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

  • moinsen ich habe folgendes problem beim starten meines servers


    Error (0): Failed to connect. Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2).


    weiß jemand wie man das problem fixxen kann?


    ich habe ein Debian Lenny Root

  • Hallo,
    ich ahbe mir diesen Befehl gemacht

    if (strcmp("/fkaufen", cmdtext, true, 10) == 0)
    {
    if(PlayerInfo[playerid][pLeader] == 5||PlayerInfo[playerid][pLeader] == 6||PlayerInfo[playerid][pLeader] == 8||PlayerInfo[playerid][pLeader] == 12||PlayerInfo[playerid][pLeader] == 13||PlayerInfo[playerid][pLeader] == 15||PlayerInfo[playerid][pLeader] == 17||PlayerInfo[playerid][pLeader] == 18||PlayerInfo[playerid][pLeader] == 19||PlayerInfo[playerid][pLeader] == 20||PlayerInfo[playerid][pLeader] == 21||PlayerInfo[playerid][pLeader] == 22)
    {
    if(mysql_zahlen("frakcars","FID", PlayerInfo[playerid][pLeader]) <= Frakcars)
    {
    ShowPlayerDialog(playerid,DIALOG_KAUFENN,DIALOG_STYLE_LIST,"Gangcar","Sultan 1k","Kaufen","abbrachen");
    }
    }
    return 1;
    }
    doch bei der if-Abfrage mit dem zählen funktioniert etwas nicht, da dort der Bfehl stehen bleibt.
    hier die funktion

    stock mysql_zahlen(Table[],Where[], Where2[])
    {
    new anzahl;
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "SELECT * FROM %s WHERE %s = '%s'", Table,Where, Where2);
    mysql_query(query);
    mysql_store_result();//Speichern das ergebnis
    anzahl = mysql_num_rows();//Zählen dann die reihen und speichern die anzahl der reihen in der variable "anzahl"
    mysql_free_result();//und mach zu guter letzt den speicher wieder frei.
    return anzahl;
    }


    mfg


    //edit und die Tabelle sieht so aus ID|....
    bei id wird von 0 bis 239 eingetragen sonst null somit muss es ja funktionieren

    Einmal editiert, zuletzt von FoL-Community ()

  • Probiers mal so:
    stock mysql_zahlen(Table[],Where[], Where2)
    {
    new anzahl;
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Where, Where);
    format(query, 128, "SELECT * FROM %s WHERE %s = '%d'", Table,Where, Where2);
    mysql_query(query);
    mysql_store_result();//Speichern das ergebnis
    anzahl = mysql_num_rows();//Zählen dann die reihen und speichern die anzahl der reihen in der variable "anzahl"
    mysql_free_result();//und mach zu guter letzt den speicher wieder frei.
    return anzahl;
    }

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


  • das funktioniert genu für i = 0:D

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