Tabelle wird nicht richtig gespeichert

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 Tag,


    derzeit wird meine Tabelle nicht richtig gespeichert.
    Die Werte bleiben leer oder direkt bei 0 stehen. Die Tabelle lasse ich direkt über das Script erstellen, sofern diese nicht existiert.
    stock Tabellen_Erstellen() //Tabelle wird erstellt, sofern diese nicht existiert
    {
    mysql_query("CREATE TABLE IF NOT EXISTS `Accounts` (`ID` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(24) NOT NULL,`Passwort` varchar(24) NOT NULL,`Adminlevel` int(2) NOT NULL DEFAULT '0',`Online` int(1) NOT NULL DEFAULT '0',`Datum` varchar(20) NOT NULL,`Geschlecht` int(1) NOT NULL DEFAULT '0',`IP` varchar(20) NOT NULL,PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
    print("Die Tabelle Account wurde erstellt.");
    }


    Spalte Datum bleibt leer, genauso wie die Spalte IP.
    Die Spalte Adminlevel, Spalte Online und Spalte Geschlecht bleiben genauso bei 0 stehen.

    Normalerweise sollte es funktionieren, denn alles im Script sollte richtig sein.


  • Ach Mist, an die MySQL Log habe ich ja gar nicht gedacht.

  • IP speichert, Datum speichert zwar auch aber wird danach sofort wieder überschrieben.
    Siehe MySQL Log.
    [14:48:17] CMySQLHandler::Query(UPDATE Accounts SET `Datum` = '15.08.2014' WHERE Name='AnqeeLoo') - Successfully executed.
    [14:48:17] >> mysql_query( Connection handle: 1 )
    [14:48:18] CMySQLHandler::Query(UPDATE `Accounts` SET `Adminlevel`='0', `Online`='1', `Datum`='', `Geschlecht`='2', `IP`='ZENSIERT' WHERE `Name`='AnqeeLoo') - Successfully executed.


    Datum lasse ich so speichern, via query.
    new query[128];
    new y,m,d,str[20];
    getdate(y,m,d); //Datum wird abgefragt
    format(str,sizeof(str),"%02d.%02d.%i",d,m,y); //Datum wird in string gesetzt
    format(query,sizeof(query),"UPDATE Accounts SET `Datum` = '%s' WHERE Name='%s'",str,SpielerName); //Datum wird an Datenbank übergeben
    mysql_query(query); //Query wird an Datenbank gesendet
    SavePlayer(playerid); //Spieler wird gespeichert

  • stock SavePlayer(playerid) //Spieler speichern lassen
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    print("10");
    new mainQuery[2046];
    format(mainQuery, sizeof(mainQuery), "UPDATE `Accounts` SET `Adminlevel`='%d', `Online`='%d', `Datum`='%s', `Geschlecht`='%d', `IP`='%s' WHERE `Name`='%s'",
    SpielerInfo[playerid][pAdminlevel], SpielerInfo[playerid][pOnline], SpielerInfo[playerid][pDatum],SpielerInfo[playerid][pGeschlecht],SpielerInfo[playerid][pIP],Spieler(playerid));
    print("12");
    mysql_query(mainQuery);
    print("13");
    }
    return 1;
    }

  • Auch wenn das Thema erledigt ist muss ich noch eine Sache posten.
    Sobald ich eingeloggt bin zum zweiten mal ersetzt sich die erste Zahl meiner IP mit einem O.
    Sobald ich mich auslogge ist die IP wieder korrekt, logge ich mich wieder ein ersetzt sich die erste Zahl mit einem O.


    Die IP wird doch richtig übermittelt, oder sehe ich das falsch?


    new IP[20]; //IP definieren
    GetPlayerIp(playerid, IP, sizeof (IP)); //IP wird ermittelt
    SpielerInfo[playerid][pIP] = IP; //IP wird an Spieler Statistiken übermittelt

  • Du könntest es auch direkt so machen:
    GetPlayerIp(playerid, SpielerInfo[playerid][pIP], 20);


    Aber das ist wohl nicht der Grund.
    Ich schätze eher, dass du es irgendwo nicht richtig speicherst. Poste doch mal den MySQL Log von einem solchen falschen Durchgang (einloggen => ausloggen => einloggen), dann müsste man den Fehler sehen, sofern er falsch übergeben wird.

  • Mehr ist leider nicht zu sehen in der Log.

    Code
    [15:32:07] CMySQLHandler::Query(UPDATE `Accounts` SET `Adminlevel`='0', `Online`='1',`Geschlecht`='2', `IP`='O9.195.137.17' WHERE `Name`='AnqeeLoo') - Successfully executed.
    [15:43:59] >> mysql_query( Connection handle: 1 )
    [15:43:59] CMySQLHandler::Query(UPDATE `Accounts` SET `Adminlevel`='0', `Online`='0',`Geschlecht`='2', `IP`='79.195.137.17' WHERE `Name`='AnqeeLoo') - Successfully executed.
  • Also irgendwo vermacht er dir den gespeicherten String, da musst du schauen, wo du überall GetPlayerIP nutzt.


    Oder du umgehst es so:
    if(SpielerInfo[playerid][pIP][0] < '0' || SpielerInfo[playerid][pIP][0] > '9') GetPlayerIp(playerid, SpielerInfo[playerid][pIP], 20);
    vor
    new mainQuery[2046]; in SavePlayer einfügen. Dann dürfte es auch gehen, besser wäre es natürlich den Fehler zu finden, der irgendwo im Code ist.

  • Die IP wird nur beim Login 1x abgefragt und bei der Registrierung.
    Hier habe ich direkt mal die Funktion wo der Spieler geladen wird, vielleicht ist dort ein Fehler. Heute habe ich es nicht so mit der Fehler Suche. :huh:


    stock LoadPlayer(playerid) //Spieler laden lassen
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
    new query[400], data[50];
    format(query, sizeof(query), "SELECT * FROM `Accounts` WHERE `Name`='%s'",Spieler(playerid));
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows())
    {
    if(mysql_retrieve_row())
    {
    mysql_fetch_field_row(data,"Adminlevel");
    SpielerInfo[playerid][pAdminlevel]=strval(data);
    mysql_fetch_field_row(data,"Online");
    SpielerInfo[playerid][pOnline]=strval(data);
    mysql_fetch_field_row(data,"Geschlecht");
    SpielerInfo[playerid][pGeschlecht]=strval(data);
    mysql_fetch_field_row(data,"IP");
    SpielerInfo[playerid][pIP]=strval(data);
    }
    }
    mysql_free_result();
    }
    return 1;
    }

  • Funktioniert, aber war es schon immer normal das die Groß-/ Kleinschreibung nicht beachtet wird bei MySQL?
    stock mysql_ReturnPasswort(Name[]) //Abfragen ob Passwort richtig
    {
    new query[130], Get[130];
    mysql_real_escape_string(Name, Name);
    format(query, 128, "SELECT `Passwort` FROM `Accounts` WHERE `Name` = '%s'", Name);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    mysql_free_result();
    return Get;
    }

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