Alter in MySQL-Datenbank speichern

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
    • Offizieller Beitrag

    Ich möchte mit dir herausfinden, wo der Fehler mit der ID liegt, der im Grunde genommen dein Hauptproblem verursacht hat.
    Das aktuelle Problem ist nämlich das Folgende: die User ID wird anscheinend nicht korrekt übergeben, sodass der Query auch nicht (korrekt) ausgeführt werden kann, da falscher User.
    Deshalb möchte ich nun wissen, wie du die Variable mit der User ID zuweist um zu gucken, wo der Fehler liegt. Daher das systematische Aufrollen.

  • Spieler laden tue ich so


    public OnPasswordResponse(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    //Passwort richtig
    sInfo[playerid][eingeloggt] = 1;
    sInfo[playerid][id] = cache_get_field_content_int(0,"id",dbhandle);
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    sInfo[playerid][money] = cache_get_field_content_int(0,"money",dbhandle);
    sInfo[playerid][bonus] = cache_get_field_content_int(0,"Bonus",dbhandle);
    SetPlayerMoney(playerid,sInfo[playerid][money]);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    SpawnPlayer(playerid);
    }
    else
    {
    //Passwort falsch
    SendClientMessage(playerid,COLOR_RED,"Das eingegebene Passwort ist falsch.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{FFFFB9}Login auf {FF0000}Servername.","{FFFFB9}Herzlich Willkommen zurück.\nGib bitte dein Passwort ein was du bei der Registrierung angegeben hast.\n{FF0000}Hast du Probleme bei der eingabe schreibe bitte im Forum: einen Supporter an.\n{FFFFB9}Viel spaß auf dem Server.","Login","Abbrechen");
    }
    return 1;
    }

  • Das Problem idt folgendes:
    Du fragst nach dem alter in der Registrierung. Zu dem Zeitpunkt wo du die update abfrage machst existiert die variable sinfo[playerid] [id] noch garnicht (also 0) weil die erst nach dem einloggen ausgelesen wird. Bei deinem scriot gehst du aber so vor:


    Registrierung
    Password angeben
    Insert...
    Alter angeben
    Update mit sinfo [playerid] [ id]
    Login durchführen
    Sinfo[playerid] [id] wird deklariert



    Problem erkannt? An einer gescheiten Lösung darfst du jetzt selber tüfteln :)
    Grüße

  • manchmal hat es einen sehr einfachen Grund undzwar query [128].. 128 Zeichen reichen nicht aus. Versuch einfach mal 256 oder eine noch grössere zahl daraus zu machen und probiers nochmal aus.


    Also beim laden und speichern einfach
    new query [128]; --> new query [256]



  • So hier die Datenbank


    Spieler speichern


    public OnPlayerDisconnect(playerid, reason)
    {
    savePlayer(playerid);
    resetPlayer(playerid);
    return 1;
    }


    savePlayer(playerid)
    {
    if(sInfo[playerid][eingeloggt]==0)return 1;
    //Speichern
    new query[256];
    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',Bonus'%i' WHERE id='%i'",GetPlayerScore(playerid),GetPlayerMoney(playerid),sInfo[playerid][bonus],sInfo[playerid][id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    Spieler Laden



    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid==DIALOG_LOGIN)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>0)
    {
    //Passwort richtig
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND password='%s'",name,passwort);
    mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
    }
    else
    {
    //Keine Eingabe
    SendClientMessage(playerid,COLOR_RED,"Gib bitte dein Passwort ein.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{FFFFB9}Login auf {FF0000}Servername.","{FFFFB9}Herzlich Willkommen zurück.\nGib bitte dein Passwort ein was du bei der Registrierung angegeben hast.\n{FF0000}Hast du Probleme bei der eingabe schreibe bitte im Forum: einen Supporter an.\n{FFFFB9}Viel spaß auf dem Server.","Login","Abbrechen");
    }
    }
    else
    {
    Kick(playerid);
    }
    return 1;
    }
    return 1;
    }


    public OnPasswordResponse(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    //Passwort richtig
    sInfo[playerid][eingeloggt] = 1;
    sInfo[playerid][id] = cache_get_field_content_int(0,"id",dbhandle);
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    sInfo[playerid][money] = cache_get_field_content_int(0,"money",dbhandle);
    sInfo[playerid][bonus] = cache_get_field_content_int(0,"Bonus",dbhandle);
    SetPlayerMoney(playerid,sInfo[playerid][money]);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    SpawnPlayer(playerid);
    }
    else
    {
    //Passwort falsch
    SendClientMessage(playerid,COLOR_RED,"Das eingegebene Passwort ist falsch.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{FFFFB9}Login auf {FF0000}Servername.","{FFFFB9}Herzlich Willkommen zurück.\nGib bitte dein Passwort ein was du bei der Registrierung angegeben hast.\n{FF0000}Hast du Probleme bei der eingabe schreibe bitte im Forum: einen Supporter an.\n{FFFFB9}Viel spaß auf dem Server.","Login","Abbrechen");
    }
    return 1;
    }



    so ich hoffe jetzt kann mir richtig geholfen werden

    • Offizieller Beitrag

    UPDATE user SET level='%i',money='%i',Bonus'%i' WHERE id='%i'

    Schau mal bei deiner savePlayer() Funktion. Du musst bei "Bonus" noch das Gleichzeichen = ergänzen.
    Wir wären deinem Problem aber viel schneller auf die Schliche gekommen, wenn du früher die MySQL Log gepostet hättest, wonach ich auch mehrmals fragte.
    Um in Zukunft deinerseits Fehler in der MySQL Syntax auszuschließen, wenn du dir zum Beispiel nicht sicher bist, empfehle ich dir eine Internetseite, wo du eine MySQL-Anweisung auf Korrektheit überprüfen kannst: https://de.piliapp.com/mysql-syntax-check/

  • also in alter gbdatum wird jetzt nur die ersten 4 stellen gespeichert also 1302 nur das 1996 fehlt woran liegt das jetzt?


    //CLOSE


    Danke an alle die mitgesucht haben es geht jetzt alles wie gewollt.
    Vielen danke dafür

    Einmal editiert, zuletzt von Dj-BoMa () aus folgendem Grund: Bedanken//COLSE

  • Beitrag von amphax.me ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Fail ().