[MYSQL] Cars werden 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
  • Hey Leute ich arbeite zurzeit an einem Carsystem welches nicht ganz klappen will...
    Folgendes wenn ich mein car erstelle steht als Besitzer "2" obwohl ich unter accounts mit der ID 220 eingetragen bin.






    Mal wieder alles für MYSQL:
    stock Connect_To_Database()
    {
    mysql_connect(SQL_HOST, SQL_USER, SQL_DATA, SQL_PASS);
    return 1;
    }
    stock mysql_CheckAccount(playerid)
    {
    new Query[128],Name[MAX_PLAYER_NAME],count;
    GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
    mysql_real_escape_string(Name, Name);
    format(Query, sizeof(Query), "SELECT * FROM `accounts` WHERE `Name` = '%s'", Name);
    mysql_query(Query);
    mysql_store_result();
    count = mysql_num_rows();
    mysql_free_result();
    return count;
    }


    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` , `alevel` ) VALUES ('%s', '%s' , '%i')", Name, pass);
    mysql_query(query);
    return true;
    }


    stock mysql_getid(playerid,params[])
    {
    new query[130];
    mysql_real_escape_string
    format(query, 128, "SELECT `id` FROM `accounts` WHERE `Name` = '%s'", Name);


    return 1;
    }


    stock mysql_ReturnPasswort(Name[])
    {
    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;
    }


    stock LoadPlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
    SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pAlevel] = mysql_GetInt("accounts","alevel","Name", SpielerInfo[playerid][pName]);
    }
    return 1;
    }


    stock mysql_GetInt(Table[], Field[], Where[], Is[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    new sqlint = mysql_fetch_int();
    mysql_free_result();
    return sqlint;
    }


    stock mysql_GetString(Table[], Field[], Where[], Is[])
    {
    new query[128], Get[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    mysql_free_result();
    return Get;
    }


    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Float:sqlfloat;
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_float(sqlfloat);
    mysql_free_result();
    return sqlfloat;
    }


    stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    //Nun speichern wir die Daten in der Datenbank.
    mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Geld", SpielerInfo[playerid][pGeld], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Kills", SpielerInfo[playerid][pKills], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Tode", SpielerInfo[playerid][pTode], "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "Health", SpielerInfo[playerid][pHealth], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "alevel", SpielerInfo[playerid][pAlevel], "Name", SpielerInfo[playerid][pName]);

    }
    }
    return 1;
    }


    stock mysql_SetInt(Table[], Field[], To, Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%d' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    mysql_query(query);
    return true;
    }
    stock mysql_SetString(Table[], Field[], To[], Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(To, To);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%s' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    mysql_query(query);
    return true;
    }
    stock mysql_SetFloat(Table[], Field[], Float:To, Where[], Where2[])
    {
    new query[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Where2, Where2);
    format(query, 128, "UPDATE `%s` SET `%s` = '%f' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
    mysql_query(query);
    return true;
    }


    Mein cveh(auto create befehl) + Savecar
    SaveCar(playerid,carid)
    {
    new query[128];
    format(query,sizeof(query),"INSERT INTO autos (besitzer,x,y,z,r,model) VALUES ('%i','%f','%f','%f','%f','%i')",cInfo[playerid][id_x],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);
    mysql_query(query);
    }


    createPlayerCar(playerid,modelid,Float:x,Float:y,Float:z,Float:r)
    {
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]!=0)continue;
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,cInfo[i][besitzer],MAX_PLAYER_NAME);
    cInfo[i][c_x]=x;
    cInfo[i][c_y]=y;
    cInfo[i][c_z]=z;
    cInfo[i][c_r]=r;
    cInfo[i][model]=modelid;
    cInfo[i][id_x]=CreateVehicle(modelid,x,y,z,r,-1,-1,-1);
    new string[128];
    format(string,sizeof(string),"Das Auto cInfo[%i] wurde erstellt!",i);
    SendClientMessage(playerid,HELLBLAU,string);
    SaveCar(playerid,i);
    return 1;
    }


    return 1;
    }


    ocmd:cveh(playerid, params[])
    {
    new mID,pID;
    if(!isAdmin(playerid,3)) return SCM(playerid, HELLROT,"Du bist kein Administrator!");
    if(sscanf(params,"ui",pID,mID)) return SCM(playerid, GRAU, "[Info] /cveh [playerid] [ID]");
    if(mID<400||mID>600)return SCM(playerid, HELLROT, "Falsche CarID!");
    new Float:xc,Float:yc,Float:zc,Float:rc;
    GetPlayerPos(pID,xc,yc,zc);
    GetPlayerFacingAngle(pID,rc);
    if(IsPlayerInAnyVehicle(playerid))
    {
    DestroyVehicle(GetPlayerVehicleID(playerid));
    //CreateVehicle(mID,xc,yc,zc,rc,-1,-1,-1);
    createPlayerCar(pID,mID,xc,yc,zc,rc);



    }
    else
    //CreateVehicle(mID,xc,yc,zc,rc,-1,-1,-1);
    createPlayerCar(pID,mID,xc,yc,zc,rc);

    return 1;
    }



    Ich möchte, dass in der Datenbank als Besitzer auch meine Account ID steht (sprich Besitzer = 220)

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Wenn ich es richtig verstanden habe ist dein Problem ziemlich einfach :>


    Das hier
    createPlayerCar(pID,mID,xc,yc,zc,rc);


    in
    createPlayerCar(pInfo[playerid][pUserID],mID,xc,yc,zc,rc);
    ändern


    Sollte "pUserID" oder pInfo nicht erstellt worden sein hier die Erklärung:
    pInfo -> Standard Player Infos.. Accountname, level pipapo
    Beim laden des Players lädst du die UserID (Aus der DB) einfach aus.
    Damit hat es sich.


    Grüße

    ik bin der vito c:

  • Das wird nichts bringen, da er ihm dann keine Nachricht mehr senden kann über "playerid".


    Der Fehler liegt hier:
    format(query,sizeof(query),"INSERT INTO autos (besitzer,x,y,z,r,model) VALUES ('%i','%f','%f','%f','%f','%i')",cInfo[playerid][id_x],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);
    cInfo[playerid][id_x] nimmst du als Besitzer.
    Hier weist du aber id_x die Vehicle ID zu:
    cInfo[i][id_x]=CreateVehicle(modelid,x,y,z,r,-1,-1,-1);


    Daher die 2.


    Mach es so in der Art:
    format(query,sizeof(query),"INSERT INTO autos (besitzer,x,y,z,r,model) VALUES ('%i','%f','%f','%f','%f','%i')",cInfo[carid][dbid_besitzer],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);


    Und beim Erstellen des Autos fügst du nach "cInfo[ i ][model]=modelid;" das ein:
    cInfo[i][dbid_besitzer] = PlayerInfo[playerid][DatenBankID]; //PlayerInfo und DatenBankID zu deiner Variable umbenennen, in der die Spieler-DB-ID gespeichert ist.



    Vergesse auch nicht "cInfo[carid][dbid_besitzer]" beim Laden des Autos korrekt zu setzen.

  • C:\Users\CodeX\Desktop\PAWN\gamemodes\meinscript.pwn(250) : error 017: undefined symbol "dbid_besitzer"
    C:\Users\CodeX\Desktop\PAWN\gamemodes\meinscript.pwn(247) : warning 203: symbol is never used: "playerid"
    C:\Users\CodeX\Desktop\PAWN\gamemodes\meinscript.pwn(266) : error 017: undefined symbol "dbid_besitzer"
    C:\Users\CodeX\Desktop\PAWN\gamemodes\meinscript.pwn(266) : warning 215: expression has no effect
    C:\Users\CodeX\Desktop\PAWN\gamemodes\meinscript.pwn(266) : error 001: expected token: ";", but found "]"



    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]!=0)continue;
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,cInfo[i][besitzer],MAX_PLAYER_NAME);
    cInfo[i][c_x]=x;
    cInfo[i][c_y]=y;
    cInfo[i][c_z]=z;
    cInfo[i][c_r]=r;
    cInfo[i][model]=modelid;
    cInfo[i][dbid_besitzer]=PlayerInfo[playerid][DatenBankID];
    cInfo[i][id_x]=CreateVehicle(modelid,x,y,z,r,-1,-1,-1);
    new string[128];
    format(string,sizeof(string),"Das Auto cInfo[%i] wurde erstellt!",i);
    SendClientMessage(playerid,HELLBLAU,string);
    SaveCar(playerid,i);
    return 1;
    }



    enum CarDaten
    {
    id_x,
    besitzer[MAX_PLAYER_NAME],
    Float:cx,
    Float:cy,
    Float:cz,
    Float:cr,


    }

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Natürlich musst du das auch definieren...


    enum CarDaten
    {
    id_x,
    dbid_besitzer,
    besitzer[MAX_PLAYER_NAME],
    Float:cx,
    Float:cy,
    Float:cz,
    Float:cr,


    }


    Und das hier natürlich mit deiner Variable ersetzen, in der du die Datenbank ID des Spielers speicherst.
    PlayerInfo[playerid][DatenBankID];

  • Jeffry:
    Du musst mich wahrscheinlich für dumm halten aber wo speicher ich denn hier die id :wacko:


    Außerdem:
    \PAWN\gamemodes\meinscript.pwn(267) : error 017: undefined symbol "DatenBankID"

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • :|


    Dort muss die Variable hin, in der du die 220 speicherst.


    Dafür musst du doch eine Variable haben....



    EDIT:
    Ansonsten holst sie dir so:
    cInfo[i][dbid_besitzer]=mysql_GetInt("accounts","id","Name", SpielerInfo[playerid][pName]);

  • /E:
    Jetzt hab ich das so:
    SaveCar(playerid,carid)
    {
    new query[128];
    format(query,sizeof(query),"INSERT INTO autos (besitzer,x,y,z,r,model) VALUES ('%i','%f','%f','%f','%f','%i')",cInfo[carid][dbid_besitzer],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);
    mysql_query(query);
    }


    createPlayerCar(playerid,modelid,Float:x,Float:y,Float:z,Float:r)
    {
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]!=0)continue;
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,cInfo[i][besitzer],MAX_PLAYER_NAME);
    cInfo[i][c_x]=x;
    cInfo[i][c_y]=y;
    cInfo[i][c_z]=z;
    cInfo[i][c_r]=r;
    cInfo[i][model]=modelid;
    cInfo[i][dbid_besitzer]=mysql_GetInt("accounts","id","Name", SpielerInfo[playerid][pName]);
    cInfo[i][id_x]=CreateVehicle(modelid,x,y,z,r,-1,-1,-1);
    new string[128];
    format(string,sizeof(string),"Das Auto cInfo[%i] wurde erstellt!",i);
    SendClientMessage(playerid,HELLBLAU,string);
    SaveCar(playerid,i);
    return 1;
    }


    return 1;
    }


    Geht immernoch nicht

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

    2 Mal editiert, zuletzt von Loganpunkt ()

  • Du bist witzig..ich find die selber nicht und ich hab dir oben sogar alles mit mysql gepostet :|


    Das Problem ist das du den Primärschlüssel deiner Userdatenbank (hier die 220) nicht ausließt.
    Am besten wäre es wenn du einfach dein enum für das Array SpielerInfo um eine variabel erweiterst.


    enum pInfo
    {
    pID, <== Hier ergänzen
    pName[MAX_PLAYER_NAME],
    pLevel,
    pGeld,
    pKills,
    ....
    }


    Dann kannst du den Primärschlüssel noch auslesen, beim laden der Spielerdaten.
    SpielerInfo[playerid][pID] = mysql_GetInt("accounts", "id", "Name", SpielerInfo[playerid][pName]);



    Nun kannst du bei deinem Insert-query das ganze so verwenden und hast nun den Primärschlüssel als Fremdschlüssel in diesem Eintrag.


    format(query,sizeof(query),"INSERT INTO autos (besitzer,x,y,z,r,model) VALUES ('%i','%f','%f','%f','%f','%i')",SpielerInfo[playerid][pID],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);



    Das ganze geht natürlich noch kürzer nur musst du dafür wissen was ein Join ist und wie man über mehrere Tabellen hinweg arbeitet.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • IPrototypeI:
    geht nicht :/

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

  • Hey jetzt will ich aber unter onplayerdisconnect vergleichen ob der spielername mit dem besitzer übereinstimmt..wie mach ich das am besten?

    "Imagine if the government went after corruption as hard as it goes after guys who run filesharing sites. Priorities. " - @Snowden
    "More worrying than FBI temporarily running a server that contained child porn, is hacking computers anywhere in the world with one warrant" - @josephfcox

    Einmal editiert, zuletzt von Loganpunkt ()