Problem mit Haussystem

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


    ich habe ein problem und zwar wenn ich ein Haus erstelle wird in der Datenbank nix eingetragen also der Preis der level usw


    ocmd:ch(playerid,params[])
    {
    for(new i = 1; i < MAX_HAUSER; i++)
    {
    if(Hauser[i][pCreated] == 1)continue;
    new query1[500];
    strcat(query1, "INSERT INTO `haus` (id,Created,Owner,Owned,Preis,EnterX,EnterY,EnterZ,ExitX,ExitY,ExitZ,Preis,Level,Int,Mieter,Miete,Rentable,lock");
    new query2[500];
    format(query2,sizeof(query2),"VALUES ('%d','%d','%s','%d','%f','%f','%f','%f','%f','%f','%d','%d','%d','%d','%d','%d','%d')", i,Hauser[i][pCreated],Hauser[i][pOwner],Hauser[i][pOwned],Hauser[i][pEnterX],Hauser[i][pEnterY],Hauser[i][pEnterZ],Hauser[i][pExitX],Hauser[i][pExitY],Hauser[i][pExitZ],Hauser[i][pPrice],Hauser[i][pLevel],Hauser[i][pInt],Hauser[i][pMieter],Hauser[i][pMiete],Hauser[i][pRentable],Hauser[i][plock]);
    new mainquery[1000];
    format(mainquery,sizeof(mainquery),"%s%s",query1,query2);
    mysql_query(mainquery);
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid,X,Y,Z);
    strmid(Hauser[i][pOwner],"Niemand",0,strlen("Niemand"),24);
    Hauser[i][pOwned] = 0;
    Hauser[i][pPrice] = 1;
    Hauser[i][pEnterX] = 0;
    Hauser[i][pEnterY] = 0;
    Hauser[i][pEnterZ] = 0;
    Hauser[i][pExitX] = X;
    Hauser[i][pExitY] = Y;
    Hauser[i][pExitZ] = Z;
    Hauser[i][pLevel] = 1;
    Hauser[i][plock] = 1;
    Hauser[i][pInt] = 0;
    Hauser[i][pMieter] = 0;
    Hauser[i][pMiete] = 0;
    Hauser[i][pRentable] = 0;
    Hauser[i][pCreated] = 1;
    new string[128];
    format(string,sizeof(string),"ID: %d\nDas Haus ist zum Verkaufen\nPreis: %d\nLevel: %d",i,Hauser[i][pPrice],Hauser[i][pLevel]);
    Create3DTextLabel(string, 0x008080FF, X, Y, Z, 40.0, 0, 0);
    SaveHaus(i);
    return 1;
    }
    return 1;
    }


    stock SaveHaus(haus)
    {
    if(Hauser[haus][pCreated] == 1)
    {
    new query1[500];
    format(query1,sizeof(query1),"UPDATE `haus` SET `Created` = '%d',`Besitzer` = '%s',`Owned = '%d',`EnterX` = '%f',`EnterY` = '%f',`EnterZ` = '%f',`ExitX` = '%f',`ExitY` = '%f',`ExitZ` = '%f',",Hauser[haus][pCreated],Hauser[haus][pOwner],Hauser[haus][pOwned],Hauser[haus][pEnterX],Hauser[haus][pEnterY],Hauser[haus][pEnterZ],Hauser[haus][pExitX],Hauser[haus][pExitY],Hauser[haus][pExitZ]);
    new query2[500];
    format(query2,sizeof(query2),"`Preis` = '%d',`Level` = '%d',`Int` = '%d',`Mieter` = '%d',`Miete` = '%d',`Rentable` = '%d',`lock` = '%d', WHERE `id` = '%d'",Hauser[haus][pPrice],Hauser[haus][pLevel],Hauser[haus][pInt],Hauser[haus][pMieter],Hauser[haus][pMiete],Hauser[haus][pRentable],Hauser[haus][plock]);
    new mainquery[1000];
    format(mainquery,sizeof(mainquery),"%s%s",query1,query2);
    mysql_query(mainquery);
    printf("Es wurden %d Häuser gespeichert",haus);
    }
    return 1;
    }

  • [01:11:43] CMySQLHandler::Query(INSERT INTO `haus` (id,Created,Owner,Owned,Preis,EnterX,EnterY,EnterZ,ExitX,ExitY,ExitZ,Preis,Level,Int,Mieter,Miete,Rentable,lock) VALUES ('1','0','','0','0.000000','0.000000','0.000000','0.000000','0.000000','0.000000','0','0','0','0','0','0','0')) - An error has occured. (Error ID: 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 'Int,Mieter,Miete,Rentable,lock) VALUES ('1','0','','0','0.000000','0.000000','0.' at line 1)


    //edit


    Hmm.. ich kriege es nicht -.-

  • Also ich habe 18/17 gezählt.....
    Vielleicht hast du alle angegeben (format(string..., "('%d'....", wert1,wert2.....);) es muss aber nicht sein dass du alle beim Query eingetragen hast
    also du hast zu wenig Parameter mit übergeben ;)
    Kleines Beispiel (hat man mehr Überblick)

    format(query,sizeof query,"INSERT INTO `table` (VALUE1,VALUE2,VALUE3)");
    format(query,sizeof query,"%s VALUES('%d','%d')", query, variable1, variable2, variable3);

  • Du musst bei den VALUES solche Anführungszeichen machen. ;)
    Kannst dich am folgenden Beispiel orientieren:
    format(query, sizeof(query), "INSERT INTO `haus` (`Besitzer`, `Preis`) VALUES ('%s', '%d')", HausBesitzer, HausPreis);
    Das nur mal so als grobes Beispiel. Dort siehst du die schrägen Anführungszeichen. 2 Tasten rechts von der 0 mit Shift 2-mal raufdrücken und du hast 2 von denen. ;)

  • Artus nein muss man nicht...
    Man kann, bzw. wär es besser und ordentlicher wenn man diese `` hat, aber das ist nicht umbedingt notwendig.


    Master147
    strcat(query1, "INSERT INTO `haus` (id,Created,Owner,Owned,EnterX,EnterY,EnterZ,ExitX,ExitY,ExitZ,Preis,Level,Int,Mieter,Miete,Rentable,lock");
    format(query2,sizeof(query2),"VALUES ('%d','%d','%s','%d','%f','%f','%f','%f','%f','%f','%d','%d','%d','%d','%d','%d','%d')", i,Hauser[i][pCreated],Hauser[i][pOwner],Hauser[i][pOwned],Hauser[i][pEnterX],Hauser[i][pEnterY],Hauser[i][pEnterZ],Hauser[i][pExitX],Hauser[i][pExitY],Hauser[i][pExitZ],Hauser[i][pPrice],Hauser[i][pLevel],Hauser[i][pInt],Hauser[i][pMieter],Hauser[i][pMiete],Hauser[i][pRentable],Hauser[i][plock]);
    Du hast 2x "Preis" speichern wollen.... nächstes mal schaust du dein Code nochmal ganz genau nach, denn sowas sind Kleinigkeiten die man beim selber beim genaueren rüberschauen problemlos finden kann..

  • id,Created,Owner,Owned,EnterX,EnterY,EnterZ,ExitX,ExitY,ExitZ,Preis,Level,Int,Mieter,Miete,Rentable,lock
    Das muss erstens in Anführungsstriche (``).
    Bsp: `id`, `Created`, `Owner` etc


    Zweitens hast du nach dem Lock eine Klammer ) vergessen!

  • was bedeutet das ?


    [11:13:51] CMySQLHandler::Query(INSERT INTO `haus` (`id`,`Created`,`Owned`,`EnterX`,`EnterY`,`EnterZ`,`ExitX`,`ExitY`,`ExitZ`,`Preis`,`Level`,`Int`,`Mieter`,`Miete`,`Rentable`,`lock`) VALUES ('1','0','0','0.000000','0.000000','0.000000','0.000000','0.000000','0.000000','0','0','0','0','0','0','0')) - An error has occured. (Error ID: 1062, Duplicate entry '1' for key 'PRIMARY')

  • habe jetzt das problem :/ -.-


    new query1[500];
    strcat(query1, "INSERT INTO `haus` (`id`,`Created`,`Owned`,`EnterX`,`EnterY`,`EnterZ`,`ExitX`,`ExitY`,`ExitZ`,`Preis`,`Level`,`Int`,`Mieter`,`Miete`,`Rentable`,`lock`) ");
    new query2[500];
    format(query2,sizeof(query2),"VALUES ('%d','%d','%d','%f','%f','%f','%f','%f','%f','%d','%d','%d','%d','%d','%d','%d')", i,Hauser[i][pCreated],Hauser[i][pOwned],Hauser[i][pEnterX],Hauser[i][pEnterY],Hauser[i][pEnterZ],Hauser[i][pExitX],Hauser[i][pExitY],Hauser[i][pExitZ],Hauser[i][pPrice],Hauser[i][pLevel],Hauser[i][pInt],Hauser[i][pMieter],Hauser[i][pMiete],Hauser[i][pRentable],Hauser[i][plock]);
    new mainquery[1000];
    format(mainquery,sizeof(mainquery),"%s%s",query1,query2);
    mysql_query(mainquery);


    [13:41:30] CMySQLHandler::Query(INSERT INTO `haus` (`id`,`Created`,`Owned`,`EnterX`,`EnterY`,`EnterZ`,`ExitX`,`ExitY`,`ExitZ`,`Preis`,`Level`,`Int`,`Mieter`,`Miete`,`Rentable`,`lock`) VALUES ('1','0','0','0.000000','0.000000','0.000000','0.000000','0.000000','0.000000','0','0','0','0','0','0','0')) - An error has occured. (Error ID: 1062, Duplicate entry '1' for key 'PRIMARY')

  • Ich würde mal eher sagen das es daran liegt, das du garnicht abfragst ob solch eine Tabelle existiert.
    Wenn du aber in deine Datenbank z.B. 1-2 neue Tabellen erstellest in der du die Haus ID 1 & 2 erstellst sollte es gehen.
    Wenn du das aber automatisch vom Script aus machen möchtest, musst du das erstmal in deinem Stock abfragen!

  • Ich sehe aber nicht das er das er eine unter OnGameModeInit erstellt.
    Ich meinte mit meinem Beitrag nur das das Script auch erkennen muss das eine neue Spalte hinzugefügt wird...
    Das muss man in dem Stock machen, soweit ich weiß...
    Oder wie soll denn bitte das Script in der Tabelle erkennen in welche Spalte es die Werte eintragen soll?

  • Artus nein muss man nicht...
    Man kann, bzw. wär es besser und ordentlicher wenn man diese `` hat, aber das ist nicht umbedingt notwendig.


    Master147
    strcat(query1, "INSERT INTO `haus` (id,Created,Owner,Owned,EnterX,EnterY,EnterZ,ExitX,ExitY,ExitZ,Preis,Level,Int,Mieter,Miete,Rentable,lock");
    format(query2,sizeof(query2),"VALUES ('%d','%d','%s','%d','%f','%f','%f','%f','%f','%f','%d','%d','%d','%d','%d','%d','%d')", i,Hauser[i][pCreated],Hauser[i][pOwner],Hauser[i][pOwned],Hauser[i][pEnterX],Hauser[i][pEnterY],Hauser[i][pEnterZ],Hauser[i][pExitX],Hauser[i][pExitY],Hauser[i][pExitZ],Hauser[i][pPrice],Hauser[i][pLevel],Hauser[i][pInt],Hauser[i][pMieter],Hauser[i][pMiete],Hauser[i][pRentable],Hauser[i][plock]);
    Du hast 2x "Preis" speichern wollen.... nächstes mal schaust du dein Code nochmal ganz genau nach, denn sowas sind Kleinigkeiten die man beim selber beim genaueren rüberschauen problemlos finden kann..


    Nur zur Info. Ich habe es mal ohne in meinem Script probiert und dann hat es nicht funktioniert. Dann habe ich die eingefügt und dann hat alles ohne Probleme funktioniert!
    Also macht es ja wohl doch was aus näch ;)