Problem mit der Speicherung der Gutscheine

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
  • mysql_function_query(MySqlConnection,"SELECT * FROM "#DATENBANKTAG"_gutschein",true,"OnQueryFinish","siii","SELECT * FROM "#DATENBANKTAG"_gutschein",_SQL_GUTSCHEINE_LOAD,0,MySqlConnection);







    @Jeffry

    Einmal editiert, zuletzt von Dr. Frauenarzt () aus folgendem Grund: Code Überarbeitet (Speichert immer noch nicht)

  • Das Problem ist das die Gutscheine nicht gespeichert werden gesprintet werden die beim Laden und Speichern steht aber immer 0/250.


    SO erstelle ich ingame ein Gutschein "Sollte er in der Datenbank sein" ist aber leider nicht so warum auch immer habe denk ich mal alles richtig gemacht kann mir den Fehler auch nicht erklären warum die Gutscheine nicht gespeichert werden.


    //E:


    Speicherung:




    Laden:



    Gutschein erstell Befehl:



    Von wo er die Gutscheine laden soll:


    mysql_function_query(MySqlConnection,"SELECT * FROM "#DATENBANKTAG"_gutschein",true,"OnQueryFinish","siii","SELECT * FROM "#DATENBANKTAG"_gutschein",_SQL_GUTSCHEINE_LOAD,0,MySqlConnection);

  • Beim Laden setzt du Gutschein[gIDs][gErstellt] nicht auf 1.
    Außerdem muss
    new gIDs = cache_get_field_content_int(count, "id"); innerhalb der while-Schleife stehen, sonst liest du immer nur die ID der ersten Zeile aus.


    Zusätzlich solltest du die Schleife beim Speichern so schreiben, da sonst die Schleife stoppt, wenn ein Gutschein zwischendrin nicht existiert.
    new count;
    for(new gSchein = 1; gSchein<MAX_GUTSCHEINE; gSchein++)
    {
    if(Gutschein[gSchein][gErstellt] == 0) continue;
    format(query,sizeof(query),"UPDATE "#DATENBANKTAG"_gutschein SET `Erstellt`='%d', `Ersteller`='%s', `Datum`='%s', `Ablauf`='%d',",
    Gutschein[gSchein][gErstellt], Gutschein[gSchein][gErsteller], Gutschein[gSchein][gDatumErstellt], Gutschein[gSchein][gAblauf]);
    strcat(mainquery,query);
    format(query,sizeof(query),"`Code`='%s', `Typ`='%d', `Gebunden`='%d', `GebundenAn`='%s', `Eingeloest`='%d', `Wert`='%d', `Abgelaufen`='%d', `EingeloestVon`='%s' WHERE `id`='%d' ",
    Gutschein[gSchein][gCode], Gutschein[gSchein][gTyp], Gutschein[gSchein][gGebunden], Gutschein[gSchein][gGebundenAn], Gutschein[gSchein][gEingeloest], Gutschein[gSchein][gWert], Gutschein[gSchein][gAbgelaufen], Gutschein[gSchein][gEingeloestVon], Gutschein[gSchein][gID],gSchein);
    strcat(mainquery,query);
    mysql_function_query(MySqlConnection,mainquery,false,"","");
    strdel(mainquery,0,sizeof(mainquery));
    strdel(query,0,sizeof(query));
    count++;
    }
    printf("- Gutschein gespeichert %d/%d -",count,MAX_GUTSCHEINE);
    strdel(query,0,sizeof(query));


  • while(gSchein<MAX_GUTSCHEINE && Gutschein[gSchein][gErstellt] != 0)


    weglassen?


    Heißt: einfach das was Sie geschrieben haben so unter dem Speichern reinmachen ohne diese while schleife?




    //E:


    SO hätte ich das jetzt gemacht








  • Er speichert den Gutschein immer noch nicht :/?

  • Hast du das AUTO_INCREMENT entfernt?


    Was sagt der MySQL Log?

    Ja hab ich.




    //E:



  • Dann scheint die Verbindung nicht (mehr) aktiv zu sein, zur MySQL Datenbank.
    Prüfe ob du vielleicht irgendwo zwischen Server-Start und Befehl die Verbindung trennst.

    So sieht das aus wen der Gutschein erstellt wurde.



    #define INVALID_GUTSCHEIN_KEY -255



    //E:


    z.b 24 Stunden Premium



    case 0: //24 Stunden Premium
    {
    Gutschein[pCreateGutschein[playerid]][gTyp] = 1;
    pCreateGutschein[playerid] = INVALID_GUTSCHEIN_KEY;
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Du hast erfolgreich einen Gutschein erstellt!");
    }

  • Damit kann ich leider nichts anfangen, das hat damit nicht wirklich was zu tun, da hier keine MySQL Befehle vorhanden sind.
    Zu dem Zeitpunkt, zu dem du den Gutschein erstellst (INSERT INTO ...) ist die Datenbank nicht verbunden.
    Das musst du prüfen, warum das so ist. Eventuell beendest du die Verbindung zuvor. Schaue im Log nach, ob die zwischen Server-Start und Befehlseingabe beendet wird.