Sa-mp Login/Register Fehler

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. Ich scripte derzeit nach den Tutorials von MrMonat. Basierend alles auf MySQL.
    Ich registriere mich und nehme das Passwort 123456789. Wenn ich nach dem reconnecten im Login Dialog nichts eingebe, ist es falsch so wie es sein soll.
    Wenn ich aber sag ich mal irgendwas eingebe zum Beispiel 2 dann werde ich eingeloggt, wieso? Jeffry:


    #define DIALOG_LOGIN 3 //Login Dialog
    #define DIALOG_REGISTER 2 //Register Dialog
    forward OnUserCheck(playerid);
    forward OnPasswordReponse(playerid);


    //Enums & Enum's
    enum playerInfo{
    eingeloggt,
    level
    }


    //Globale Variablen
    new dbhandle; //<--- Connectionhandle (MYSQL)
    new sInfo[MAX_PLAYERS][playerInfo]; //Spieler Info (sInfo)


    public OnGameModeInit()
    {
    SetGameModeText("German Reallife"); //Mode by SAMP
    AddPlayerClass(3, 377.3560,-2047.6115,7.8301,13.8659, 0, 0, 0, 0, 0, 0); //Spawn


    //MySQL verbindung herstellen
    dbhandle = mysql_connect(db_host,db_user,db_db,db_pass);
    print("MySQL Verbindung wird hergestellt.");
    return 1;
    }


    public OnGameModeExit()
    {
    mysql_close(dbhandle); //Verbindung schließen
    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,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registration","Gib bitte dein gewünschtes Passwort an:","Los","Abbrechen");
    }
    else
    {
    //Login
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib bitte dein Passwort ein:","Okay","Abbrechen");
    }
    //print("OnUserCheck wurde aufgerufen.");
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    //Login/Register
    new name[MAX_PLAYER_NAME],query[127];
    GetPlayerName(playerid,name,sizeof(name));
    format(query,sizeof(query),"SELECT id FROM user WHERE username='%s'",name);
    mysql_function_query(dbhandle,query,true,"OnUserCheck","i",playerid);
    return 1;
    }


    public OnPasswordReponse(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);
    printf("playerid: %i hat das Level: %i",playerid,sInfo[playerid][level]);
    }
    else
    {
    //Passwort falsch
    SendClientMessage(playerid,COLOR_RED,"Du hast ein falsches Passwort eingegeben.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib bitte dein Passwort ein:","Okay","Abbrechen");
    }
    return 1;
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid==DIALOG_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);
    }
    else
    {
    //Keine Eingabe
    SendClientMessage(playerid,COLOR_RED,"Gib bitte dein Passwort ein.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib bitte dein Passwort ein:","Okay","Abbrechen");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du hast den Vorgang abgebrochen.");
    Kick(playerid);
    }
    return 1;
    }
    if(dialogid==DIALOG_REGISTER)
    {
    if(response)
    {
    new name[MAX_PLAYER_NAME],query[128],passwort[35];
    GetPlayerName(playerid,name,sizeof(name));
    if(strlen(inputtext)>3)
    {
    //Registrierungsfunktion
    mysql_escape_string(inputtext,passwort,dbhandle);
    format(query,sizeof(query),"INSERT INTO user (username,password) VALUES ('%s','%s') ",name,passwort);
    mysql_function_query(dbhandle,query,false,"","");
    }
    else
    {
    //Kleiner als 4
    SendClientMessage(playerid,COLOR_RED,"Das Passwort muss mindestens 4 Zeichen haben.");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registration","Gib bitte dein gewünschtes Passwort an:","Los","Abbrechen");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du hast den Vorgang abgebrochen.");
    Kick(playerid);
    }
    return 1;
    }
    return 1;
    }



  • So auf dem ersten Blick seh ich keine Fehler.
    Versuch mal bei DIALOG_LOGIN die query size höher zu stellen. Also einfach query[256] statt query[128]. Weil wenn die query zu lang ist, wird sie einfach abgeschnitten.