Problem mit MySQL R7

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
  • Hey Leute,
    Ich habe vor kurzen angefangen mit MySQL R7 und hab ein Problem und zwar ich habe neue Sachen hinzugefügt die ich Speichern wollte wie Adminlevel etc wenn ich es nun in meine Stocks/Publics eintragen will und inGame gehe kommt mein Register bzw Login Dialog nicht mehr woran kann das liegen? Hier mal meine Sachen:
    switch(dialogid)
    {
    case DIALOG_REGISTER:
    {
    if(!response) Kick(playerid);
    if(strlen(inputtext) > 32 || strlen(inputtext) < 4) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registrierung","Dein Passwort muss mindestens 4 Zeichen oder darf maximal 32 Zeichen enthalten!\n\nWillkommen auf ... Du hast noch keinen Account, \num dich zu Registrieren gib bitte ein gewünschtes Passwort ein:","Registrieren","Abbrechen");
    new password[129];
    WP_Hash(password, 129, inputtext);
    CreatePlayerAccount(playerid, password);
    CheckPlayerAccount(playerid);
    }
    case DIALOG_LOGIN:
    {
    if(!response) Kick(playerid);
    if(strlen(inputtext) > 32 || strlen(inputtext) < 4) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login","Dein Passwort muss mindestens 4 Zeichen oder darf maximal 32 Zeichen enthalten!\n\nWillkommen auf ...\nDeine Accountdaten wurden gefunden, bitte gib dein Passwort ein:","Login","Abbrechen");
    new password[129], query[128];
    WP_Hash(password, 129, inputtext);
    format(query, sizeof query, "SELECT * FROM `accounts` WHERE `ID` = '%d'", SpielerInfo[playerid][pID]);
    mysql_function_query(1, query, true, "OnPlayerAccountLoad", "is", playerid, password);
    }
    }


    stock CreatePlayerAccount(playerid, password[])
    {
    new query[256], name[MAX_PLAYER_NAME], escpassword[129];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    mysql_real_escape_string(name, name);
    mysql_real_escape_string(password, escpassword);
    format(query, sizeof query, "INSERT INTO `accounts` (`Username`, `Password`, `E-Mail`, `Level`, `Geld`, `Adminlevel`) VALUES ('%s', '%s', '%s', '0', '0', '0')", name, escpassword);
    mysql_function_query(1, query, false, "", "");
    }


    stock CheckPlayerAccount(playerid)
    {
    new query[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    mysql_real_escape_string(name, name);
    format(query, sizeof query, "SELECT `ID` FROM `accounts` WHERE `Username` = '%s'", name);
    mysql_function_query(1, query, true, "OnPlayerAccountCheck", "i", playerid);
    }


    public OnPlayerAccountCheck(playerid)
    {
    if(!IsPlayerConnected(playerid)) return 1;
    new rows, fields, result[5];
    cache_get_data(rows, fields);
    if(rows)
    {
    cache_get_field_content(0, "ID", result);
    SpielerInfo[playerid][pID] = strval(result);
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login", "Willkommen auf ...\nDeine Accountdaten wurden gefunden, bitte gib dein Passwort ein:","Login","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrierung", "Willkommen auf ...\nDu hast noch keinen Account, um dich zu Registrieren gib bitte ein gewünschtes Passwort ein:", "Registrieren", "Abbrechen");
    }
    return 1;
    }


    public OnPlayerAccountLoad(playerid, password[])
    {
    if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid)) return 1;
    new rows, fields, result[250];
    cache_get_data(rows, fields);
    if(!rows) Kick(playerid);
    cache_get_field_content(0, "Password", result);
    if(!strcmp(result, password, true))
    {
    cache_get_field_content(0, "E-Mail", result); SpielerInfo[playerid][pEMail] = strval(result);
    cache_get_field_content(0, "Level", result); SpielerInfo[playerid][pLevel] = strval(result);
    cache_get_field_content(0, "Geld", result); SpielerInfo[playerid][pGeld] = strval(result);
    cache_get_field_content(0, "Adminlevel", result); SpielerInfo[playerid][pAdmin] = strval(result);
    SpielerInfo[playerid][pLoggedin] = 1;
    SetPlayerScore(playerid, SpielerInfo[playerid][pLevel]);
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, SpielerInfo[playerid][pGeld]);
    SpawnPlayer(playerid);
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Das Angegebene Passwort stimmt nicht überein.\nBitte gib das richtige Passwort ein\n\nDu hast 3 Versuche sonst wirst du gekickt!:","Login","Abbrechen");
    WrongPassword[playerid] += 1;
    if(WrongPassword[playerid] == 3)
    {
    WrongPassword[playerid] = 0;
    Kick(playerid);
    }
    }
    return 1;
    }


    public SavePlayerAccount(playerid)
    {
    if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid)) return 1;
    new query[128];
    format(query, sizeof query, "UPDATE accounts SET E-Mail = %s, Level = %d, Geld = %d, Adminlevel = %d WHERE ID = %d", \
    SpielerInfo[playerid][pEMail], GetPlayerScore(playerid), GetPlayerMoney(playerid), SpielerInfo[playerid][pAdmin], SpielerInfo[playerid][pID]);
    mysql_function_query(1, query, false, "", "");
    return 1;
    }


    Ich hoffe ihr könnt mir helfen und vielen dank im voraus !


    Mit freundlichen Grüßen
    Dwayne_Pacino

  • 1. Bei der Passwortabfrage kein true (bei strcmp), sonst kann man wenn das Passwort "Hallo" auch HALLO oder HAllO usw. schreiben (Case-Sensitive wird ignoriert!)
    2. muss man bei integern kein ' ' machen (siehe INSERT INTO)
    3. Gib am besten mal den mysql_log dazu dann kann ich besser helfen