Mysql speichert nix Mehr

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
  • Hallo Community,


    Ich bins mal wieder Gestern habe ich ein Thread auf gemacht "Spieler wird nicht mehr Gespeichert"


    Jetzt habe ich das Problem das meine DB nix mehr speichert außer das Passwort


    habe aber auch keine mysql-errors mehr


    Hier ist das script vlt kann mir da mal einer Helfen :/ bin langsam am verzweifeln


    if(dialogid==Login)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>0)
    {
    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);
    SpawnPlayer(playerid);
    SetPlayerColor(playerid,COLOR_WHITE);
    }
    else
    {
    //Keine Eingabe
    SendClientMessage(playerid,COLOR_RED,"Du hast dein Passwort nicht eingegeben bitte Gib es ein");
    ShowPlayerDialog(playerid,Login,DIALOG_STYLE_PASSWORD,"{FF9600}Login","{FF9600}Login: {FFFFFF}Du musst dein Passwort eingeben","Login","Abbrechen");
    SetPlayerColor(playerid,COLOR_GREY);
    }
    }
    else
    {
    Kick(playerid);
    }
    return 1;
    }
    if(dialogid==Register)
    {
    if(response)
    {
    if(strlen(inputtext)>7)
    {
    SetPVarString(playerid,"PasswortText", inputtext);
    ShowPlayerDialog(playerid,Geschlecht,0,"{FF9E00}Wähle dein Geschlecht","Wähle nun dein Geschlecht, mit welchem du auf dem Server spielen möchtest.\nDu kannst natürlich auch dein echtes bentzen.", "Männlich", "Weiblich");
    }
    else
    {
    //Kleiner als 4 Zeichen
    SendClientMessage(playerid,COLOR_RED,"Dein passwort ist zu kurz es muss mindestens 8 Zeichen lang sein");
    ShowPlayerDialog(playerid,Register,DIALOG_STYLE_INPUT,"{FF9600}Registrierung","{FF9600}Registrierung:\n{FFFFFF}Bitte Registriere dich um\n auf dem server zu spielen.","Okay","Abbrechen");
    SetPlayerColor(playerid,COLOR_GREY);
    }
    }
    else
    {
    Kick(playerid);
    }
    return 1;
    }
    if(dialogid == Geschlecht){
    if(response){
    sInfo[playerid][geschlecht] = 1;
    ShowPlayerDialog(playerid,Alter,1,"{FF9E00}Wähle dein Alter","Gebe nun dein Alter hier ein, mit welchem du auf dem Server spielen willst.\nDu kannst auch dein richtiges Alter angeben.","OK","");
    } else {
    sInfo[playerid][geschlecht] = 2;
    ShowPlayerDialog(playerid,Alter,1,"{FF9E00}Wähle dein Alter","Gebe nun dein Alter hier ein, mit welchem du auf dem Server spielen willst.\nDu kannst auch dein richtiges Alter angeben.","OK","");
    }
    return 1;
    }
    if(dialogid == Alter){
    if(response){
    if(IsNumeric(inputtext)){
    new name[MAX_PLAYER_NAME],query[128],passwort[35],str[50];
    GetPlayerName(playerid,name,sizeof(name));
    sInfo[playerid][datum] = strval(inputtext);
    //Registrierungsfunktion
    GetPVarString(playerid,"PasswortText", str,sizeof(str));
    mysql_escape_string(str,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (`username`,`password`) VALUES ('%s','%s') ",name,passwort);
    mysql_function_query(dbhandle,query,true,"OnPlayerRegister","i",playerid);
    SetPlayerColor(playerid,COLOR_WHITE);
    } else {
    ShowPlayerDialog(playerid,Alter,1,"{FF9E00}Wähle dein Alter","Du hast keine Zahl angegeben! Gib dein Alter ein, mit welchem du auf dem Server spielen willst.","OK","");
    }
    } else {
    ShowPlayerDialog(playerid,Alter,1,"{FF9E00}Wähle dein Alter","Du hast kein Alter angegeben! Gib dein Alter ein, mit welchem du auf dem Server spielen willst.","OK","");
    }
    return 1;
    }
    return 1;
    }


    public OnPlayerRegister(playerid)
    {
    sInfo[playerid][db_id] = cache_insert_id(dbhandle);
    sInfo[playerid][eingeloggt] = 1;
    new randM = random(sizeof(SkinM)), randW = random(sizeof(SkinW));
    new Skin1 = SkinM[randM];
    new Skin2 = SkinW[randW];
    if(sInfo[playerid][geschlecht] == 1){
    SetSpawnInfo( playerid, 0, Skin1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
    sInfo[playerid][skin] = Skin1;
    } else if(sInfo[playerid][geschlecht] == 2){
    SetSpawnInfo( playerid, 0, Skin2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
    sInfo[playerid][skin] = Skin2;
    }
    savePlayer(playerid);
    SpawnPlayer(playerid);
    SetPlayerPos(playerid, 400.6223,-1532.5000,32.2734);
    return 1;
    }


    savePlayer(playerid)
    {
    if(sInfo[playerid][eingeloggt]==0)return 1;
    //Speichern Level,Geld
    new query[1024];
    format(query,sizeof(query),"UPDATE user SET level='%i',cash='%i',datum='%i',geschlecht='%i',alevel='%i',skin='%i',fraktion='%i',rang='%i' WHERE id='%i'"
    ,sInfo[playerid][level],sInfo[playerid][cash],sInfo[playerid][datum],sInfo[playerid][geschlecht],sInfo[playerid][alevel],sInfo[playerid][skin],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }

  • Es wird ja keine erstellt was mich wundert


    Sorry falsche gelsesen


    ja damit habe ich es auch versucht bekomme auch error


    //edit


    Okay jetzt habe ich keine Errors mehr aber was soll mysql_log(LOG_ALL); bringen



    Weil es wird keine mysql-log erstellt :/

    Einmal editiert, zuletzt von JOK3R ()

  • das waren die einzigen Errors die ich um 11 uhr bekommen habe wunder mich aber jetzt warum keine mehr erstellt wird weil nur das passwort und der username gespeichert wird


    SQL
    [11:53:44] [ERROR] CMySQLQuery::Execute[()] - (error #1054) Unknown column 'datum' in 'field list'[11:54:16] [ERROR] CMySQLQuery::Execute[()] - (error #1054) Unknown column 'datum' in 'field list'[11:55:13] [WARNING] CMySQLResult::GetRowDataByName - field not found ("datum")[11:55:13] [ERROR] cache_get_field_content_int - invalid data type
  • Schreibe deine Speicher-Funktion dann eben mal so:
    savePlayer(playerid)
    {
    printf("SavePlayer für %d aufgerufen.", playerid);
    if(sInfo[playerid][eingeloggt]==0)return 1;
    //Speichern Level,Geld
    new query[1024];
    format(query,sizeof(query),"UPDATE user SET level='%i',cash='%i',datum='%i',geschlecht='%i',alevel='%i',skin='%i',fraktion='%i',rang='%i' WHERE id='%i'"
    ,sInfo[playerid][level],sInfo[playerid][cash],sInfo[playerid][datum],sInfo[playerid][geschlecht],sInfo[playerid][alevel],sInfo[playerid][skin],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][db_id]);
    printf("query: %s", query);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    Dann registriere dich und poste was im server_log.txt steht.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Also
    Server-log:


    [16:27:10] SavePlayer für 0 aufgerufen.
    [16:27:10] query: UPDATE user SET level='0',cash='0',datum='18',geschlecht='1',alevel='0',skin='98',fraktion='0',rang='0' WHERE id='8'


    datum ist falsch da habe ich vergessen alter hinzumachen



    und mysql-log


    [16:27:10] [ERROR] CMySQLQuery::Execute[()] - (error #1054) Unknown column 'datum' in 'field list'

  • Aha, geht doch.


    format(query,sizeof(query),"UPDATE user SET level='%i',cash='%i',datum='%i',geschlecht='%i',alevel='%i',skin='%i',fraktion='%i',rang='%i' WHERE id='%i'"
    zu:
    format(query,sizeof(query),"UPDATE user SET level='%i',cash='%i',datum='%s',geschlecht='%i',alevel='%i',skin='%i',fraktion='%i',rang='%i' WHERE id='%i'"


    Außerdem hast du die Spalte "datum" nicht in der Tabelle deiner Datenbank.


    Wenn du das Alter aufnimmst, nenne die Spalte entwerder "pAlter" oder schreibe im Query:

    SQL
    `Alter`


    anstatt nur

    SQL
    Alter


    da ALTER ein SQL-Befehl ist.

  • okay geil der speichert jetzt alles aber ich habe irgwie immer noch ein problem mit dem datum obwohl ich es zu pAlter geändert habe


    [16:39:59] [ERROR] CMySQLQuery::Execute[()] - (error #1054) Unknown column 'datum' in 'field list'

  • Dieser Fehler sagt, dass die Spalte "datum" nicht existiert. Irgendwo rufst du also das auf.
    Hast du die Spalte "datum" zu "pAlter" geändert? Wenn ja, dann kannst du das auch wieder rückgängig machen, nur "Alter" solltest du nicht verwenden.

  • Das einzige was in pAlter ist ist in meiner alten savePlayer function die mit /* */ zu ist :/


    und das steht in der server-log


    [16:58:23] query: UPDATE user SET level='0',cash='0',datum='',geschlecht='1',alevel='0',skin='188',fraktion='0',rang='0' WHERE id='10'


    //Edit



    wen du das meinst


    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][level] = cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][db_id] = cache_get_field_content_int(0,"id",dbhandle);
    sInfo[playerid][cash] = cache_get_field_content_int(0,"cash",dbhandle);
    sInfo[playerid][datum] = cache_get_field_content_int(0,"datum",dbhandle);
    sInfo[playerid][geschlecht] = cache_get_field_content_int(0,"geschlecht",dbhandle);
    sInfo[playerid][alevel] = cache_get_field_content_int(0,"alevel",dbhandle);
    sInfo[playerid][skin] = cache_get_field_content_int(0,"skin",dbhandle);
    sInfo[playerid][fraktion] = cache_get_field_content_int(0,"fraktion",dbhandle);
    sInfo[playerid][rang] = cache_get_field_content_int(0,"rang",dbhandle);
    }
    else
    {
    //Passwort falsch
    SendClientMessage(playerid,COLOR_RED,"Das eingegebene Passwort ist falsch.");
    ShowPlayerDialog(playerid,Login,DIALOG_STYLE_PASSWORD,"{FF9600}Login","{FF9600}Login: {FFFFFF}Du musst dein Passwort eingeben","Login","Abbrechen");
    }
    return 1;}


    public OnUserCheck(playerid)
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==0)
    {
    //__________________________ Registrierung __________________________
    ShowPlayerDialog(playerid,Register,DIALOG_STYLE_INPUT,"{FF9600}Registrierung","{FFFFFF}Herzlich Willkommen auf {FF9600}German Sun Reallife\n{FFFFFF}Scheint als wärst du Neu hier Auf dem Server Bitte gib ein Gewünschtes {FF9600}Passwort {FFFFFF}ein\n damit du Hier Spielen kannst\nMit freundlichen Grüßen {FF9600}German Sun Reallife.","Okay","Abbrechen");
    }
    else
    {
    //__________________________ Login __________________________
    ShowPlayerDialog(playerid,Login,DIALOG_STYLE_PASSWORD,"{FF9600}Login","{FFFFFF}Willkommen zurück,\nDein {FF9600}Account {FFFFFF}wurde in der Datenbank gefunden\nMit freundlichen Grüßen {FF9600}German Sun Reallife.","Okay","Abbrechen");
    }
    return 1;
    }

    Einmal editiert, zuletzt von JOK3R ()

  • sInfo[playerid][datum] = cache_get_field_content_int(0,"datum",dbhandle);
    zu:
    new tmp[16];
    cache_get_field_content(0,"datum",tmp,dbhandle);
    format(sInfo[playerid][datum], 16, tmp);


    Und dann poste den Code mit dem du OnPasswordResponse aufrufst (suche nach "OnPasswordResponse" (mit Anführungszeichen)).

  • cache_get_field_content(0,"datum",sInfo[playerid][datum],dbhandle,16);
    Jeffry: Warum nicht einfach so?


  • if(dialogid==Login)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>0)
    {
    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);
    SpawnPlayer(playerid);
    SetPlayerColor(playerid,COLOR_WHITE);
    }
    else
    {
    //Keine Eingabe
    SendClientMessage(playerid,COLOR_RED,"Du hast dein Passwort nicht eingegeben bitte Gib es ein");
    ShowPlayerDialog(playerid,Login,DIALOG_STYLE_PASSWORD,"{FF9600}Login","{FF9600}Login: {FFFFFF}Du musst dein Passwort eingeben","Login","Abbrechen");
    SetPlayerColor(playerid,COLOR_GREY);
    }
    }
    else
    {
    Kick(playerid);
    }
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen