Werte in der Datenbank ändern sich von alleine

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Werte in der Datenbank ändern sich von alleine

    Heyho Easy-Scripter,
    .
    ich habe folgendes Problem ich habe in meiner Datenbank eine Spalte namens "Status" der Standard Wert ist 0, einstellt ist ist ein bigint mit einer Length von 128. Das Problem ist wenn ich jetzt Ingame ein bisschen rumtrolle ein paar Commands eingebe und dann den Server restarte ändern sich der Wert von 0 auf 48-53. Es ist mir unerklärlich wie das passieren kann, in der Mysql-log steht das ein Update Query ausgeführt wird aber ich weiß beim besten willen nicht woher er kommt.


    Die Tabelle wird 2 mal im ganzen Skript verwendet einmal

    bei dem Befehl


    ocmd:ban(playerid,params[])
    {
    new reason[128],string[128],Name[128];
    if(isUserAdmin(playerid,6))
    {
    if(sscanf(params,"us[128]",Name, reason))return SendClientMessage(playerid,syntax,"[Tipp]/ban <spieler> <Grund>");
    {
    new szDestination3[100];

    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    format(szDestination3, sizeof(szDestination3), "UPDATE `accounts` SET `status` = 1 WHERE `Name` = '%s';",Name);
    format(string,sizeof(string), "%s wurde von %s vom Server gebannt. Grund: %s",Name,SpielerInfo[playerid][pName],reason);
    SendClientMessageToAll(0xAF0000FF,string);
    new result = mysql_query(szDestination3);
    print(szDestination3);
    if(result == 0)
    {
    SendClientMessage(playerid,error,"Es ist ein Fehler aufgetreten!!");
    }
    SendClientMessage(playerid,success,"Du hast jemanden gebannt");
    }
    }
    return 1;
    }

    und bei einer Abfrage

    stock IsPlayerBanned(playerid)


    {
    if(SpielerInfo[playerid][pStatus] == 1) return 1;
    return 0;
    }

    Ich hoffe ihr werdet mir helfen können !




    edit1: Formatierung raus genommen da es kaum noch zum lesen war :S

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Kazu ()

  • Hallo Kazu,

    Das ist wirklich komisch, vorallem unlogisch.
    Werte in Datenbanken verändern sich nicht "eigenständig". Iergendwo im Script musst du die Anweisung haben, den Status hoch zu setzen.

    Aber hierbei kommt mir grade eine Frage auf, welchen Wert kann Status höchstens haben?

    Gruß,
    Neoner
    Professionelle Programmierung
    -> PAWN, PHP, SQL, HTML, CSS, Visual Basic, C, C#, C++ <-

  • Also den Max wert habe ich nicht definiert in meinen Code, wenn du den Lengh meinst der liegt bei 64. Aber ich muss glaube ich mal das komplette script überarbeiten irgendwas stimmt hier ganz und gar nicht. Die werte von Status bleiben nun normal aber das Adminlevel ändert sich von Geisterhand und der Server crashed wenn ich den Fehler gefunden habe melde ich mich nochmal.
  • Es ging mir um den Höchsten wert, den du in die Spalte schreibst.
    Vielleicht hast du einfach nur eine ID verwechselt und trägst diese Falsch in die Datenbank ein??..

    Zudem kann ich dir empfehlen, das Plugin "CrashDetect" zu Installieren und zu Nutzen, das gibt dir mehr, aber vorallem Ausführlichere Informationen bezüglich Serverabstürzen.

    Gruß,
    Neoner
    Professionelle Programmierung
    -> PAWN, PHP, SQL, HTML, CSS, Visual Basic, C, C#, C++ <-

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Neoner ()

  • Also im Moment benutze ich nur eine Var die beim disconnecten auch wieder gelöscht wird. Das mit dem Server absturz habe ich hinbekommen war ein kleiner Fehler von mir. Warum sich das Adminlevel ändert ist mir wirklich ein Rätsel mein Save stock sieht so aus:

    [pwn]stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    iif(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Geld", SpielerInfo[playerid][pGeld], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Fraktion", SpielerInfo[playerid][pFraktion], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Rank", SpielerInfo[playerid][pRank], "Name", SpielerInfo[playerid][pRank]);
    mysql_SetInt("accounts", "Adminlevel", SpielerInfo[playerid][pAdminlevel], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Status", SpielerInfo[playerid][pStatus], "Name", SpielerInfo[playerid][pName]);
    print("Ein Spieler wurde geladen");

    }
    }[/pwn]

    in der Mysql log steht folgendes:

    (Ist nur ein Auszug da bei einem neustart so um die 1200+ Einträge enstehen

    SQL-Abfrage

    1. [03:01:00] CMySQLHandler::Query(UPDATE `accounts` SET `Rank` = '92' WHERE `Name` = '\\n\\\\') - Successfully executed.
    2. [03:01:00] >> mysql_real_escape_string( Connection handle: 1 )
    3. [03:01:00] CMySQLHandler::EscapeString(accounts); - Escaped 8 characters to accounts.
    4. [03:01:00] >> mysql_real_escape_string( Connection handle: 1 )
    5. [03:01:00] CMySQLHandler::EscapeString(Adminlevel); - Escaped 10 characters to Adminlevel.
    6. [03:01:00] >> mysql_real_escape_string( Connection handle: 1 )
    7. [03:01:00] CMySQLHandler::EscapeString(Name); - Escaped 4 characters to Name.
    8. [03:01:00] >> mysql_real_escape_string( Connection handle: 1 )
    9. [03:01:00] CMySQLHandler::EscapeString(Kazu); - Escaped 4 characters to Kazu.
    10. [03:01:00] >> mysql_query( Connection handle: 1 )
    11. [03:01:00] CMySQLHandler::Query(UPDATE `accounts` SET `Adminlevel` = '92' WHERE `Name` = 'Kazu') - Successfully executed.
    Alles anzeigen


    Vielleicht sagt euch das ja was :P


    Gute Nacht!
  • Guten Morgen,

    Wieso verwendest du MySQL_real_escape_string beim Speichern von Zahlen und fest definierten Inhalten?
    Es reicht, wenn du das beim Login etc. machst, besser gesagt überall dort, wo Datenbankeinträge auf Benutzereingaben reagieren.

    Lass dir mal via print die Variable mit dem Adminlevel ausgeben, einfach zum Prüfen, ob die Variable bereits Falsch belegt ist oder MySQL dort iergendetwas vermurkst.

    Gruß,
    Neoner
    Professionelle Programmierung
    -> PAWN, PHP, SQL, HTML, CSS, Visual Basic, C, C#, C++ <-