Frage zu MySQl

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,
    Ich fange derzeit das Skripten an, und habe dort direkt mal eine Anfrage.
    Und zwar möchte ich gerne das direkt bei der Registrierung das Level + Adminlevel + Führerschein + Geld gespeichert wird.


    Meine Codezeilen sehen derzeit so aus:


    OnPlayerConnect:

    public OnPlayerConnect(playerid)
    {
    PlayerInfo[playerid][p_id] = 0;
    PlayerInfo[playerid][pLoggedIn] = false;
    PlayerInfo[playerid][pLevel] = 0;
    PlayerInfo[playerid][pMoney] = 0;
    PlayerInfo[playerid][pKills] = 0;
    PlayerInfo[playerid][pDeaths] = 0;
    PlayerInfo[playerid][pFuehrerschein] = 0;
    PlayerInfo[playerid][pAdmin] = 0;
    GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
    return 1;
    }

    Da sind ja die Werte beim ersten Connect auf 0 Gestellt.


    OnDialogResponse:

    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {

    if(!response) return Kick(playerid);




    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");




    new query[256];
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password,level,money,fuehrerschein,admin) VALUES ('%e', MD5('%e'),1,2500)", PlayerInfo[playerid][pName], inputtext);




    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    PlayerInfo[playerid][pMoney] = 0;
    GivePlayerMoney(playerid, 2500);
    return 1;
    }
    if(dialogid == DIALOG_LOGIN)
    {

    if(!response) return Kick(playerid);




    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");




    new query[256];
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = MD5('%e')", PlayerInfo[playerid][pName], inputtext);




    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    return 1;
    }
    return 0;
    }



    Soweit ich weiß, wird durch diesen Befehl der Spieler in der Datenbank angelegt.


    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password,level,money,fuehrerschein,admin) VALUES ('%e', MD5('%e'),1,2500)", PlayerInfo[playerid][pName], inputtext);


    Dort habe ich dann meine weiteren Einträge für die Datenbank gemacht siehe: INSERT INTO users(name,password,level,money,fuehrerschein,admin


    Und hier ist mein Public für OnPlayerLogin:

    public OnUserLogin(playerid)
    {
    new rows;
    cache_get_row_count(rows);
    if(rows == 0)
    {
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
    }
    else
    {
    cache_get_value_name_int(0, "id", PlayerInfo[playerid][p_id]);
    cache_get_value_name_int(0, "level", PlayerInfo[playerid][pLevel]);
    cache_get_value_name_int(0, "money", PlayerInfo[playerid][pMoney]);
    cache_get_value_name_int(0, "kills", PlayerInfo[playerid][pKills]);
    cache_get_value_name_int(0, "deaths", PlayerInfo[playerid][pDeaths]);
    cache_get_value_name_int(0, "Fuehrerschein", PlayerInfo[playerid][pFuehrerschein]);
    cache_get_value_name_int(0, "Admin", PlayerInfo[playerid][pAdmin]);
    PlayerInfo[playerid][pLoggedIn] = true;
    SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
    GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
    }
    return 1;
    }


    Und so sieht mein Public zum Speichern aus:
    s
    stock SaveUserStats(playerid)
    {
    //Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;



    //Ansonsten speichere sie
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d', fuehrerschein = '%d', admin = '%d', WHERE id = '%d'",
    PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][pFuehrerschein],PlayerInfo[playerid][pAdmin],PlayerInfo[playerid][p_id]);



    //Das Query wird abgesendet
    mysql_pquery(handle, query);
    return 1;
    }




    Ist dies so richtig? Also das die Daten auch so in der Datenbank gespeichert werden?

  • du musst bei einem mysql_format für den Insert befehl noch bei den values
    %d,%d ergänzen und nach inputtext PlayerInfo ..... für den führerschein und dem adminlevel hinzufügen.

    Meinst du das so?
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name = '%s' , password ='%d', level = '%d', money = '%d', fuehrerschein ='%d', admin = '%d') VALUES ('%e', MD5('%e'),1,2500)", PlayerInfo[playerid][pName], PlayerInfo[playerid][[pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pfuehrerschein], PlayerInfo[playerid][pAdmin],inputtext);


    Oder meinst du das so?
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name , password , level, money, fuehrerschein, admin) VALUES ('%e', MD5('%e'),'%d', '%d'1,2500)", PlayerInfo[playerid][pName], PlayerInfo[playerid][pAdmin],PlayerInfo[pfuehrerschein],inputtext);


    Hab deine Aussage nämlich nicht so richtig Verstanden.

    Einmal editiert, zuletzt von RZ$ ()

  • Nee so


    Code
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name , password ,  level, money, fuehrerschein, admin) VALUES ('%e', MD5('%e'), 1, 2500, %d, %d)", PlayerInfo[playerid][pName], inputtext, PlayerInfo[playerid][pAdmin],PlayerInfo[pfuehrerschein]);


    oder so :) , das wäre auch möglich, der unterschied liegt darin da du oben nur den Wert anpassen musst, welcher den Variablen zugeordnet wird unten musst du den Wert im String abändern.


    Code
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name , password ,  level, money, fuehrerschein, admin) VALUES ('%e', MD5('%e'), 1, 2500, 0, 0)", PlayerInfo[playerid][pName], inputtext);
  • Nee so


    Code
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name , password ,  level, money, fuehrerschein, admin) VALUES ('%e', MD5('%e'), 1, 2500, %d, %d)", PlayerInfo[playerid][pName], inputtext, PlayerInfo[playerid][pAdmin],PlayerInfo[pfuehrerschein]);


    oder so :) , das wäre auch möglich, der unterschied liegt darin da du oben nur den Wert anpassen musst, welcher den Variablen zugeordnet wird unten musst du den Wert im String abändern.


    Code
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name , password ,  level, money, fuehrerschein, admin) VALUES ('%e', MD5('%e'), 1, 2500, 0, 0)", PlayerInfo[playerid][pName], inputtext);

    Ich probiere es mal aus.