[jTuT] MySQL R41-4 (Installation, XAMPP, Verwendung, Bedienung & Registrations-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
  • Versuche es so:

    C
    new query[128];
    mysql_format(dbhandle, query, sizeof(query), "SELECT COUNT(*) AS play FROM user WHERE allowed = '1' OR allowed = '0'");
    mysql_query(dbhandle, query);
    new zaehler = cache_get_field_content_int(0, "play", dbhandle);

    Das ist allerdings die "langsame" Variante. Besser wäre es über ein Callback zu arbeiten, falls möglich:

    C
    new query[128];
    mysql_format(dbhandle, query, sizeof(query), "SELECT COUNT(*) AS play FROM user WHERE allowed = '1' OR allowed = '0'");
    mysql_pquery(dbhandle, query, "OnPlayCount", "");


    C
    forward OnPlayCount();
    public OnPlayCount()
    {
        new zaehler = cache_get_field_content_int(0, "play", dbhandle);
        printf("play: %d", zaehler);
        return 1;
    }
  • So.. Registration funktioniert komplett. Daten werden in die Datenbank eingetragen etc.
    Beim Login funktioniert folgendes nicht:


    Hierzu mein leicht veränderter Punkt zu OnUserLogin(Nur der Start):


    Was ankommt im Chat:

    Code
    [12:52:26] Connected to {B9C9BF}Testserver von Robert
    [12:52:29] OnUserLogin wurde gemacht.

    Ich hoffe und bitte erneut um deine Hilfe Jeffry.


    //edit: Natürlich darf jeder helfen der mir seiner Meinung nach helfen kann.

    Einmal editiert, zuletzt von Robert ()

  • Wird dir etwas im MySQL Log ausgegeben? Schalte gegebenenfalls den Debug Modus an, und poste mal was da ausgegeben wird, wenn du dich einloggst.

    Ich entschuldige mich für das beanspruchen deiner Zeit. Im Log stand daraufhin:
    [13:07:22] [ERROR] CMySQLQuery::Execute[OnUserLogin] - (error #1054) Unknown column 'password' in 'where clause'


    -- Ich habe statt "password" einfach "passwort" auf Deutsch eingetragen und das nur an der Stelle vergessen zu wechseln. (Also beim Login)

  • Vielen Dank Jeffry, bin gerade nach hause gekommen und habe es sofort getestet. Perfekt, es funktioniert!!


    wie sieht das mit diesem Kommando aus
    cache_get_field_content_int(x, "Spielernummer", dbhandle);


    kann ich dieses Kommando in eine Schleife einbauen und den Wert in "x" mit "x++" erhöhen, damit er jedesmal wieder abgefragt wird?


    oder anders gefragt, ich habe jedem Spieler bei der Registrierung eine art Kundennummer gegeben. Das sollte mir die Suche erleichtern wenn an einem Datenbankeintrag manuel etwas geändert werden muss. User die drei Monate inaktiv sind werden automatisch in der Datenbank gelöscht und somit entstehen freie Nummern. Damit ich in der Datenbank keine Lücken habe, möchte ich diese Speicherplätze für neue Mitspieler nutzen. Nur wie kann ich die freien Plätze ermitteln?


    new nr[8];
    new x = 0;
    mysql_format(dbhandle, nr, sizeof(nr), "SELECT KDNR FROM user WHERE KDNR>=0 ");
    mysql_query(dbhandle, nr);
    for(new a=0; a<zaehler; a++)
    {
    new newkdnr = cache_get_field_content_int(x, "KDNR", dbhandle);
    x++
    if(newkdnr != a)
    {
    Spieler[playerid][p_KDNR] = a;
    break;
    }
    }


    an soetwas hatte ich gedacht, aber der Wert von newkdnr bleibt immer 0. egal was bei "x" eingesetzt wird

    4 Mal editiert, zuletzt von MAV_GER ()

  • Was wird dir im Server Log ausgegeben, wenn du es so schreibst?

  • @Jeffry


    ServerLog:
    [23:35:07] newkdnr: 0 | a: 0
    [23:35:07] newkdnr: 0 | a: 1


    MySQL Log:
    [23:35:07] [DEBUG] mysql_format - connection: 1, len: 256, format: "SELECT COUNT(*) AS spieler FROM user WHERE allowed = '1' OR allowed = '0'"
    [23:35:07] [DEBUG] mysql_query - connection: 1, query: "SELECT COUNT(*) AS spieler FROM user WHERE allowed = '1' OR allo", use_cache: true
    [23:35:07] [DEBUG] CMySQLQuery::Execute - starting query execution
    [23:35:07] [DEBUG] CMySQLQuery::Execute - query was successfully executed within 0.667 milliseconds
    [23:35:07] [DEBUG] CMySQLResult::CMySQLResult() - constructor called
    [23:35:07] [DEBUG] CMySQLHandle::SaveActiveResult - cache saved (id: 1)
    [23:35:07] [DEBUG] cache_get_field_content_int - row: 0, field_name: "spieler", connection: 1
    [23:35:07] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "spieler", data: "188"
    [23:35:07] [DEBUG] mysql_format - connection: 1, len: 8, format: "SELECT KDNR FROM user WHERE KDNR>=0 "
    [23:35:07] [ERROR] mysql_format - destination size is too small
    [23:35:07] [DEBUG] mysql_query - connection: 1, query: "SELECT ", use_cache: true
    [23:35:07] [DEBUG] CMySQLQuery::Execute - starting query execution
    [23:35:07] [ERROR] CMySQLQuery::Execute - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    [23:35:07] [DEBUG] cache_get_field_content_int - row: 0, field_name: "KDNR", connection: 1
    [23:35:07] [WARNING] cache_get_field_content_int - no active cache
    [23:35:07] [DEBUG] cache_get_field_content_int - row: 1, field_name: "KDNR", connection: 1
    [23:35:07] [WARNING] cache_get_field_content_int - no active cache


    sehe ich das richtig, da es bisher 188 Datenbankeinträge sind, muss die Zielvariable auf diese Anzahl erhöht werden?

  • Ach, klar. Da habe ich nicht drauf geachtet, dass du das in nr schreibst, das query. Das geht natürlich nicht.

    C
    new nr[8];
    mysql_format(dbhandle, nr, sizeof(nr), "SELECT KDNR FROM user WHERE KDNR>=0 ");
    mysql_query(dbhandle, nr);


    Zu:


    C
    new nr[8];
    mysql_query(dbhandle, "SELECT KDNR FROM user WHERE KDNR >= 0");

    Dann dürfte es passen.

  • Jeffry.,


    habe versucht deine Variante in mein Script einzubinden, folgende Fehler kamen heraus.


    Mit freundlichen Grüßen,


  • Zeile 62:
    Du hast unter den Includes die "handle" Variable nicht deklariert:

    C
    new handle; //Die Connection-Handle, über die wir später auf die Tabellen der Datenbank zugreifen



    Zeile 68:
    Du hast kein PlayerInfo-Array, das musst du anpassen, so wie das Stats-Array bei dir heißt. Wenn du keines hast, musst du es wie beschrieben anlegen, ebenfalls unter den Includes:


    Ich hoffe, dass der PWN Tag bald wieder aktiviert wird, damit man solche Tutorials auch wieder lesen kann.