Ränge werden nicht gespeichert

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 Tag,
    ich hab ein Problem, denn mein Dynamisches Rangsystem wird nicht gespeichert.
    Zum Beispiel:
    Rang 0 : Praktikant
    Rang 1 : Helfer
    usw...


    Die Tabelle zeigt mir immer leer.

    Struktur


    stock

    stock SaveFNamen(frak)
    {
    new query[556];
    mysql_format(dbhandle, query, sizeof(query),"UPDATE frakrkasse SET Rang0 = '%s', Rang1 = '%s', Rang2 = '%s', Rang3 = '%s', Rang4 = '%s', Rang5 = '%s', Rang6 = '%s', Fraktionskasse = '%d' WHERE fID = '%d'",
    fInfo[frak][frank0],fInfo[frak][frank1],fInfo[frak][frank2],fInfo[frak][frank3],fInfo[frak][frank4],fInfo[frak][frank5],fInfo[frak][frank6],fInfo[frak][FraktionsKasse],frak);
    mysql_pquery(dbhandle, query);
    return 1;
    }

  • Ich gebe dir eins auf den Weg:
    Es gibt eine Funktion, mit der du erfahren kannst, was für ein Fehler aufgetreten ist:
    mysql_errno();
    mysql_pquery mit einem Callback versehen und dann in diesem printen lassen, was der Fehler ist.
    Andere Möglichkeit: schreibe das mysql_pquery zu mysql_query um und mach hier genau das gleiche:
    nach dem query erhälst du vom mysql server ein paar Werte, die mittels Funktionsaufrufe ausgelesen werden können, unter anderem dem Error Code.
    mysql_errno()


    Dann kurz googlen und du hast den Fehler.
    Erspart dir viel Arbeit bzw. Wartezeit. :)

  • Ich erkenne nun auch den Fehler:
    Wie PHPMyAdmin schon sagt, hast du keine Datensätze.
    Du kannst Updates nur auf bereits vorhandene Datensätze ausüben.
    Dies bedeutet für dich, das du vorher überprüfen musst, ob Datensätze vorhanden sind.
    Wenn nicht: insert
    Wenn wohl: update


    Andere Variante: object relation mapping
    Ist ebenfalls bei dem Plugin mit an board.
    Wenn du dort ein "Update" machen möchtest, so verwendet man mit der Methode orm_save
    Nur das schöne hier ran ist, das hier schon alles intern abgewickelt wird, sprich "falls nicht vorhanden, insert, andernfalls update". :)
    Ist aber nur zu gebrauchen, wenn man sich damit auseinander setzt und auch versteht, wie das ganze funktioniert.

  • Jetzt bekomme ich diesen Fehler:
    [13:26:33] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE fID ='4'' at line 1

  • Hah, Fehler gefunden.


    Dein Feld fID ist ein Feld, welches eine Zahl enthält.
    '4' -> Text/Varchar/o.ä
    Dies kann auch nicht Funktionieren.
    Das bedeutet folglich:
    Where fID = %d

  • Was hast du denn gemacht?
    Hast du denn bereits den Datensatz? Wie erwähnt, wenn nicht: erst inserten/einfügen.


    Du kannst unter diesem Umstand auch kein Fehler erhalten, da die Abfrage ja nun von der Syntax her korrekt ist.
    Nun ist es nur noch ein logischer Fehler, den du selbst beheben musst mittels schauen, ob der Datensatz überhaupt vorhanden ist.

  • Du führst ein einfaches Select aus, mit der Bedingung, das die FraktionsID die gleiche ist


    SELECT * FROM frakrkasse WHERE fID = %d


    Darauffolgend schaust du, ob du eine Zeile hast, ergo
    cache_get_row_count()
    Wenn diese Funktion den Wert 1 zurückliefert, so hast du einen passenden Datensatz, der dir dann erlaubt, ein Update auszuführen.
    Andernfalls machst du direkt ein Insert
    INSERT INTO frakrkasse(Rang0,Rang1...) VALUES("praktikant","Anhänger"...)
    Hier kannst du ebenfalls mit mysql_format arbeiten, falls du fragen solltest. :)

  • So habe es hinbekommen meine derzeitige Code sieht jetzt so aus:



    stock SaveFNamen(frak)
    {
    new query[556];
    mysql_format(dbhandle, query, sizeof(query),"INSERT INTO frakrkasse (fID, Rang0, Rang1, Rang2, Rang3, Rang4, Rang5, Rang6, Fraktionskasse) VALUES ('%d', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d')",
    frak,fInfo[frak][frank0],fInfo[frak][frank1],fInfo[frak][frank2],fInfo[frak][frank3],fInfo[frak][frank4],fInfo[frak][frank5],fInfo[frak][frank6],fInfo[frak][FraktionsKasse]);
    mysql_pquery(dbhandle, query);
    return 1;
    }


    Aber ich kann es nicht editieren :/