Speicherung Fehler [Graffiti System]

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
  • Hey,


    Habe folgendes Problem...
    Die Speicherung Spamt mir die Datenbank Komplett zu..
    Verstehe aber nicht warum kann mir jemand helfen?




    Wo ich die Speicherung ausführe:



    Speichern:

  • Wenn du dein Spraytag erstellst, läuft die Schleife einfach komplett durch. Es werden also MAX_Grafitti-1 erstellt. Du musst erstens auch Abfragen, ob in dem verwendeten index eventuell sogar schon ein Element vorhanden ist, ansonsten überschreibst du das Grafitti einfach und du erhälst auf dein altes Grafitti keinen Zugriff mehr auf.


    public Erstellengraff(playerid)
    {
    new v = random(200+200);
    POBJECT[playerid] += v;
    DestroyDynamicObject(POBJECT[playerid]); //Das Alte Object Löschen!
    POBJECT[playerid] = CreateDynamicObject(19482, Position[playerid][0], Position[playerid][1], Position[playerid][2], Position[playerid][3], Position[playerid][4], Position[playerid][5], GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid), -1, 200);//Erstellung des Objects
    SetDynamicObjectMaterialText(POBJECT[playerid], 0, POBJECTN[playerid], OBJECT_MATERIAL_SIZE_256x256, "Diploma", 25, 0, 0xFFFFFFFF, 0, 1);//Einstellung des Textes
    GameTextForPlayer(playerid, "~w~Spruehen ]", 5000, 5);
    DeletePVar(playerid, "GraffitiErstellung"); //PVar Löschen
    SprayMunition[playerid] = 0;
    Spruhen ++;
    for(new i=1;i<MAX_GRAFFITI;i++)
    {
    if(Graffiti[i][gCreated])continue; //Ist dieser index bereits belegt, beendet die Schleife den Durchlauf hier und zählt einfach weiter
    new query[128];
    Graffiti[i][gCreated] = 1;
    format(query, sizeof(query), "INSERT INTO `server_graffitis` (GraffiID) VALUES ('%d')", i); //hier nutzt du den index für die Grafitti ID
    mysql_function_query(MySqlConnection, query, false, "", "");
    format(Graffiti[i][gGraffiName], 16, "%s", POBJECTN[playerid]);
    format(Graffiti[i][gGraffiErsteller], 16, "%s", GetName(playerid));
    Graffiti[i][gGraffiID] = POBJECT[playerid];
    Graffiti[i][gGraffiX] = Position[playerid][0];
    Graffiti[i][gGraffiY] = Position[playerid][1];
    Graffiti[i][gGraffiZ] = Position[playerid][2];
    Graffiti[i][gGraffiX2] = Position[playerid][3];
    Graffiti[i][gGraffiY2] = Position[playerid][4];
    Graffiti[i][gGraffiZ2] = Position[playerid][5];
    SaveGraffitis();
    return 1; //Hat die Schleife nun einen freien index gefunden, beenden wir hier die gesamte Schleife
    }
    return 1;
    }


    Das zweite Problem was ich sehe ist, du benutzt zum einen den index als Graffi ID in der Datenbank und zum Speichern benutzt du die Variable Graffiti[i][gGraffiID]. Das müsstest du noch überarbeiten und dich für eines entscheiden. Solltest du dich für den index entscheiden, dann solltest du bei deiner Tabelle AUTO_INCREMENT deaktivieren.





    public SaveGraffitis()
    {
    new count = 0, mainQuery[1537], secondQuery[256];
    for(new i=1;i<MAX_GRAFFITI;i++)
    {
    if(Graffiti[i][gCreated] == 1)
    {
    format(secondQuery, sizeof(secondQuery), "UPDATE `server_graffitis` SET `GraffiObj`='%d', `GraffiX`='%f' `GraffiY`='%f' `GraffiZ`='%f', `GraffiX2`='%f' `GraffiY2`='%f' `GraffiZ2`='%f', ",
    Graffiti[i][gGraffiObj], Graffiti[i][gGraffiX], Graffiti[i][gGraffiY], Graffiti[i][gGraffiZ], Graffiti[i][gGraffiX2], Graffiti[i][gGraffiY2], Graffiti[i][gGraffiZ2]);
    strcat(mainQuery, secondQuery);
    format(secondQuery, sizeof(secondQuery), "`Ersteller`='%s', `Name`='%s' WHERE `GraffiID`='%d' ", //hier nutzt du für das Speichern anstatt den index
    Graffiti[i][gGraffiErsteller], Graffiti[i][gGraffiName], Graffiti[i][gGraffiID]); //eine neue Variable
    strcat(mainQuery, secondQuery);
    print(mainQuery);
    mysql_function_query(MySqlConnection, mainQuery, false, "", "");
    strdel(mainQuery, 0, sizeof(mainQuery));
    count++;
    printf("[SAVE] Graffiti wurden gespeichert. (%d/%d)", count, MAX_GRAFFITI);
    }
    }
    return 1;
    }



    Ich hoffe du kannst damit etwas anfangen und verstehst ein wenig, welche Probleme momentan vorliegen, ansonsten melde dich, dann kann ich es versuchen noch ein wenig mehr zu erläutern. Ich sehe des öfteren von dir, dass du ganz viele dynamische System verwendest oder erstellst. Schaut dir mal in dem Zuge die Foreach & Iterator Funktionen an, hier ein kleines Tutorial aus dem englischen Forum: https://forum.sa-mp.com/showthread.php?t=588526


    Es wird niemals so viel gelogen wie vor der Wahl, während des Krieges und nach der Jagd.

    - Otto von Bismarck
    -