MySQL Register/Login System

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
  • Guten Abend zusammen,
    Mir wurde empfohlen auf MySQL umzusteigen und dies habe ich auch vor da ich mit Dini Speicher/Lade Probleme habe.


    Ich bekomme nach dem Registrieren keinen Eintrag in die Datenbank, da ich mich nicht gut genug auskenne weiß ich nicht was zu tun ist. Ich hoffe mir kann da jemand helfen.



    public OnPlayerRequestClass(playerid, classid)
    {
    if(AccountExists[playerid] == 0)
    {
    new pip[20],string[128];
    GetPlayerIp(playerid, pip, sizeof(pip));
    format(string, sizeof(string), "{FEFEFE}Bitte wähle ein Passwort um dir einen {009BFF}Account {FEFEFE}zu erstellen!\nDeine IP {009BFF}%s{FEFEFE} wird aus Sicherheitsgründen gespeichert.\n\nMit der Registrierung stimmst du automatisch unseren {009BFF}Regeln{FEFEFE} zu.", pip);
    ShowPlayerDialog(playerid,REGISTER,DIALOG_STYLE_PASSWORD,"Registrieren",string,"Registrieren","Regeln");
    return 1;
    }
    return 1;
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    switch(dialogid)
    {
    case REGISTER:
    {
    new pip[20],string[500];
    if(response)
    {
    if(strlen(inputtext) == 0)
    {
    GetPlayerIp(playerid, pip, sizeof(pip));
    format(string, sizeof(string), "{FEFEFE}Bitte wähle ein Passwort um dir einen {009BFF}Account {FEFEFE}zu erstellen!\nDeine IP {009BFF}%s{FEFEFE} wird aus Sicherheitsgründen gespeichert.\n\nMit der Registrierung stimmst du automatisch unseren {009BFF}Regeln{FEFEFE} zu.", pip);
    ShowPlayerDialog(playerid,REGISTER,DIALOG_STYLE_PASSWORD,"Registrieren",string,"Registrieren","Regeln");
    return 1;
    }
    if(strlen(inputtext) >= 5 && strlen(inputtext) <= 10)
    {
    CreateAccount(playerid, MD5_Hash(inputtext));
    SetPVarInt(playerid,"Eingeloggt",1);
    //SetPVarInt(playerid,"Intro",0);
    SpawnPlayer(playerid);
    return 1;
    }
    else
    {
    ClearChat(playerid);
    SendClientMessage(playerid,ROT,"Dein Passwort ist zu kurz oder zu lang (mind 5 Zeichen oder max. 10 Zeichen!");
    GetPlayerIp(playerid, pip, sizeof(pip));
    format(string, sizeof(string), "{FEFEFE}Bitte wähle ein Passwort um dir einen {009BFF}Account {FEFEFE}zu erstellen!\nDeine IP {009BFF}%s{FEFEFE} wird aus Sicherheitsgründen gespeichert.\n\nMit der Registrierung stimmst du automatisch unseren {009BFF}Regeln{FEFEFE} zu.", pip);
    ShowPlayerDialog(playerid,REGISTER,DIALOG_STYLE_PASSWORD,"Registrieren",string,"Registrieren","Regeln");
    return 1;
    }
    }
    /*else
    {
    ShowPlayerDialog(playerid,DIALOG_REGELN,DIALOG_STYLE_MSGBOX,"Server Regeln","{FFFFFF}Server Regeln: {FFFFFF}\n\n1 - {009BFF}Hacken/Cheaten ist strengstens verboten.{FFFFFF}\n2 - {009BFF}Buguser sind unerwünscht.{FFFFFF}\n3 - {009BFF}Dies ist ein Roleplay Server also spielt auch bitte Roleplay.{FFFFFF}\n4 - {009BFF}Sinnloses Deathmatch ist verboten.{FFFFFF}\n5 - {009BFF}Driveby ist nur als Beifahrer erlaubt.\n\n{FFFFFF}Gamemode by Nemesus-Roleplay.de.","Akzeptieren","Ablehnen");
    }*/
    }
    }
    return 1;
    }


    forward OnAccountCreate(playerid);
    public OnAccountCreate(playerid)
    {
    sSpieler[playerid][ID] = mysql_insert_id();
    AccountExists[playerid] = 1;
    return 1;
    }


    stock CreateAccount(playerid, pass[])
    {
    new query[650],Namee[MAX_PLAYER_NAME],pw[130];
    GetPlayerName(playerid, Namee, MAX_PLAYER_NAME);
    mysql_real_escape_string(Namee,Namee);
    mysql_real_escape_string(pass,pw);
    format(query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('%s', '%s')", Namee, pass);
    mysql_function_query(dbhandle, query, false, "OnAccountCreate", "d", playerid);
    return true;
    }


    Vielen Dank für die Hilfe und einen schönen Abend noch.

  • Beitrag von Fabian_DeSanta ()

    Dieser Beitrag wurde von Eddy aus folgendem Grund gelöscht: Spam ().

  • format(query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('%s', '%s')", Namee, pass);
    printf("%s", query);
    mysql_function_query(dbhandle, query, false, "OnAccountCreate", "d", playerid);
    return true;

  • @Fernandez_


    Das kam jetzt dabei raus


    INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('', '7FC895EB300C96BB7A50459E4516477C')


    und die Datenbank hat folgenden Error mir gezeigt:



    Neues phpMyAdmin-Fenster
    Warning in .\libraries\classes\Sql.php#1069
    session_start(): open(C:\xampp\tmp\sess_hspljrebjv1qsdpvp7fokqam8i, O_RDWR) failed: Resource temporarily unavailable (11)


    Backtrace


    .\libraries\classes\Sql.php#1069: session_start()
    .\libraries\classes\Sql.php#1266: PhpMyAdmin\Sql->executeQueryAndMeasureTime(string 'SELECT * FROM `accounts` LIMIT 0, 25 ')
    .\libraries\classes\Sql.php#2216: PhpMyAdmin\Sql->executeTheQuery(
    array,
    string 'SELECT * FROM `accounts` LIMIT 0, 25 ',
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    )
    .\libraries\classes\Sql.php#2129: PhpMyAdmin\Sql->executeQueryAndGetQueryResponse(
    array,
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    string '',
    string './themes/pmahomme/img/',
    NULL,
    NULL,
    NULL,
    string 'SELECT * FROM `accounts`',
    NULL,
    NULL,
    )
    .\sql.php#215: PhpMyAdmin\Sql->executeQueryAndSendQueryResponse(
    array,
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    string '',
    string './themes/pmahomme/img/',
    NULL,
    NULL,
    NULL,
    string 'SELECT * FROM `accounts`',
    NULL,
    NULL,
    )
    Warning in .\libraries\classes\Sql.php#1069
    session_start(): Failed to read session data: files (path: C:\xampp\tmp)


    Backtrace


    .\libraries\classes\Sql.php#1069: session_start()
    .\libraries\classes\Sql.php#1266: PhpMyAdmin\Sql->executeQueryAndMeasureTime(string 'SELECT * FROM `accounts` LIMIT 0, 25 ')
    .\libraries\classes\Sql.php#2216: PhpMyAdmin\Sql->executeTheQuery(
    array,
    string 'SELECT * FROM `accounts` LIMIT 0, 25 ',
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    )
    .\libraries\classes\Sql.php#2129: PhpMyAdmin\Sql->executeQueryAndGetQueryResponse(
    array,
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    string '',
    string './themes/pmahomme/img/',
    NULL,
    NULL,
    NULL,
    string 'SELECT * FROM `accounts`',
    NULL,
    NULL,
    )
    .\sql.php#215: PhpMyAdmin\Sql->executeQueryAndSendQueryResponse(
    array,
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    string '',
    string './themes/pmahomme/img/',
    NULL,
    NULL,
    NULL,
    string 'SELECT * FROM `accounts`',
    NULL,
    NULL,
    )
    Notice in .\libraries\classes\Sql.php#668
    Undefined index: tmpval


    Backtrace


    .\libraries\classes\Sql.php#1159: PhpMyAdmin\Sql->isAppendLimitClause(array)
    .\libraries\classes\Sql.php#1306: PhpMyAdmin\Sql->countQueryResults(
    integer 0,
    boolean true,
    string 'samp',
    string 'accounts',
    array,
    )
    .\libraries\classes\Sql.php#2216: PhpMyAdmin\Sql->executeTheQuery(
    array,
    string 'SELECT * FROM `accounts` LIMIT 0, 25 ',
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    )
    .\libraries\classes\Sql.php#2129: PhpMyAdmin\Sql->executeQueryAndGetQueryResponse(
    array,
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    string '',
    string './themes/pmahomme/img/',
    NULL,
    NULL,
    NULL,
    string 'SELECT * FROM `accounts`',
    NULL,
    NULL,
    )
    .\sql.php#215: PhpMyAdmin\Sql->executeQueryAndSendQueryResponse(
    array,
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    string '',
    string './themes/pmahomme/img/',
    NULL,
    NULL,
    NULL,
    string 'SELECT * FROM `accounts`',
    NULL,
    NULL,
    )
    Notice in .\libraries\classes\Url.php#112
    Undefined index: PMA_token


    Backtrace


    .\libraries\classes\Url.php#73: PhpMyAdmin\Url::getHiddenFields(array)
    .\libraries\classes\Util.php#1133: PhpMyAdmin\Url::getHiddenInputs(
    string 'samp',
    string 'accounts',
    )
    .\libraries\classes\Sql.php#1483: PhpMyAdmin\Util::getMessage(
    ,
    string 'SELECT * FROM `accounts`',
    string 'success',
    )
    .\libraries\classes\Sql.php#2231: PhpMyAdmin\Sql->getQueryResponseForNoResultsReturned(
    array,
    string 'samp',
    string 'accounts',
    NULL,
    integer 0,
    ,
    NULL,
    string './themes/pmahomme/img/',
    ,
    string 'SELECT * FROM `accounts`',
    NULL,
    )
    .\libraries\classes\Sql.php#2129: PhpMyAdmin\Sql->executeQueryAndGetQueryResponse(
    array,
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    string '',
    string './themes/pmahomme/img/',
    NULL,
    NULL,
    NULL,
    string 'SELECT * FROM `accounts`',
    NULL,
    NULL,
    )
    .\sql.php#215: PhpMyAdmin\Sql->executeQueryAndSendQueryResponse(
    array,
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    string '',
    string './themes/pmahomme/img/',
    NULL,
    NULL,
    NULL,
    string 'SELECT * FROM `accounts`',
    NULL,
    NULL,
    )
    Notice in .\libraries\classes\Url.php#112
    Undefined index: PMA_token


    Backtrace


    .\libraries\classes\Url.php#73: PhpMyAdmin\Url::getHiddenFields(array)
    .\libraries\classes\Display\Results.php#1279: PhpMyAdmin\Url::getHiddenInputs(
    string 'samp',
    string 'accounts',
    )
    .\libraries\classes\Display\Results.php#4277: PhpMyAdmin\Display\Results->_getTableHeaders(
    array,
    array,
    string '',
    array,
    array,
    array,
    boolean true,
    )
    .\libraries\classes\Sql.php#1738: PhpMyAdmin\Display\Results->getTable(
    ,
    array,
    array,
    boolean true,
    )
    .\libraries\classes\Sql.php#1522: PhpMyAdmin\Sql->getHtmlForSqlQueryResultsTable(
    ,
    string './themes/pmahomme/img/',
    NULL,
    array,
    boolean false,
    integer 0,
    integer 0,
    boolean true,
    ,
    array,
    boolean true,
    )
    .\libraries\classes\Sql.php#2231: PhpMyAdmin\Sql->getQueryResponseForNoResultsReturned(
    array,
    string 'samp',
    string 'accounts',
    NULL,
    integer 0,
    ,
    NULL,
    string './themes/pmahomme/img/',
    ,
    string 'SELECT * FROM `accounts`',
    NULL,
    )
    .\libraries\classes\Sql.php#2129: PhpMyAdmin\Sql->executeQueryAndGetQueryResponse(
    array,
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    string '',
    string './themes/pmahomme/img/',
    NULL,
    NULL,
    NULL,
    string 'SELECT * FROM `accounts`',
    NULL,
    NULL,
    )
    .\sql.php#215: PhpMyAdmin\Sql->executeQueryAndSendQueryResponse(
    array,
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    string '',
    string './themes/pmahomme/img/',
    NULL,
    NULL,
    NULL,
    string 'SELECT * FROM `accounts`',
    NULL,
    NULL,
    )
    Notice in .\libraries\classes\Url.php#112
    Undefined index: PMA_token


    Backtrace


    .\libraries\classes\Url.php#73: PhpMyAdmin\Url::getHiddenFields(array)
    .\libraries\classes\Sql.php#584: PhpMyAdmin\Url::getHiddenInputs()
    .\libraries\classes\Sql.php#1536: PhpMyAdmin\Sql->getHtmlForBookmark(
    array,
    array,
    string 'SELECT * FROM `accounts`',
    string 'samp',
    string 'accounts',
    string 'SELECT * FROM `accounts`',
    string 'root',
    )
    .\libraries\classes\Sql.php#2231: PhpMyAdmin\Sql->getQueryResponseForNoResultsReturned(
    array,
    string 'samp',
    string 'accounts',
    NULL,
    integer 0,
    ,
    NULL,
    string './themes/pmahomme/img/',
    ,
    string 'SELECT * FROM `accounts`',
    NULL,
    )
    .\libraries\classes\Sql.php#2129: PhpMyAdmin\Sql->executeQueryAndGetQueryResponse(
    array,
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    string '',
    string './themes/pmahomme/img/',
    NULL,
    NULL,
    NULL,
    string 'SELECT * FROM `accounts`',
    NULL,
    NULL,
    )
    .\sql.php#215: PhpMyAdmin\Sql->executeQueryAndSendQueryResponse(
    array,
    boolean true,
    string 'samp',
    string 'accounts',
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    string '',
    string './themes/pmahomme/img/',
    NULL,
    NULL,
    NULL,
    string 'SELECT * FROM `accounts`',
    NULL,
    NULL,
    )

  • INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('', '7FC895EB300C96BB7A50459E4516477C')

    Dann kann der Benutzername bzw Namee nicht Ordnungsgemäß übergeben werden. Ich würde dir empfehlen den Spielernamen in deinem Spielerenum abzuspeichern sobald der Spieler den Server versucht zu betreten. Und diesen dann daraus auslesen zu lassen und an die Datenbank zu übergeben.


    Also wie folgt



    public OnPlayerConnect(playerid)
    {
    GetPlayerName(playerid, DeinPlayerEnum[playerid][pName], MAX_PLAYER_NAME);
    }


    und dann



    format(query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('%s', '%s')", DeinEnum[playerid][pName], pass);
    mysql_function_query(dbhandle, query, false, "OnAccountCreate", "d", playerid);


    Unter deinem Spielerenum solltest du aber auch nicht vergessen pName hinzuzufügen. Dies tust du mit folgendem Befehl


    pName[MAX_PLAYER_NAME]

  • @BreadScript
    Ich habe das so angepasst nur leider bekomme ich immer noch kein Eintrag in die Datenbank. Die Fehler sind die gleichen.


    MySQL Log

    [20:04:32] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'samp'@'localhost' (using password: YES)
    [20:04:32] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'samp'@'localhost' (using password: YES)
    [20:04:57] [ERROR] CMySQLQuery::Execute[OnAccountCreate(d)] - (error #2006) MySQL server has gone away
    [20:04:57] [WARNING] CMySQLQuery::Execute[OnAccountCreate(d)] - lost connection, reconnecting..
    [20:04:57] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'samp'@'localhost' (using password: YES)


    Server Log

    INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('Fabian_DeSanta', '7FC895EB300C96BB7A50459E4516477C')

  • @BreadScript
    Ich habe das so angepasst nur leider bekomme ich immer noch kein Eintrag in die Datenbank. Die Fehler sind die gleichen.


    MySQL Log
    [20:04:32] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'samp'@'localhost' (using password: YES)[20:04:32] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'samp'@'localhost' (using password: YES)[20:04:57] [ERROR] CMySQLQuery::Execute[OnAccountCreate(d)] - (error #2006) MySQL server has gone away[20:04:57] [WARNING] CMySQLQuery::Execute[OnAccountCreate(d)] - lost connection, reconnecting..[20:04:57] [ERROR] CMySQLConnection::Connect - (error #1045) Access denied for user 'samp'@'localhost' (using password: YES)

    Du hast wohlmöglich falsche MySQL Daten angegeben. Daher kann er keinen Eintrag in die Datenbank hinterlegen. Bitte prüfe daher noch einmal alle Datenbank Daten.


    INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('Fabian_DeSanta', '7FC895EB300C96BB7A50459E4516477C')


    Die Werte übermittelt er hier ja schon Richtig. Nur sind deine MySQL Daten scheinbar falsch. Ich würde dir allerdings auch empfehlen, die MD5 Verschlüsselung zu einer sichereren Methode umzuschreiben da MD5 heute keine Sicherheit mehr bietet bzw nur sehr eingeschränkt.

  • Wie wäre es mit Namee zu Name?Lustig wie einige Pseudo-Programmierer hier im Thread den fehler im code nicht erkennen und trotzdem Lösungsvorschläge geben :- DDD HAMMER!

    Anstatt hier große Worte zu spucken kann man auch produktives Material zur Verfügung stellen. Es gibt einige Möglichkeiten die man verwenden kann. Er hätte die Funktion auch überhaupt nicht gebraucht wenn er sich folgenden Stock erstellt hätte



    stock GetPlayerName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    return name;
    }


    und dann einfach nur


    GetPlayerName(playerid)


    dazu einfügen. Es liegt mir doch nicht in der Pflicht unbedingt den Code zu behandeln den er bereitstellt. Ich habe Ihn lediglich einen Lösungsvorschlag angeboten.




    Und hier sind eindeutig die Daten falsch. Andernfalls würde er den Zugriff nicht verbieten. :thumbup: .