MySQL Problem --> Login/register problem

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
  • Tag,


    Ich hab ein Problem bei einem Login/Register system, immer wen ich mich einlogge muss ich mich registrieren (obwohl in der MySQL datenbank der account angelegt wird)
    ich hab schon bemerkt das der nach dem Registrieren nichts speichert.


    Hier mal der Code:
    if(GetPVarInt(playerid,"Eingeloggt") == 0) //Als erstes fragen wir ab ob der Spieler schon eingeloggt ist oder nicht, damit wir nicht bei jeder Skin auswahl uns neu Einloggen müssen.
    {
    if(mysql_CheckAccount(playerid) == 0)//Wür überprüfen ob der Account Existiert, falls nicht Zeigen wir den Dialog zum Registrieren.
    {
    SendClientMessage(playerid, COLOR_YELLOW, "[______Herzlich-Willkommen ______]");
    SendClientMessage(playerid, COLOR_WHITE, "Es wurde kein Account mit deinem Namen gefunden");
    SendClientMessage(playerid, COLOR_WHITE, "also bitte erstelle dir einen um Spielen zu können");
    ShowPlayerDialog(playerid,DIALOG_REG,DIALOG_STYLE_PASSWORD,"Register","Bitte Gib ein Passwort an\nACHTUNG: Gebe es NIEMALS weiter\nWir werden sie Nie nach ihrem\nPasswort fragen!","Register","Exit");
    }
    else if(mysql_CheckAccount(playerid) == 1)//Falls doch zeigen wir den Dialog zum Einloggen.
    {
    SendClientMessage(playerid, COLOR_YELLOW, "[______Herzlich-Willkommen ______]");
    SendClientMessage(playerid, COLOR_WHITE, "Dein Account wurde gefunden, bitte gebe dein Password.");
    SendClientMessage(playerid, COLOR_WHITE, "in die geöffnete Box ein um Spielen zu können.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Bitte gib dein Passwort ein\nWir werden sie Nie nach ihrem\nPasswort fragen!","Login","Abbrechen");
    }
    }
    OnPlayerLogin
    if(!strcmp(password, mysql_ReturnPasswort(playername2), true))
    {
    SetPVarInt(playerid,"Eingeloggt",1);
    LoadPlayer(playerid);
    SpawnPlayer(playerid);
    if(gettime() < PlayerInfo[playerid][pTban])
    {
    format(string, sizeof string, "Du bist noch geTimebannt, komm später wieder.");
    SendClientMessage(playerid,COLOR_RED, string);
    Kick(playerid);
    }
    } else {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Das Passwort ist nicht korrekt! Bitte gib nun dein richtiges Passwort ein:","Login","Abbrechen");
    }
    if(dialogid == DIALOG_LOGIN)
    {
    if(response && strlen(inputtext) > 0)
    {
    OnPlayerLogin(playerid, inputtext);
    } else {
    Kick(playerid);
    }
    }
    if(dialogid == DIALOG_REG)
    {
    if(response)
    {
    ShowPlayerDialog(playerid,DIALOG_REG2,DIALOG_STYLE_PASSWORD,"Account erstellen","Gib das Passwort für deinen Account ein:","OK","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_REG,DIALOG_STYLE_MSGBOX,"Account","Du benötigst einen Account, um auf diesem Server zu spielen!","Erstellen","Abbrechen");
    }
    }
    if(dialogid == DIALOG_REG2)
    {
    if(response && strlen(inputtext) > 0)
    {
    CreateAccount(playerid, inputtext);
    SetPVarInt(playerid,"Eingeloggt",1);
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Bitte logge dich nun in deinen Account ein!","Login","Abbrechen");
    }
    else
    {
    Kick(playerid);
    }
    }


    MFG


    //edit überschrift + push

  • //edit


    hatte Connect_To_Database() bei ongamemodeinit vergessen ...
    aber nun speichert er trotzdem nichts ...


    ich sag z.b. ein Spieler einen cmd macht 50k bekommen das mache ich so
    PlayerInfo[playerid][pAccount] = 50000;
    nun passiert aber nichts also er bekommt das Geld zwar aber nach dem Relogen nichtmehr und in der MySQL datenbank wurde das auchnicht eingetragen.


    MFG

  • Heißt deine Tabelle für die Spieler auch accounts?
    Das muss sie nämlich!

  • :D ok, hätte ja sein können. Dann weis ich auch nicht weiter, sehe keine Fehler.

  • schau mal so speicher ist es bei mir ab
    mysql_SetInt("accounts", "Geld", GetPlayerMoney(playerid), "Name", SpielerInfo[playerid][pName]);//geld
    und so lade ich es
    P_GivePlayerMoney(playerid,(mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName])));//Geld Hand
    P_GivePlayerMoney
    stock P_GivePlayerMoney(playerid,summe)
    {
    sInfo[playerid][sSpieler_geld] += summe;
    GivePlayerMoney(playerid,summe);
    }
    müssteste nur auf dein anpassen

  • ok versuche es mal


    ich hab aber noch das Problem das wen ich mich einlogge ca. 3 sekunden beim Einlogg fenster bin (dialog usw ist schon weg) und ich nicht gespawnt werde,
    dann werde ich nach den besagten 3 sekunden gespawnt aber kann nichts machen (also keine cmd usw benutzen) und nach weiteren ca. 10sek spawnen auch alle autos, pickups usw
    warum?

  • Ich hab nun herrausgefunden das die Funktion "OnPlayerCheckK" nicht richtig ausgeführt wird.
    Pastebin link: Klick
    wen sich jemand einloggt wird diese Funktion so aufgerufen:
    OnPlayerCheckK(playerid);
    (früher hieß es OnPlayerLogin(playerid,inputtext); da es dini war.)
    kann mir jemand weiterhelfen?
    hier das überarbeitete Login & register.
    if(dialogid == DIALOG_LOGIN)
    {
    if(response)
    {
    if(strlen(inputtext) == 0) // Wenn kein Passwort angegebene wurde
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das Angegebene Passwort war Falsch.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
    return 1;
    } else {
    new Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    if(!strcmp(inputtext, mysql_ReturnPasswort(Name), true)) // Wir holen uns das Passwort aus der MySQL Datenbank und überprüfen es mit dem angegebenen passwort.
    {
    //gPlayerLogged[playerid] = 1;
    SetPVarInt(playerid,"Eingeloggt",1); //Falls beide passwörter übereinstimmen wird die Variable auf 1 gesetzt damit wir die Skin auswahl benutzen können.
    LoadPlayer(playerid); //Der Spieler wird "geladen", speich es werden seine Daten aus der Datenbank geholt und in variablen gespeichert um diese im Skript zu verwenden.
    //SpawnPlayer(playerid); //Wir lassen den Spieler Spawnen
    OnPlayerCheckK(playerid);
    return 1;
    } else {
    //Wenn das Passwort falsch war, lassen wir erneut das Login fenster erscheinen damit der Spieler das Richtige Passwort eingibt.
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das war das Falsche Passwort.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
    return 1;
    }
    }
    } else {
    Kick(playerid); //Wenn auf Abbrechen geklickt wurde, wird der Spieler gekickt damit man ohne Account nicht Spielen kann.
    }
    /*if(response && strlen(inputtext) > 0)
    {
    OnPlayerLogin(playerid, inputtext);
    } else {
    Kick(playerid);
    }*/
    }
    if(dialogid == DIALOG_REG)
    {
    if(response)
    {
    ShowPlayerDialog(playerid,DIALOG_REG2,DIALOG_STYLE_PASSWORD,"Account erstellen","Gib das Passwort für deinen Account ein:","OK","Abbrechen");
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_REG,DIALOG_STYLE_MSGBOX,"Account","Du benötigst einen Account, um auf diesem Server zu spielen!","Erstellen","Abbrechen");
    }
    }
    if(dialogid == DIALOG_REG2)
    {
    if(response)
    {
    if(strlen(inputtext) == 0) // Wenn kein Passwort angegebene wurde
    {
    ShowPlayerDialog(playerid,DIALOG_REG,DIALOG_STYLE_INPUT,"Register","Das angegebene Passwort war zu Kurz...\nBitte Registrier dich jetzt mit einem Passwort:","Register","Abbrechen");
    return 1;
    } else {
    //gPlayerLogged[playerid] = 1;
    CreateAccount(playerid, inputtext); //Account wird erstellt
    SetPVarInt(playerid,"Eingeloggt",1); //Die variable wird auf 1 gesetzt, damit wir nun die Skin Auswahl benutzen können ohne wieder nach unserem Passwort gefragt zu werden.
    //SpawnPlayer(playerid); //Wir lassen den Spieler Spawnen
    OnPlayerCheckK(playerid);
    return 1;
    }
    } else {
    Kick(playerid); //Wenn auf Abbrechen geklickt wurde, wird der Spieler gekickt damit man ohne Account nicht Spielen kann.
    }
    /*if(response && strlen(inputtext) > 0)
    {
    CreateAccount(playerid, inputtext);
    SetPVarInt(playerid,"Eingeloggt",1);
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Bitte logge dich nun in deinen Account ein!","Login","Abbrechen");
    }
    else
    {
    Kick(playerid);
    }*/
    }


    MFG