MySQL erstellt keine neuen Zeilen

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
  • Hallo.
    Ich habe seit vorhin ein Problem, dass bei MySQL in den Tabellen nur 1 Zeile steht. Also wenn ich mich z.B. unter anderem Namen neu registriere, wird keine neue Zeile erstellt.
    Sowas wie ein Maximum von 1 Spieler.



    stock CreateAccount(playerid, pass[])
    {
    new query[256],Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name,Name);
    mysql_real_escape_string(pass,pass);
    format(query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('%s', '%s')", Name, pass);
    mysql_query(query);
    return true;
    }
    Hab den ganzen Stock debuggen lassen. Da passiert auch alles.
    Ich habe ebenfalls mal den mysql_debug aktiviert.
    Dort steht dann folgendes:

    Code
    [08:08:36] CMySQLHandler::Query(INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('MiAkO', 'ZENSIERT')) - An error has occured. (Error ID: 1062, Duplicate entry '0' for key 'PRIMARY')
    
    
    [08:08:36] >> mysql_query( Connection handle: 1 )
    
    
    [08:08:36] CMySQLHandler::Query(INSERT INTO reg_log (Spieler,IP,Passwort,Datum,Zeit) VALUES ('MiAkO', '127.0.0.1', 'ZENSIERT', '2.6.2012', '8:8:36')) - An error has occured. (Error ID: 1062, Duplicate entry '0' for key 'PRIMARY')
    
    
    [08:17:11] >> mysql_real_escape_string( Connection handle: 1 )


    Danke im Vorraus. :)


    //Edit
    Noch eine Info: Gestern Abend ging noch alles. Nur heute morgen nichtmehr, komischerweise. -.-

  • stock LogRegister(playerid, inputtext[])
    {
    new pIP[32];
    GetPlayerIp(playerid, pIP, sizeof(pIP));
    new datum[64];
    new tag, monat, jahr;
    new zeit[64];
    new stunde, minute, sekunde;
    getdate(jahr, monat, tag);
    gettime(stunde, minute, sekunde);
    format(datum,64,"%d.%d.%d", tag, monat, jahr);
    format(zeit, 64, "%d:%d:%d", stunde, minute, sekunde);
    new query[128];
    format(query, sizeof(query), "INSERT INTO reg_log (Spieler,IP,Passwort,Datum,Zeit) VALUES ('%s', '%s', '%s', '%s', '%s')", GetName(playerid), pIP, inputtext, datum, zeit);
    mysql_query(query);
    }


    Bei dem stock habe ich (vorher wars so: spieler,ip,password,datum,zeit) alles groß geschrieben. Mehr nicht.
    Dann habe ich unter OnPlayerConnect die Variablen zurücksetzen lassen:
    public OnPlayerConnect(playerid)
    {
    strdel(Spieler[playerid][pName], 0, 24);
    Spieler[playerid][pLevel] = 0;
    Spieler[playerid][pGeld] = 0;
    Spieler[playerid][pKills] = 0;
    Spieler[playerid][pTode] = 0;
    Spieler[playerid][pConnected] = 0;
    return 1;
    }
    Und unter OnGameModeExit alle Spieler speichern:

    public OnGameModeExit()
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i))
    {
    SavePlayer(i);
    }
    }
    return 1;
    }


    Genauso unter OnPlayerDisconnect:
    public OnPlayerDisconnect(playerid, reason)
    {
    SavePlayer(playerid);
    return 1;
    }


    SavePlayer enthält folgendes:
    stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid)) //wir überprüfen ob der Spieler überhaupt noch Connected ist und ob er nicht ein NPC ist.
    {
    if(Spieler[playerid][pConnected] == 1) //Und hier ob er noch eingeloggt ist.
    {
    mysql_SetInt("accounts", "Level", Spieler[playerid][pLevel], "Name", Spieler[playerid][pName]);
    mysql_SetInt("accounts", "Geld", Spieler[playerid][pGeld], "Name", Spieler[playerid][pName]);
    mysql_SetInt("accounts", "Kills", Spieler[playerid][pKills], "Name", Spieler[playerid][pName]);
    mysql_SetInt("accounts", "Tode", Spieler[playerid][pTode], "Name", Spieler[playerid][pName]);
    }
    }
    return 1;
    }


    Das habe ich aus dem Tutorial von Maddin, soweit ich weiß.


    //Edit
    Noch etwas hinzugefügt.


    //Edit-2
    Habe bei dem stock vom LogRegister die %02d entfernt da mysql die nicht richtig annimmt. ^^


    //Edit-3
    Keine Hilfe? :(


    //Edit-4
    Google spuckt auch nichts aus.

  • Versuchs So... ->


    SQL
    INSERT INTO `table` (`fieldname`,`fieldname`) VALUES ('value','value')


    PS: MySQL ist es nicht egal ob was Groß oder klein geschrieben wird - es kommt auf den Zeichensatz (codierung) an. Wenn die auf Case - In-sensitive steht dann ja. andersherum nicht.


    EDIT:


    Leere die Tabelle mal, TUNCATE TABLE `accounts` - stelle sicher das ein A_I auf den PRIMARY KEY gesetzt ist Auto zähler bla.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Kevin
    Habe die Tabelle neuerstellt. ;) (Waren nur 6 Sachen ca. die abgespeichert werden)


    Auto Increment ist bei der Tabelle "accounts" im Feld "id" an. (so ein Schlüssel und eine 1 dahinter)
    Ich benutze Navicat Lite ;)
    //Edit
    Kann mir niemand helfen? :(
    //Edit-2
    Problem ist immernoch vorhanden.
    //Edit-3
    Also, ich hab jetzt mal folgendes gemacht, undzwar Navicat neuinstalliert. Trotzdem nichts.. -.-

  • Genau.
    Es wird ein Spieler erstellt und dann steht sogar im Log folgendes:

    Code
    [08:18:43] CMySQLHandler::Query(INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('MiAkO', 'ZENSIERT')) - Successfully executed.
    
    
    [08:18:43] >> mysql_query( Connection handle: 1 )
    
    
    [08:18:43] CMySQLHandler::Query(INSERT INTO reg_log (Spieler,IP,Passwort,Datum,Zeit) VALUES ('MiAkO', '127.0.0.1', 'ZENSIERT', '2.6.2012', '8:18:43')) - Successfully executed.


    Dann sobald ich offline gehe und einen anderen Namen nehme und mich registrieren möchte, erscheint folgende Debug-Meldung:


    Code
    [08:31:58] CMySQLHandler::Query(INSERT INTO `accounts` (`Name`, `Passwort`) VALUES ('MiAkO123321313', 'ZENSIERT')) - An error has occured. (Error ID: 1062, Duplicate entry '0' for key 'PRIMARY')
    
    
    [08:31:58] >> mysql_query( Connection handle: 1 )
    
    
    [08:31:58] CMySQLHandler::Query(INSERT INTO reg_log (Spieler,IP,Passwort,Datum,Zeit) VALUES ('MiAkO123321313', '127.0.0.1', 'ZENSIERT', '2.6.2012', '8:31:58')) - An error has occured. (Error ID: 1062, Duplicate entry '0' for key 'PRIMARY')
  • Mach mal dein AUTO_INCREMENT an,
    du kannst keine Pirmärschlüssel nicht 2x den gleichen Wert zuweisen lassen

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski