MySQL Plugin R39 Problem

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
  • Guten Abend,
    Ich benutze das MySQL Plugin 39 und es macht probleme beim Updaten:
    Hier weise ich das Geld zu und es wird in einer Log Perfekt gepseichert.


    FrakInfo[frakid][frakgeld] += cmd,ACMoney(playerid, -cmd);
    format(string,sizeof(string),""#HTML_WHITE"[ "#HTML_LOGIN"FrakBank: "#HTML_WHITE"Das Mitglied "#HTML_ORANGE"%s "#HTML_WHITE"hat so eben "#HTML_GREEN"%i$ "#HTML_WHITE"in der Fraktionkasse eingezahlt! "#HTML_WHITE"Neuer Stand: "#HTML_ORANGE"%i$ ]",SpielerName(playerid),cmd,FrakInfo[frakid][frakgeld]);
    FraktionsChat(Spieler[playerid][pFraktion],WEISS,string);
    format(string,sizeof(string),"INSERT INTO "#DATENBANK"_frakgeldlog (`fID`,`name`,`count`,`timestamp`,`op`) VALUES ('%d','%s','%d','%d','1')",frakid,SpielerName(playerid),cmd,gettime());


    Nun ist das Problem dass sich das ganze ganz Random mäßig verschiebt:
    stock SaveFraktion()
    {
    new query[275],
    frak = 0;
    for(;frak<MAX_FRAKTIONEN;frak++)
    {
    format(query,sizeof(query),"UPDATE "#DATENBANK"_fraktionen SET frakmaterial = '%d', frakgeld = '%d', marihuana = '%d', koks = '%d', crystle = '%d', lsd = '%d', gras = '%d' WHERE id = '%d'",FrakInfo[frak][frakmaterial],FrakInfo[frak][frakgeld],FrakInfo[frak][fMarihuana],FrakInfo[frak][fKoks],FrakInfo[frak][fCrystle],FrakInfo[frak][fLSD],FrakInfo[frak][fGras],frak);
    mysql_function_query(MYSQLVerbindung,query,false,"","");
    }
    return 1;
    }


    Screen der MySQL Tabelle:
    http://www11.pic-upload.de/07.06.15/qfq8c1a54wjs.png
    Danke im vorraus,
    Mfg,

    Einmal editiert, zuletzt von Corvus ()

  • format(query,sizeof(query),"UPDATE "#DATENBANK"_fraktionen SET frakmaterial = '%d', frakgeld = '%d', marihuana = '%d', koks = '%d', crystle = '%d', lsd = '%d', gras = '%d' WHERE id = '%d'",FrakInfo[frak][frakmaterial],FrakInfo[frak][frakgeld],FrakInfo[frak][fMarihuana],FrakInfo[frak][fKoks],FrakInfo[frak][fCrystle],FrakInfo[frak][fLSD],FrakInfo[frak][fGras],frak);
    zu:
    format(query,sizeof(query),"UPDATE "#DATENBANK"_fraktionen SET frakmaterial = '%d', frakgeld = '%d', marihuana = '%d', koks = '%d', crystle = '%d', lsd = '%d', gras = '%d' WHERE id = '%d'",FrakInfo[frak][frakmaterial],FrakInfo[frak][frakgeld],FrakInfo[frak][fMarihuana],FrakInfo[frak][fKoks],FrakInfo[frak][fCrystle],FrakInfo[frak][fLSD],FrakInfo[frak][fGras],frak+1);


    Dann dürfte es klappen.

  • Jetzt packt er das eine Tabelle weiter oben hin Code beim Einzahlen:
    case DIALOG_FRAKBANK_EINZAHLEN:
    {
    for(new frakid=0;frakid<MAX_FRAKTIONEN;frakid++)
    if(response == 0) return ShowPlayerDialog(playerid,DIALOG_FRAKBANK,DIALOG_STYLE_LIST,"Fraktionsbank","Ausrüsten\nEinzahlen\nAuszahlen\nMaterial\nDrogen","Weiter","Abbruch");
    new cmd = strval(inputtext),string[350],frakid = Spieler[playerid][pFraktion];
    if((Spieler[playerid][pGeld] - cmd) < 0) return SendClientMessage(playerid,ROT,"Du hast nicht genug Geld!");
    if(!IsNumeric(inputtext))
    {
    format(string,sizeof(string),"Gebe bitte nun den Betrag ein, welchen du in die Fraktionkasse einzahlen möchtest!\nDerzeitiger Fraktionskassen Stand: %i$",FrakInfo[frakid][frakgeld]);
    ShowPlayerDialog(playerid,DIALOG_FRAKBANK_EINZAHLEN,DIALOG_STYLE_INPUT,"Fraktionsbank Einzahlung",string,"Weiter","Abbruch");
    return SendClientMessage(playerid,ROT,"Es sind nur Zahlen möglich!");
    }
    if(cmd < 1 || cmd > 10000)
    {
    format(string,sizeof(string),"Gebe bitte nun den Betrag ein, welchen du in die Fraktionkasse einzahlen möchtest!\nDerzeitiger Fraktionskassen Stand: %i$",FrakInfo[frakid][frakgeld]);
    ShowPlayerDialog(playerid,DIALOG_FRAKBANK_EINZAHLEN,DIALOG_STYLE_INPUT,"Fraktionsbank Einzahlung",string,"Weiter","Abbruch");
    return SendClientMessage(playerid,ROT,"Betrag nur zwischen 1 und 10.000$ möglich!");
    }
    FrakInfo[frakid][frakgeld] += cmd,ACMoney(playerid, -cmd);
    format(string,sizeof(string),""#HTML_WHITE"[ "#HTML_LOGIN"FrakBank: "#HTML_WHITE"Das Mitglied "#HTML_ORANGE"%s "#HTML_WHITE"hat so eben "#HTML_GREEN"%i$ "#HTML_WHITE"in der Fraktionkasse eingezahlt! "#HTML_WHITE"Neuer Stand: "#HTML_ORANGE"%i$ ]",SpielerName(playerid),cmd,FrakInfo[frakid][frakgeld]);
    FraktionsChat(Spieler[playerid][pFraktion],WEISS,string);
    format(string,sizeof(string),"INSERT INTO "#DATENBANK"_frakgeldlog (`fID`,`name`,`count`,`timestamp`,`op`) VALUES ('%d','%s','%d','%d','1')",frakid,SpielerName(playerid),cmd,gettime());
    mysql_function_query(MYSQLVerbindung,string,false,"","");
    ShowPlayerDialog(playerid,DIALOG_FRAKBANK,DIALOG_STYLE_LIST,"Fraktionsbank","Ausrüsten\nEinzahlen\nAuszahlen\nMaterial\nDrogen","Weiter","Abbruch");
    return true;
    }

  • Dann musst du wahrscheinlich überall dort wo du ein query zwecks Fraktionen sendest die frakid um eins erhöhen, weil in deiner Tabelle fängt es mit 1 an, die Arrays aber mit 0, entsprechend ist frakid 0 im Code in der Tabelle die 1.
    Oder du änderst deine Tabelle so ab, dass die IDs bei 0 anfangen.

  • Dann musst du wahrscheinlich überall dort wo du ein query zwecks Fraktionen sendest die frakid um eins erhöhen, weil in deiner Tabelle fängt es mit 1 an, die Arrays aber mit 0, entsprechend ist frakid 0 im Code in der Tabelle die 1.
    Oder du änderst deine Tabelle so ab, dass die IDs bei 0 anfangen.


    Kann man auch jede Zeile einzeln Updaten und Laden?

  • Das machst du doch durch die WHERE Anweisung. Ich weiß nicht ganz worauf du hinaus willst.
    Laden kannst du ebenfalls auch nur eine Zeile, indem du das WHERE id = xxx ein dein SELECT-Statement packst. Prinzipiell möglich, nur wie gesagt, weiß ich nicht warum man das machen sollte.

  • Aber das machst du doch schon. Du speicherst doch nicht alle auf einmal, sondern es werden X Queries gesendet.
    Die Verschiebung, denke ich, hängt damit zusammen, dass du im Array eben bei 0 anfängst, und in der Tabelle bei 1. Am einfachsten, ohne Code zu ändern (dann musst du die Änderung von zuvor wieder rückgängig machen), wäre es, wenn du einfach den AUTO_INCREMENT in der Tabelle bei 0 anfangen lässt, anstatt bei 1 (musst eben alle Fraktionen nochmal erstellen).
    Sofern das das Problem ist.