Brauche Hilfe beim /login Command

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
  • Hallo,
    ich habe ein Problem bei meinem login script. Es gibt ein fehler undzwar man kann, wenn das passwort z.b. aaaa ist kann man
    sich mit /login aaaa Einloggen aber auch mit /login a nur ich weiß nicht warum man das auch kann.
    Ich habe mit mysql gearbeitet in diesen Script. Ich habe 2 tabellen user und pass.
    Bei user die Spalten: name und adminlvl
    Bei pass die Spalten: name und pass
    Ich habe 2 tabellen,weil ich späten noch eine pass vergessen funktion mache und nicht beim scripten alle pass wörter sehe.
    Hier ist der Script:
    Hier die Includes:

    #include <a_samp>
    #include <sscanf>
    #include <zcmd>
    #include <mysql>

    Hier die enumes/defines:

    #define COLOR_WHITE 0xFFFFFFFF// weiß
    #define COLOR_RED 0xFF0000FF //rot
    #define COLOR_ERROR 0xFF0000FF //Fehler
    #define COLOR_SUCCESSFUL 0x00FF00FF //erfolgreich


    enum pinfo{
    name[30],
    adminlvl,
    pLogged,
    }
    new playerinfo[MAX_PLAYERS][pinfo];




    enum passinfo{
    name[30],
    passwort[128],
    }
    new playerpassinfo[MAX_PLAYERS][passinfo];



    Hier der /login command

    COMMAND:login(playerid,parms[])
    {


    new pass;
    if(sscanf(parms , "s[128]",pass)) {
    return SendClientMessage(playerid,COLOR_RED,"BENUTZE: /login [passwort]");
    }



    new query[128];
    new bedienung[128];
    new playername[30];
    GetPlayerName(playerid, playername, 30);
    format(bedienung,sizeof(bedienung),"name = '%s'",playername);
    format(query,sizeof(query),"SELECT * FROM user WHERE %s",bedienung);
    mysql_query(query);
    mysql_store_result();



    if(mysql_num_rows())
    {
    new str[512];
    while(mysql_fetch_row(str))
    {
    sscanf(str, "e<p<|>s[30]i[128]>",playerinfo[playerid]);
    }
    mysql_free_result();
    format(query,sizeof(query),"SELECT * FROM pass WHERE %s",bedienung);
    mysql_query(query);
    mysql_store_result();


    if(mysql_num_rows())
    {
    while(mysql_fetch_row(str))
    {
    sscanf(str, "e<p<|>s[30]s[128]>",playerpassinfo[playerid]);
    }
    mysql_free_result();


    new chat[128];//nur zum testen ob er es ausgelesen hat
    format(chat,sizeof(chat),"%s,%s",playerpassinfo[playerid][name],playerpassinfo[playerid][passwort]);//nur zum testen ob er es ausgelesen hat
    SendClientMessage(playerid,COLOR_RED,chat);//nur zum testen ob er es ausgelesen hat


    if(playerpassinfo[playerid][passwort] == pass)
    {
    if(playerinfo[playerid][adminlvl]>0)
    {
    SendClientMessage(playerid,COLOR_SUCCESSFUL,"Willkommen Admin!");
    }
    playerinfo[playerid][pLogged]=1;
    SpawnPlayer(playerid);
    }
    else
    {
    SendClientMessage(playerid,COLOR_ERROR,"Dein Passwort ist falsch!");
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_ERROR,"Es ist ein Fehler gekommen");
    return 1;
    }



    }
    else
    {
    SendClientMessage(playerid,COLOR_ERROR,"Du hast noch keinen Account. Registriere dich mit /register [passwort]");
    return 1;
    }
    return 1;
    }
    Ich hoffe ihr könnt mir helfen.


    //Edit
    Ich habs jetzt auch schon mit verschiedenen Passwörten ausprobiert man brauch immer nur den 1. Buchstaben.

    2 Mal editiert, zuletzt von crypt ()

  • Habe den Fehler nun nicht gesehen, aber das ist doch auch wunderbar mit einer Tabelle zu realisieren ?(

  • Ja, aber ich wollte es mal mit MySQL versuchen. Meinst du in einer Text Datei
    eine Tabelle? Ich hatte irgendwann das versucht in text Dateien zu speichern. ich hatte Dini dafür benuzt, aber da kamen viele Fehler, wenn ich in einen Befehl viel auslesen musste.