probleme beim geld 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
  • moin leute,


    ja ich hab da son kleines problem mit meinem script unzwar wird das geld von spielern nicht richtig geladen.


    ich hab die spieler daten auf na MySQL datenbank und mein sever verbindet sich auch vernünftig damit und auch das laden und auslesen der daten funktioniert richtig also wenn ich das geld manuell in der datenbank ändere wird es beim einloggen problemlos geladen aber beim ausloggen wirds nicht richtig gespeichert.


    hier wird eigentlich der spieler gespeichert

    Code
    savePlayer(playerid)
    {
    	if(sInfo[playerid][eingeloggt]==0)return 1;
    	new query[128];
    	format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i',fraktion='%i,rang='%i' WHERE id='%i'",
    	sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo,sInfo[playerid][db_id]);
    	mysql_function_query(dbhandle,query,false,"","");
    	return 1;
    }


    die function wird bei OnPlayerDisconnect aufgerufen.


    wie gesagt das auslesen geht aber das speichern garnicht :(


    hat jemand ne idee wie das klappen könnte oder so oder woran es liegt?


    ich bin ein kompletter neueinsteiger was das scripten angeht und weiß desshalb nichtmehr weiter.

    2 Mal editiert, zuletzt von MindGrind ()

  • " GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo,sInfo[playerid][db_id]);"
    Du veruschst also das Geld IN dem Level, Fraktion, dem Rang und die ID zu speichern?
    Da stimmt glaub ich was nicht. :)

  • ich hab den beitrag oben nochmal bearbeitet das eine ist bisschen in der zeile verrutscht


    ich habs halt genauso gemacht wie in nem tutorial und da hats gefunzt unzwar genauso warum geht das bei mir nicht :(

  • 3
    4
    5
    6
    7
    8
    9


    savePlayer(playerid)
    {
    if(sInfo[playerid][eingeloggt]==0)return 1;
    new query[128];
    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i',fraktion='%i,rang='%i' WHERE id='%i'",
    sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo,sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }





    "GetPlayerMoney(playerid)" - An sich eine ganz tolle sache aber um Geld "hacks" zu vermeiden solltest du eine neue Variable auf machen.
    MySQL - hast du geschaut das der Datenbank connect stimmt?
    - Lass dir den Query mal ausprinten und führ ihn mal aus...
    - "Where id='%i'" ganz nett aber warum nimmst du nicht den Namen (die unterscheidung zwischen namen und ids macht in MySQL millisekunden)
    - Generell mach money zu einem Double ein int geht nur bist 32000 noch was ...


    MfG


    Mirco ;)



  • if(sInfo[playerid][eingeloggt]==0)return 1;


    Vielleicht liegt ja das Problem in dieser Abfrage, kann sein, dass diese Variable nicht richtig gesetzt wird.


    new query[128];
    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i',fraktion='%i,rang='%i' WHERE id='%i'",
    sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo,sInfo[playerid][db_id]);


    Versuch mal nur das Geld abzuspeichern und nicht die anderen Variablen. Vielleicht ist das Query einfach nur zu groß


    Ansonsten schau mal, was die mysql_log.txt sagt. Da stehen meistens auch hilfreiche Informationen

    Mit freundlichen Grüßen
    Zeuto

  • oha da seh ich grad paar sachen in der mysql_log


    Code
    [02:14:01] [WARNING] CMySQLResult::GetRowDataByName - field not found ("id")
    [02:25:44] [ERROR] CMySQLQuery::Execute[()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0' WHERE id='2000'' at line 1


    die sind da mehrfach drinne ich weiß nur nicht genau was mir das sagen soll :D

  • Hast du mal versucht, aus dem langen Query zwei kürzere Querys zu machen? Wie gesagt, kann sein dass der Query einfach zu lang ist.. :D


    //edit: versuch das mal so: (habe nur leerzeichen nach den Kommas hinzugefügt

    format(query,sizeof(query),"UPDATE user SET level='%i', money='%i', alevel='%i', fraktion='%i, rang='%i' WHERE id='%i'",
    sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo,sInfo[playerid][db_id]);

    Mit freundlichen Grüßen
    Zeuto

    Einmal editiert, zuletzt von Zeuto ()

  • int geht nur bist 32000 noch was ...


    Woher hast du den müll den her ? ein 16 Bit int ja aber kein 32 Bit int wie es heutzutage üblich ist und cell (welches pawn nutzt) ist einfach ein typedef für ein 32 bit int und somit ist −2.147.483.648 der minimalste wert und 2.147.483.647 der größte siehe hier

  • Woher hast du den müll den her ? ein 16 Bit int ja aber kein 32 Bit int wie es heutzutage üblich ist und cell (welches pawn nutzt) ist einfach ein typedef für ein 32 bit int und somit ist −2.147.483.648 der minimalste wert und 2.147.483.647 der größte siehe hier

    Oh ok sry mein Fehler ... :D


    Jedoch ist 2 Milliarden immer noch zu wenig je nach dem ....

  • also ich habs mal in zwei querys gemacht etwa so:



    aber es funzt immernoch nicht :(

  • ich habs jetzt hingekrigt mit dem geld der speichert das jetzt ich hab halt geändert das er nicht nach der ID in der tabelle sucht sondern nach dem namen... das funzt jetzt gut aber habe im mysql-log jez diese meldungen.


    Code
    [19:01:12] [WARNING] CMySQLResult::GetRowDataByName - field not found ("id")
  • Ja anscheinend gibt es die Spalte "id" nicht.. Mehr verstehe ich darunter nicht, vielleicht schaust du die ganze zeit in der falschen Tabelle nach oder so?


    //edit: Schick mal einen Screen von deiner Tabelle, dann kann man das besser beurteilen, wobei jetzt ist es egal, da es ja jetzt funktioniert :)

    Mit freundlichen Grüßen
    Zeuto