Problem bei Alter und Wohnort speichern

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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 Morgen Community!
    Und zwar wenn ich das Alter speichern möchte und den Wohnort kriege ich nach dem Tutorial ein mysql_log.
    Er speichert es einfach nicht ab.
    Ich habe mal ein print gemacht und es kommt bei einer beim letzten Part des Tutorials.
    Und dort ist auch SpielerSpeichern mit drinne ^^
    Wie es aussieht liegt es am speichern aber ich sehe dort keine Fehler.


    Letzer Tutorial part:

    if(pInfo[playerid][pTutorial] == 7)
    {
    for(new i=0; i<20; i++)
    {
    SendClientMessage(playerid,COLOR_DROT,"");
    }
    SendClientMessage(playerid,COLOR_DGRÜN," ** Das Tutorial ist beendet. **");
    SendClientMessage(playerid,COLOR_DGRÜN," ** Du hast dich erfolgreich Registriert. **");
    SendClientMessage(playerid,COLOR_DGRÜN," ** Bitte logge dich noch einmal ein, damit deine Daten geladen werden.");
    SendClientMessage(playerid,COLOR_DGRÜN," ** Du erhälst als Startbonus 10.000$ und Level 2. **");
    SendClientMessage(playerid,COLOR_DGRÜN,"** Das [GR]-Team wünscht dir Viel Spaß auf German Reallife. **");
    TextDrawShowForPlayer(playerid,usebox);
    TextDrawShowForPlayer(playerid,gr);
    TextDrawShowForPlayer(playerid,registerr);
    TextDrawShowForPlayer(playerid,einloggen);
    TextDrawShowForPlayer(playerid,updates);
    TextDrawShowForPlayer(playerid,ateam);
    TextDrawShowForPlayer(playerid,umrandung1);
    TextDrawShowForPlayer(playerid,umrandung2);
    TextDrawShowForPlayer(playerid,umrandung3);
    TextDrawShowForPlayer(playerid,umrandung4);
    TextDrawShowForPlayer(playerid,uhrzeit);
    SelectTextDraw(playerid, 0x00FF00FF);
    pInfo[playerid][pTutorial] = 0;
    GivePlayerMoney(playerid,10000);
    SetPlayerScore(playerid,2);
    SpielerSpeichern(playerid);
    SpawnPlayer(playerid);
    SetPlayerVirtualWorld(playerid,0);
    TogglePlayerControllable(playerid,1);
    return 1;
    }


    SpielerSpeichern:

    SpielerSpeichern(playerid)
    {
    if(pInfo[playerid][pEingeloggt] == 0)return 1;
    new query[256];
    format(query,256,"UPDATE spielerdaten SET level='%i', geld='%i',geschlecht='%i',alter='%i',wohnort='%i' \
    WHERE id='%i'",
    GetPlayerScore(playerid), GetPlayerMoney(playerid), pInfo[playerid][pGeschlecht],
    pInfo[playerid][pAlter],pInfo[playerid][pWohnort],pInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    OnDialogResponse:

    if(dialogid == DIALOG_REG0)
    {
    if(response)
    {
    if(pInfo[playerid][pTutorial] == 1)
    {
    new year, month,day;
    getdate(year, month, day);
    new string[128];
    new DateInfo[3][20];
    split(inputtext, DateInfo, '.');
    if(response == 1)
    if (strlen(inputtext) > 10) {
    ShowPlayerDialog(playerid,DIALOG_REG0,DIALOG_STYLE_INPUT,"Geburtsdatum Schritt (1/3","ANGABEFEHLER:Wann bist du geboren?\nAngabe bitte in TT.MM.JJJJ","Weiter"," ");
    return 0;
    }
    if (!IsValidDate(strval(DateInfo[0]),strval(DateInfo[1]),strval(DateInfo[2]))) {
    ShowPlayerDialog(playerid,DIALOG_REG0,DIALOG_STYLE_INPUT,"Geburtsdatum Schritt (1/3","ANGABEFEHLER:Wann bist du geboren?\nAngabe bitte in TT.MM.JJJJ","Weiter"," ");
    return 0;
    }
    if(year - strval(DateInfo[2]) > 100 || strval(DateInfo[2]) < 1 || strval(DateInfo[2]) >= year)
    {
    ShowPlayerDialog(playerid,DIALOG_REG0,DIALOG_STYLE_INPUT,"Geburtsdatum Schritt (1/3","ANGABEFEHLER:Wann bist du geboren?\nAngabe bitte in TT.MM.JJJJ","Weiter"," ");
    return 0;
    }
    new check = year - strval(DateInfo[2]);
    if(check == year)
    {
    ShowPlayerDialog(playerid,DIALOG_REG0,DIALOG_STYLE_INPUT,"Geburtsdatum Schritt (1/3)","ANGABEFEHLER:Wann bist du geboren?\nAngabe bitte in TT.MM.JJJJ","Weiter"," ");
    return 0;
    }
    if(strval(DateInfo[1]) > month)
    {
    check -= 1;
    }
    else if(strval(DateInfo[1]) == month && strval(DateInfo[0]) > day)
    {
    check -= 1;
    }
    pInfo[playerid][pAlter] = check;
    format(string, sizeof(string), "Okay, du bist also %d Jahre alt.",pInfo[playerid][pAlter]);
    SendClientMessage(playerid, -1, string);
    pInfo[playerid][pTutorial] = 2;
    printf("%s ist %d Jahre alt.",SpielerName(playerid),check);
    ShowPlayerDialog(playerid,DIALOG_REG1,DIALOG_STYLE_MSGBOX,"Wähle dein Geschlecht aus","Bist du Männlich oder Weiblich?","Männlich","Weiblich");
    }

    }
    else
    {
    SendClientMessage(playerid,COLOR_ROT," Du hast die Registrierung abgebrochen.");
    Kick(playerid);
    }
    return 1;
    }



    if(dialogid == DIALOG_REG2)
    {
    if(pInfo[playerid][pTutorial] == 3)
    {
    if(response == 1)
    {
    switch (listitem)
    {
    case 0://Deutschland
    {
    printf("%s kommt aus Deutschland",SpielerName(playerid));
    pInfo[playerid][pWohnort] = 1;
    SendClientMessage(playerid, -1, "Du kommst aus Deutschland.");
    SendClientMessage(playerid, 0x0091FFFF, "Du hast dir erfolgreich einen Account erstellt");
    SendClientMessage(playerid, 0x0091FFFF, "Danke für die Infos nun kommt das Tutorial");
    pInfo[playerid][pTutorial] = 4;
    SetTimerEx("Tutorial",2000,false,"i",playerid);
    }
    case 1://österreich
    {
    printf("%s kommt aus Österreich",SpielerName(playerid));
    pInfo[playerid][pWohnort] = 2;
    SendClientMessage(playerid, -1, "Du kommst aus Österreich.");
    SendClientMessage(playerid, 0x0091FFFF, "Du hast dir erfolgreich einen Account erstellt");
    SendClientMessage(playerid, 0x0091FFFF, "Danke für die Infos nun kommt das Tutorial");
    pInfo[playerid][pTutorial] = 4;
    SetTimerEx("Tutorial",2000,false,"i",playerid);
    }
    case 2://Schweiz
    {
    printf("%s kommt aus der Schwei",SpielerName(playerid));
    pInfo[playerid][pWohnort] = 3;
    SendClientMessage(playerid, -1, "Du kommst aus der Schweiz.");
    SendClientMessage(playerid, 0x0091FFFF, "Du hast dir erfolgreich einen Account erstellt");
    SendClientMessage(playerid, 0x0091FFFF, "Danke für die Infos nun kommt das Tutorial");
    pInfo[playerid][pTutorial] = 4;
    SetTimerEx("Tutorial",2000,false,"i",playerid);
    }
    }
    }
    }
    return 1;
    }


    mysql.log

    Code
    [00:30:50] [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 'alter='15',wohnort='1' WHERE id='8'' at line 1
  • Hast du die Spalte on der Datenbank auch umbenannt?


    Eigentlich musst du das gar nicht machen, du kannst auch einfach alter zu `alter` ändern, dann sollte es auch klappen.



    Wenn es mit keiner der beiden Varianten geht, dann ändere das Log Format mal zu Log All.

  • Debug-modus:


  • Bei der Registration speicherst du das Alter ja auch gar nicht (bei INSERT INTO):

    Zitat

    INSERT INTO spielerdaten (username,passwort) VALUES ...


    Das solltest du noch hinzufügen, wenn du es beim registrieren speichern lassen willst.
    Ansonsten musst du eben direkt nach dem registrieren SpielerSpeichern aufrufen.


    Aber wie du siehst, steht in dem Log nichts von UPDATE zusammen mit dem Alter.

  • Also der Account wird erstellt sobald der Spieler sein gewünschtest Passwort eingegeben hat und auf Register klickt.
    Aber Alter etc wird erst im Tutorial erstellt, und das Tutorial endet bei part 7.
    Dort ist auch SpielerSpeichern drinne.


    if(pInfo[playerid][pTutorial] == 7)
    {
    for(new i=0; i<20; i++)
    {
    SendClientMessage(playerid,COLOR_DROT,"");
    }
    SendClientMessage(playerid,COLOR_DGRÜN," ** Das Tutorial ist beendet. **");
    SendClientMessage(playerid,COLOR_DGRÜN," ** Du hast dich erfolgreich Registriert. **");
    SendClientMessage(playerid,COLOR_DGRÜN," ** Bitte logge dich noch einmal ein, damit deine Daten geladen werden.");
    SendClientMessage(playerid,COLOR_DGRÜN," ** Du erhälst als Startbonus 10.000$ und Level 2. **");
    SendClientMessage(playerid,COLOR_DGRÜN,"** Das [GR]-Team wünscht dir Viel Spaß auf German Reallife. **");
    TextDrawShowForPlayer(playerid,usebox);
    TextDrawShowForPlayer(playerid,gr);
    TextDrawShowForPlayer(playerid,registerr);
    TextDrawShowForPlayer(playerid,einloggen);
    TextDrawShowForPlayer(playerid,updates);
    TextDrawShowForPlayer(playerid,ateam);
    TextDrawShowForPlayer(playerid,umrandung1);
    TextDrawShowForPlayer(playerid,umrandung2);
    TextDrawShowForPlayer(playerid,umrandung3);
    TextDrawShowForPlayer(playerid,umrandung4);
    TextDrawShowForPlayer(playerid,uhrzeit);
    SelectTextDraw(playerid, 0x00FF00FF);
    pInfo[playerid][pTutorial] = 0;
    GivePlayerMoney(playerid,10000);
    SetPlayerScore(playerid,2);
    SpielerSpeichern(playerid);
    SpawnPlayer(playerid);
    SetPlayerVirtualWorld(playerid,0);
    TogglePlayerControllable(playerid,1);
    return 1;
    }


    SpielerSpeichern(playerid)
    {
    if(pInfo[playerid][pEingeloggt] == 0)return 1;
    new query[256];
    format(query,256,"UPDATE spielerdaten SET level='%i', geld='%i', geschlecht='%i', `alter`='%i', `wohnort`='%i' WHERE id='%i'",GetPlayerScore(playerid),
    GetPlayerMoney(playerid), pInfo[playerid][pGeschlecht],pInfo[playerid][pAlter],pInfo[playerid][pWohnort],pInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }

  • Sobald ich beim IINSERT INTO noch etwas hinzufüge, trägt er garnix mehr ein.
    Jetzt kriege ich ein MySQL log von irgendwas mit OnPlayerRegister.


    Ich schicke einfach nochmal paar codes vom Tutorial wo wohnort dies das gespeichert wird.



    public OnPlayerRegister(playerid)
    {
    pInfo[playerid][db_id] = cache_insert_id(dbhandle);
    return 1;
    }


    SpielerSpeichern(playerid)
    {
    if(pInfo[playerid][pEingeloggt] == 0)return 1;
    new query[256];
    format(query,256,"UPDATE spielerdaten SET level='%i', geld='%i', geschlecht='%i', age='%i', `wohnort`='%i' WHERE id='%i'",GetPlayerScore(playerid),
    GetPlayerMoney(playerid), pInfo[playerid][pGeschlecht],pInfo[playerid][pAlter],pInfo[playerid][pWohnort],pInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    if(dialogid == DIALOG_REGISTER)
    {
    if(response)
    {
    new query[300],passwort[35];
    if(strlen(inputtext)>3)
    {
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,300,"INSERT INTO spielerdaten (username,passwort,geschlecht,age,wohnort) VALUES ('%s',MD5('%s'))",
    SpielerName(playerid),passwort,pInfo[playerid][pGeschlecht],pInfo[playerid][pAlter],pInfo[playerid][pWohnort]);
    mysql_function_query(dbhandle,query,true,"OnPlayerRegister","i",playerid);
    TextDrawHideForPlayer(playerid,usebox);
    TextDrawHideForPlayer(playerid,gr);
    TextDrawHideForPlayer(playerid,registerr);
    TextDrawHideForPlayer(playerid,einloggen);
    TextDrawHideForPlayer(playerid,updates);
    TextDrawHideForPlayer(playerid,ateam);
    TextDrawHideForPlayer(playerid,umrandung1);
    TextDrawHideForPlayer(playerid,umrandung2);
    TextDrawHideForPlayer(playerid,umrandung3);
    TextDrawHideForPlayer(playerid,umrandung4);
    TextDrawHideForPlayer(playerid,uhrzeit);
    CancelSelectTextDraw(playerid);
    pInfo[playerid][pTutorial] = 1;
    SetTimerEx("Tutorial",1,false,"i",playerid);
    ShowPlayerDialog(playerid,DIALOG_REG0,DIALOG_STYLE_INPUT,"Registrierung Schritt (1/3)","Wann bist du geboren?\nAngabe bitte in TT.MM.JJJJ","Weiter","Abbrechen");
    }
    else
    {
    SendClientMessage(playerid,COLOR_ROT,"Dein Passwort muss mindestens 4 Zeichen lang sein.");
    new string[350];
    format(string,350,"{44A8F9}Herzlich Willkommen auf German Reallife {0A9637}%s.\n{44A8F9}Wir freuen uns das du auf unseren {0A9637}Server {44A8F9}gefunden hast.\n\
    In der {0A9637}Datenbank {44A8F9}wurde dein {0A9637}Account {44A8F9}nicht gefunden, gib bitte dein gewünschtest {0A9637}Passwort {44A8F9}ein\n\
    um dir ein {0A9637}Account {44A8F9}erstellen zu können.",SpielerName(playerid));
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrierung",string,"Weiter","Abbrechen");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_ROT,"Du hast die Registrierung abgebrochen.");
    Kick(playerid);
    }
    return 1;
    }
    if(dialogid == DIALOG_REG0)
    {
    if(response)
    {
    if(pInfo[playerid][pTutorial] == 1)
    {
    new year, month,day;
    getdate(year, month, day);
    new string[128];
    new DateInfo[3][20];
    split(inputtext, DateInfo, '.');
    if(response == 1)
    if (strlen(inputtext) > 10) {
    ShowPlayerDialog(playerid,DIALOG_REG0,DIALOG_STYLE_INPUT,"Geburtsdatum Schritt (2/3)","ANGABEFEHLER:Wann bist du geboren?\nAngabe bitte in TT.MM.JJJJ","Weiter"," ");
    return 0;
    }
    if (!IsValidDate(strval(DateInfo[0]),strval(DateInfo[1]),strval(DateInfo[2]))) {
    ShowPlayerDialog(playerid,DIALOG_REG0,DIALOG_STYLE_INPUT,"Geburtsdatum Schritt (2/3","ANGABEFEHLER:Wann bist du geboren?\nAngabe bitte in TT.MM.JJJJ","Weiter"," ");
    return 0;
    }
    if(year - strval(DateInfo[2]) > 100 || strval(DateInfo[2]) < 1 || strval(DateInfo[2]) >= year)
    {
    ShowPlayerDialog(playerid,DIALOG_REG0,DIALOG_STYLE_INPUT,"Geburtsdatum Schritt (2/3","ANGABEFEHLER:Wann bist du geboren?\nAngabe bitte in TT.MM.JJJJ","Weiter"," ");
    return 0;
    }
    new check = year - strval(DateInfo[2]);
    if(check == year)
    {
    ShowPlayerDialog(playerid,DIALOG_REG0,DIALOG_STYLE_INPUT,"Geburtsdatum Schritt (2/3)","ANGABEFEHLER:Wann bist du geboren?\nAngabe bitte in TT.MM.JJJJ","Weiter"," ");
    return 0;
    }
    if(strval(DateInfo[1]) > month)
    {
    check -= 1;
    }
    else if(strval(DateInfo[1]) == month && strval(DateInfo[0]) > day)
    {
    check -= 1;
    }
    pInfo[playerid][pAlter] = check;
    format(string, sizeof(string), "Okay, du bist also %d Jahre alt.",pInfo[playerid][pAlter]);
    SendClientMessage(playerid, -1, string);
    pInfo[playerid][pTutorial] = 2;
    printf("%s ist %d Jahre alt.",SpielerName(playerid),check);
    ShowPlayerDialog(playerid,DIALOG_REG1,DIALOG_STYLE_MSGBOX,"Wähle dein Geschlecht aus Schritt(2/3)","Bist du Männlich oder Weiblich?","Männlich","Weiblich");
    }

    }
    else
    {
    SendClientMessage(playerid,COLOR_ROT," Du hast die Registrierung abgebrochen.");
    Kick(playerid);
    }
    return 1;
    }
    if(dialogid == DIALOG_REG1)
    {
    if(pInfo[playerid][pTutorial] == 2)
    {
    if(response == 1)
    {
    printf("%s ist Männlich",SpielerName(playerid));
    pInfo[playerid][pGeschlecht] = 1;
    SendClientMessage(playerid, -1, "Du bist Männlich");
    pInfo[playerid][pTutorial] = 3;
    ShowPlayerDialog(playerid,DIALOG_REG2,DIALOG_STYLE_LIST,"Woher kommst du? Schritt (3/3)","Deutschland\nÖsterreich\nSchweiz","Weiter","Abbrechen");
    }
    if(response == 0)
    {
    printf("%s ist Weiblich.",SpielerName(playerid));
    pInfo[playerid][pGeschlecht] = 2;
    SendClientMessage(playerid, -1, "Du bist weiblich");
    pInfo[playerid][pTutorial] = 3;
    ShowPlayerDialog(playerid,DIALOG_REG2,DIALOG_STYLE_LIST,"Woher kommst du? Schritt (3/3?","Deutschland\nÖsterreich\nSchweiz","Weiter","Abbrechen");
    }
    }
    return 1;
    }
    if(dialogid == DIALOG_REG2)
    {
    if(pInfo[playerid][pTutorial] == 3)
    {
    if(response == 1)
    {
    switch (listitem)
    {
    case 0://Deutschland
    {
    printf("%s kommt aus Deutschland",SpielerName(playerid));
    pInfo[playerid][pWohnort] = 1;
    SendClientMessage(playerid, -1, "Du kommst aus Deutschland.");
    SendClientMessage(playerid, 0x0091FFFF, "Du hast dir erfolgreich einen Account erstellt");
    SendClientMessage(playerid, 0x0091FFFF, "Danke für die Infos nun kommt das Tutorial");
    pInfo[playerid][pTutorial] = 4;
    SetTimerEx("Tutorial",2000,false,"i",playerid);
    }
    case 1://österreich
    {
    printf("%s kommt aus Österreich",SpielerName(playerid));
    pInfo[playerid][pWohnort] = 2;
    SendClientMessage(playerid, -1, "Du kommst aus Österreich.");
    SendClientMessage(playerid, 0x0091FFFF, "Du hast dir erfolgreich einen Account erstellt");
    SendClientMessage(playerid, 0x0091FFFF, "Danke für die Infos nun kommt das Tutorial");
    pInfo[playerid][pTutorial] = 4;
    SetTimerEx("Tutorial",2000,false,"i",playerid);
    }
    case 2://Schweiz
    {
    printf("%s kommt aus der Schwei",SpielerName(playerid));
    pInfo[playerid][pWohnort] = 3;
    SendClientMessage(playerid, -1, "Du kommst aus der Schweiz.");
    SendClientMessage(playerid, 0x0091FFFF, "Du hast dir erfolgreich einen Account erstellt");
    SendClientMessage(playerid, 0x0091FFFF, "Danke für die Infos nun kommt das Tutorial");
    pInfo[playerid][pTutorial] = 4;
    SetTimerEx("Tutorial",2000,false,"i",playerid);
    }
    }
    }
    }
    return 1;
    }

  • Die Platzhalter bei VALUES fehlen hier:
    format(query,300,"INSERT INTO spielerdaten (username,passwort,geschlecht,age,wohnort) VALUES ('%s',MD5('%s'))",
    SpielerName(playerid),passwort,pInfo[playerid][pGeschlecht],pInfo[playerid][pAlter],pInfo[playerid][pWohnort]);


    Der VALUES Teil muss so sein:
    VALUES ('%s',MD5('%s'),'%d','%d','%d')


    Oder eben %s falls eines ein String ist.


    Poste nächstes mal bitte den Log mit dazu, dann müssen wir nicht erst suchen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Der speichert wie zuvor nur den Name und das Passwort.


    Nochmal den LOG_ALL..:


  • Ist ja auch klar, du gibst die Daten erst mit dem Tutorial ein, also nach der Registration. Du musst die Daten entweder vor dem Registrieren vom Spieler abfragen, oder danach gesondert in die Datenbank speichern, zum Beispiel mit SpielerSpeichern.


    Gehe in deinen Server, registriere dich und gehe dann durch das Tutorial. Stehen dann die Werte in der Datenbank? Sollten sie eigentlich, wenn du in deinem SpielerSpeichern das `alter` zu `age` geändert hast.
    Falls nicht, dann poste dein SpielerSpeichern und den Log der entstanden ist, als du das Tutorial gemacht hast.

  • Die daten weren gepsichert sobald das ganze Tutorial fertig ist.
    Egal, ich habe trotzdem einfach mal überall SpielerSpeichern hin getan.
    Es geht immer noch nicht.


    SpielerSpeichern Funktion:
    SpielerSpeichern(playerid)
    {
    if(pInfo[playerid][pEingeloggt] == 0)return 1;
    new query[256];
    format(query,256,"UPDATE spielerdaten SET level='%i', geld='%i', geschlecht='%i', age='%i', `wohnort`='%i' WHERE id='%i'",GetPlayerScore(playerid),
    GetPlayerMoney(playerid), pInfo[playerid][pGeschlecht],pInfo[playerid][pAlter],pInfo[playerid][pWohnort],pInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    }



    Log:

  • Also nochmal:


    Die Daten (Age / Wohnort / Geschlecht) können in deinem Fall erst nach dem Tutorial in die Datenbank gespeichert werden.



    In deinem Log fehlt der Teil des Tutorials. Du registrierst dich, danach ist der Log vorbei. Da steht nichts von UPDATE, entsprechend fehlt der Teil als du das Tutorial gemacht hast. Die ersten paar Zeilen vor dem mysql_connect sind nicht von Bedeutung, da es vor der Registration war.



    => Lösche den mysql_log.txt. Dann gehe in deinen Server, registriere dich und gehe dann durch das Tutorial. Dann poste den gesamten Log dazu und dein SpielerSpeichern.