Registrierungs/Anmelde-System klappt nicht(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
  • Ja, also ich skripte seit heute morgen an einem MySQL Register- und Login-System rum und
    habe seit einer Stunde das Problem, dass bei mir nicht mal der Registrations-Dialog aufgerufen
    wird. Ich würde mich über eine schnelle Hilfe freuen.


    Hier der Code:



    //Der Enum
    enum SpielerI
    {
    id,
    level,
    geld,
    admin
    }
    new sInfo[MAX_PLAYERS][SpielerI];


    //Wie bzw. wodurch die Verbindung hergestellt wird. Die MYSL_HOST, USER, DB und PASS Daten habe ich auch. Das funktioniert soweit bzw. es wird mit MySQL verbunden.
    new handle;


    forward UserCheck(playerid);
    forward OnPasswordResponse(playerid);


    public UserCheck(playerid)
    {
    new num_rows, num_fields;
    cache_get_data(num_rows, num_fields, handle);
    if(num_rows == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"[ACCOUNT]Registrierung","Lege dir einen Account in unsere Datenbank an, um auf dem Server zu spielen.\nDein gewuenschtes Passwort bitte:","Anlegen","Abbrechen");
    }
    else
    {
    //wenn acc. existiert
    ShowPlayerDialog(playerid,DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"[ACCOUNT]Anmelden","Schoen, das du uns wieder besuchst. Gebe bitte das Passwort an, was du bei der Registration angegeben hast.\nVergessen? Melde dies im Forum.","Anlegen","Abbrechen");
    }
    return 1;
    }


    public OnPasswordResponse(playerid)
    {
    new num_fields, num_rows;
    cache_get_data(num_rows, num_fields, handle);
    if(num_fields==1)
    {
    LoadAccount(playerid);
    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"[ACCOUNT]Anmelden","Das eingegbene Passwort war falsch. Versuche es erneut.\nPasswort vergessen? Erstelle ein Antrag im Forum.","Anlegen","Abbrechen");
    }
    return 1;
    }


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


    public OnPlayerDisconnect(playerid, reason)
    {
    SaveAccount(playerid);
    ResetAccount(playerid);
    return 1;
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_LOGIN)
    {
    new name[MAX_PLAYER_NAME], query[128], passw[25];
    GetPlayerName(playerid, name, sizeof(name));
    if(!response)
    {
    Kick(playerid);
    }
    if(strlen(inputtext) > 0)
    {
    mysql_escape_string(inputtext, passw, handle, sizeof(passw));
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND pass='%s'",name, passw);
    mysql_tquery(handle, query, "OnPasswordResponse", "i", playerid);
    }
    return 1;
    }
    if(dialogid == DIALOG_REGISTER)
    {
    new query[128], passw[25], name[MAX_PLAYER_NAME], regfail[128];
    GetPlayerName(playerid, name, sizeof(name));
    if(!response)
    {
    Kick(playerid);
    }
    if(strlen(inputtext) <= 6)
    {
    format(regfail,sizeof(regfail),"Das Passwort muss min. 6 Zeichen enthalten. Passwort-Tipp: Nutze < Aa-Zz, 0-9, !-? > Zeichen in deinem Passwort.");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"[ACCOUNT]Registrierung",regfail,"Anlegen","Abbrechen");
    }
    else
    {
    mysql_escape_string(inputtext, passw, handle, sizeof(passw));
    format(query,sizeof(query),"INSERT INTO user (username, pass) VALUES ('%s','%s')",name, passw);
    mysql_tquery(handle, query, "", "");
    }
    return 1;
    }
    return 1;
    }


    //Und die Stocks
    stock LoadAccount(playerid)
    {
    //Level
    GetPlayerScore(cache_get_field_content_int(0,"level", handle));
    //Geld
    GetPlayerScore(cache_get_field_content_int(0,"geld", handle));
    //Admin-Level
    sInfo[playerid][admin] = cache_get_field_content_int(0,"admin", handle);
    //ID
    sInfo[playerid][id] = cache_get_field_content_int(0,"id", handle);
    SpawnPlayer(playerid);
    return 1;
    }


    stock SaveAccount(playerid)
    {
    new query[128];
    format(query,sizeof(query),"UPDATE user SET level='%i', geld='%i', admin='%i' WHERE id='%i'",sInfo[playerid][level],sInfo[playerid][geld], sInfo[playerid][admin], sInfo[playerid][id]);
    mysql_tquery(handle,query,"","");
    return 1;
    }


    stock ResetAccount(playerid)
    {
    for(new i; SpielerI:i < SpielerI; i++)
    {
    sInfo[playerid][SpielerI:i] = 0;
    }
    return 1;
    }

    Einmal editiert, zuletzt von Kristik47 ()

  • public OnPlayerConnect(playerid)
    {
    //Register
    new query[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    format(query,sizeof(query),"SELECT id FROM user WHERE username='%s'",name);
    mysql_tquery(handle, query, "OnUserCheck","i", playerid);
    return 1;
    }


    zu


    public OnPlayerConnect(playerid)
    {
    //Register
    new query[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    format(query,sizeof(query),"SELECT * FROM user WHERE username='%s'",name);
    mysql_tquery(handle, query, "OnUserCheck","i", playerid);
    return 1;
    }


    mfg :thumbup:

  • Er muss nicht alles selektieren, nur um abzufragen ob der User existiert.
    Das Callback heißt nicht OnUserCheck, sondern UserCheck, daher:
    public OnPlayerConnect(playerid)
    {
    //Register
    new query[128], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    format(query,sizeof(query),"SELECT id FROM user WHERE username='%s'",name);
    mysql_tquery(handle, query, "UserCheck","i", playerid);
    return 1;
    }


    Oder das Callback umbennen.


  • OMG, und ich suche den Fehler in den MySQL Befehlen bzw. in der Syntax.
    Das heißt wohl weniger MrMonat schauen. Danke dir


    /e Hat geklappt


    Jeffrey und @xMichael