[jTuT] MySQL R41-4 (Installation, XAMPP, Verwendung, Bedienung & Registrations-System)

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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

  • stock SaveUser(playerid)
    {
    //Needs to be updated everytime something is added to pInfo
    new query[256];
    mysql_format(connectionHandle, query, sizeof(query), "UPDATE users SET Name = '%s', Password = '%s', Language = '%d' WHERE ID = '%d'", pInfo[playerid][pName], pInfo[playerid][pPassword], pInfo[playerid][pLanguage], pInfo[playerid][pDB_ID]);
    mysql_pquery(connectionHandle, query);
    return 1;
    }


    Probier mal so

  • Da ich zwei Monate inaktiv war konnte ich leider nicht antworten.

    Ich bin es nochmal durchgegangen und es gibt immernoch fehler.

    Benötigst du noch Hilfe? Wenn ja, sage mir bitte Bescheid.



    Habe nichts am Login/Register verändert, lief alles super, jetzt bekomm ich kein Register Dialog mehr wenn ich mit einem neuem Account connecte.

    Benötigst du noch Hilfe? Wenn ja, sage mir bitte Bescheid.




    Wenn ich den Server verlasse, speichert er mir das Passwort nicht richtig. Wenn ich auf dem Server bin, dann wird alles korrekt gespeichert. Die Passwort-Spalte ist dann einfach leer. Woran liegt das?

    Kannst du bitte mal den Code posten, mit dem du die Spieler-Daten beim Login lädst, sowie den Code, mit dem du den Spieler registrierst?


    @xXBastianXx:
    %e steht für einen escaped-String und kann in mysql_format vom Plugin her verwendet werden, daher spart man sich sowas wie mysql_real_escape_string.

  • Guten Tag/Nachmittag alle zusammen,
    kleine Frage am Rande, da ich eure Hilfe gebrauchen könnte.


    Ich habe vom Prinzip alles identisch mit deinem Code "Jeffry".
    Die einzigen unterschiede sind die Benennung der Tabelle (accounts),
    das enum lautet anders ( new pData[playerid][PlayerData] )
    die Anzahl der Spalten (id, name, password, level, money) und die jeweiligen
    publics heißen bei mir anders. Kleine Veränderungen habe ich z.B. hier unternommen...


    Code: text.pwn
    forward Player_Register(playerid);
    public Player_Register(playerid) {
        pData[playerid][p_ID] = cache_insert_id();
        SetPlayerScore(playerid, 1);
        GivePlayerMoney(playerid, 10000);
        SendClientMessage(playerid, farbe, "text");
        return 1;
    }


    Ich bekomme keine Errors und er verbindet sich laut Console mit meiner Datenbank,
    jedoch funktioniert das Login-/Registersystem nicht wirklich, da ich wenn ich ein Passwort
    von 3 oder mehr Zeichen/Zahlen einfüge, er nicht die Money und Score funktion ausführt.
    Daraufhin bekomme ich in meiner mysql.log Datei folgende Meldung. Das speichern
    functkioniert auch nicht, geschweige das INSERT.


    Zitat von mysql.log

    [ERROR] mysql_pquery - callback parameter count does not match format specific


    Dabei ist der rest identisch und oder angepasst.


    MfG KazutoSensei

  • So, ich habe den Fehler behoben. Dank deines Hinweises habe ich es gesehen :D .
    Super Tutorial, ich bedanke mich ^^. Vor allem die Erklärungen dazu waren sehr hilfreich.


    Falls du wissen möchtest wo mein Fehler lag, er war recht simpel :P. Over here...


    Code
    mysql_pquery(dbhandle, query, "Player_Login", "d", playerid);
    /* Mein Fehler lag darin, dass ich "%d" vorher drinzusetehen hatte, statt "d". */

    Manchmal übersieht man die kleinen Dinge. Danke nochmals und ich freue mich über weitere TuTs von dir :).


    lg

  • Also bei ende von schritt 5 bekomme ich einen Fehler vom server seitig aus


    SA-MP Dedicated Server----------------------v0.3.7-R2, (C)2005-2015 SA-MP Team[18:40:22] filterscripts = "" (string)[18:40:22][18:40:22] Server Plugins[18:40:22] --------------[18:40:22] Loading plugin: mysql[18:40:22] Failed.[18:40:22] Loaded 0 plugins.[18:40:23][18:40:23] Filterscripts[18:40:23] ---------------[18:40:23] Loaded 0 filterscripts.[18:40:23] Script[gamemodes/Test.amx]: Run time error 19: "File or function is not found"[18:40:23] Number of vehicle models: 0


    @Jeffry

    Einmal editiert, zuletzt von basti_NRG ()

  • Also ich habe jetzt mal mehrere Fragen...


    1.
    Wenn ich in der Datenbank für eine Float auch float als typ nehme, gibt es Probleme da die Tabelle "," und nicht "." als Trennung der Float nimmt.
    Im Script verwende ich daher zzt. float, z.B: cache_get_field_content_float in der Datenbank jedoch varchar für diesen Wert.


    2.
    strings werden irgendwie überhaupt nicht gelesen und konvertiert....
    Beispiel:
    im Enum definiert: hOwner[MAX_PLAYER_NAME]
    und geladen in der Schleife:
    cache_get_field_content(h,"Besitzer",hInfo[h][hOwner],handle);
    ist hInfo[h][hOwner] immer noch leer....


    3. nachgeprüfte strings.
    Wenn ich %e in der Speicherung verwende werden immer nur die ersten 3 Zeichen in die Datenbank gespeichert. (Dabei ist die Datenbankgröße richtig eingestellt!

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich versuche nun dein Speichern public in meinn restart Befehl auszuführen.

    Dazu das public zum Timer...

    Code
    public Server_Restart(playerid){    
        return SendRconCommand("gmx");
    }

    und die Speicher Public ^^...

    Code
    public Save_Player_Data(playerid){
        new query[1028];
        if(!pData[playerid][pLoggedIn]) return 1;
        mysql_format(dbhandle, query, sizeof(query), "UPDATE accounts SET level = '%d', money = '%d', adminlevel = '%d', banned = 'd' WHERE id = '%d'", pData[playerid][pLevel], pData[playerid][pMoney], pData[playerid][pAdminLevel], pData[playerid][pIsBanned], pData[playerid][p_ID]);
        mysql_pquery(dbhandle, query);
        return 1;
    }

    Und mein Mysql Log sagt folgendes....

    Code
    [WARNING] CMySQLConnection::Disconnect - no connection available

    Nur hat es normal geklappt und jetzt speichert er nicht einmal wenn ich so disconnect'e.
    Wobei beim normalen disonnect kein Warning kommt.


    lg

  • Wenn ich in der Datenbank für eine Float auch float als typ nehme, gibt es Probleme da die Tabelle "," und nicht "." als Trennung der Float nimmt.

    Das wäre mir neu, dieses Problem hatte ich noch nie.



    strings werden irgendwie überhaupt nicht gelesen und konvertiert....

    Nutze es so:
    cache_get_field_content(h,"Besitzer",hInfo[h][hOwner],handle, MAX_PLAYER_NAME);




    Wenn ich %e in der Speicherung verwende werden immer nur die ersten 3 Zeichen in die Datenbank gespeichert. (Dabei ist die Datenbankgröße richtig eingestellt!

    Ist der String in dem das Query steht groß genug?





    Nur hat es normal geklappt und jetzt speichert er nicht einmal wenn ich so disconnect'e.

    Wann kommt den die Warnung? Wenn du den Befehl eingibst, oder wenn der Server beendet wird?


    Ändere außerdem:
    banned = 'd'
    zu:
    banned = '%d'

  • Klar ist der string groß genug. Hätte aber gern das mit den Floates etc entbuggt

  • Klar ist der string groß genug. Hätte aber gern das mit den Floates etc entbuggt

    Wäre gut, wenn du den Code dazu postest und einen Screenshot aus der Datenbank der die Daten zeigt.



    Deswegen wundert es mich ja genauso, auch weil er die Daten ausliest.

    Setze mal einen Print an die Speicherung und prüfe, ob der Print zur gleichen Zeit im Log steht, wie die Warnung. So kannst du feststellen, ob es wirklich davon kommt.

  • Mein Rcon printet 2 mal wenn das save public ausgeführt wird, aber speichern tut er gar nichts.
    Die Warnung kam beim normal disconnecten gar nicht, ich werde es gleich nochmal mit dem restart versuchen,
    jedoch wundert es mich dass er gar nicht mehr speichert, nicht mal normal mehr.

  • Das ist alles was ich da bekommen habe ^^.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen