Szerző Téma: MySQL:Nem ír fel adatot  (Megtekintve 1524 alkalommal)

MySQL:Nem ír fel adatot
« Dátum: 2011. szeptember 11. - 15:18:19 »
0 Show voters
Sziasztok,most szeretném bõvíteni az adminscriptemet,avval hogy elmentem egy játékosnak a szerveren töltött idõjét!
Itt a h, m, s akar lenni amit felül szeretnék írni a táblában,de nem csinál semmit,semmit nem változtat meg(még a többit sem),de ha kiveszem akkor jó(a h,m,s-t)!
Nincs semmi QueryError!
[pawn]
if(GetPVarInt(playerid, \"Logged\"))
{
    new Query[180];
    new year, month, day, hour, minute, second;
   getdate(year, month, day);
   gettime(hour, minute, second);
    GetPlayerName(playerid, Query, MAX_PLAYER_NAME);
    mysql_real_escape_string(Query, Query);
    format(Query, sizeof Query, \"UPDATE `accounts` SET `Admin` = %i, `Money` = %i, `Score` = %i, `Kills` = %i, `Deaths` = %i, `h` = %02d, `m` = %02d, `s` = %02d, `LastOn` = \'%02d.%02d.%02d/%02d.%02d.%02d\' WHERE Name = \'%s\'\",
      GetPVarInt(playerid, \"Admin\"),
      GetPlayerMoney(playerid),
      GetPlayerScore(playerid),
      GetPVarInt(playerid, \"Kills\"),
      GetPVarInt(playerid, \"Deaths\"),
      year,
      month,
      day,
      hour,
      minute,
      second,
      Hour_ini[playerid],
      Minute_ini[playerid],
      Second_ini[playerid],
      Query);
   mysql_query(Query);
}
[/pawn]
Tábla:
[pawn]`h` int(9) NOT NULL default \'0\',
  `m` int(9) NOT NULL default \'0\',
  `s` int(9) NOT NULL default \'0\',
[/pawn]
« Utoljára szerkesztve: 2011. szeptember 11. - 15:25:38 írta kadaradam »

MySQL:Nem ír fel adatot
« Válasz #1 Dátum: 2011. szeptember 11. - 17:11:24 »
+1 Show voters
Sose figyelsz arra hogy mindennek meglegyen a párja ez már kicsit furcsa.
 
Idézetet írta: kadaradam date=1315747099\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"11404\" data-ipsquote-contentclass=\"forums_Topic
Sziasztok,most szeretném bõvíteni az adminscriptemet,avval hogy elmentem egy játékosnak a szerveren töltött idõjét!
Itt a h, m, s akar lenni amit felül szeretnék írni a táblában,de nem csinál semmit,semmit nem változtat meg(még a többit sem),de ha kiveszem akkor jó(a h,m,s-t)!
Nincs semmi QueryError!
[pawn]
if(GetPVarInt(playerid, \"Logged\"))
{
    new Query[180];
    new year, month, day, hour, minute, second;
   getdate(year, month, day);
   gettime(hour, minute, second);
    GetPlayerName(playerid, Query, MAX_PLAYER_NAME);
    mysql_real_escape_string(Query, Query);
    format(Query, sizeof Query, \"UPDATE `accounts` SET `Admin` = %i, `Money` = %i, `Score` = %i, `Kills` = %i, `Deaths` = %i, `h` = %02d, `m` = %02d, `s` = %02d, `LastOn` = \'%02d.%02d.%02d/%02d.%02d.%02d\' WHERE Name = \'%s\'\",
      GetPVarInt(playerid, \"Admin\"), // Admin
      GetPlayerMoney(playerid), // Money
      GetPlayerScore(playerid), //Score
      GetPVarInt(playerid, \"Kills\"), //Kills
      GetPVarInt(playerid, \"Deaths\"), //Deaths
      year, // És ez hol szerepel?
      month, // Meg ez?
      day, // És ez? 3 plusz adat eddig de SET utasítás után nem szerepel.
      hour, // }
      minute, // }
      second, // }
      Hour_ini[playerid], // } Formázott idõ lenne ha jól látom 6 adat egy stringbe ágyazva.
      Minute_ini[playerid], // }
      Second_ini[playerid], // }
      Query); // És ez itt minek van a végén?
   mysql_query(Query);
}
[/pawn]
Tábla:
[pawn]`h` int(9) NOT NULL default \'0\',
  `m` int(9) NOT NULL default \'0\',
  `s` int(9) NOT NULL default \'0\',
[/pawn]
 

MySQL:Nem ír fel adatot
« Válasz #2 Dátum: 2011. szeptember 11. - 17:29:44 »
+1 Show voters
year month, day, hour, minute, second változók azok a LastOn-ban szerepelnek,véletlen felcseréltem,de ez csak figyelmetlenség,mivel itt a fórumon írtam meg!
a query az a név,csak nem hoztam létére új változót,mert így is mûködik!
Valószínûleg:
[pawn]Hour_ini[playerid],
Minute_ini[playerid],
Second_ini[playerid], [/pawn]
változókkal lesz a baj,mert ezek nélkül tökéletes a mentés!
Szóval akkor mi a hiba?

MySQL:Nem ír fel adatot
« Válasz #3 Dátum: 2011. szeptember 11. - 17:35:45 »
+1 Show voters
Én nem tudom másképp leírni több a változó mint a format típus jelölés.
Amennyi %i,%d,%f.%s,%0.2d van annyi változónak kell szerepelnie a format függvényben.

MySQL:Nem ír fel adatot
« Válasz #4 Dátum: 2011. szeptember 11. - 17:53:50 »
0 Show voters
Ezt értem,elõbb írtam ,hogy ami most fent van azt elírtam!
Valami van a változóval vagy nem tudom,mert az x y z pozicciót felírja,mivel leteszteltem,hogy más voltozót fel ír -e!
Az idõ  változót is leteszteltem régebben egy formázott üzenetben ,és az is szuperál,szóval nem tudom miért nem jó!
most így néz ki:
[pawn]if(GetPVarInt(playerid, \"Logged\"))
{
    new Query[180];
    new year, month, day, hour, minute, second;
   getdate(year, month, day);
   gettime(hour, minute, second);
    GetPlayerName(playerid, Query, MAX_PLAYER_NAME);
    mysql_real_escape_string(Query, Query);
    format(Query, sizeof Query, \"UPDATE `accounts` SET `Admin` = %i, `Money` = %i, `Score` = %i, `Kills` = %i, `Deaths` = %i, `LastOn` = \'%02d.%02d.%02d/%02d.%02d.%02d\', `h` = %d, `m` = %d, `s` = %d, WHERE Name = \'%s\'\",
      GetPVarInt(playerid, \"Admin\"),
      GetPlayerMoney(playerid),
      GetPlayerScore(playerid),
      GetPVarInt(playerid, \"Kills\"),
      GetPVarInt(playerid, \"Deaths\"),
      year,
      month,
      day,
      hour,
      minute,
      second,
      Hour_ini[playerid],
      Minute_ini[playerid],
      Second_ini[playerid],
      Query);
   mysql_query(Query);[/pawn]
« Utoljára szerkesztve: 2011. szeptember 11. - 18:23:14 írta kadaradam »

MySQL:Nem ír fel adatot
« Válasz #5 Dátum: 2011. szeptember 11. - 20:48:36 »
0 Show voters
Hát nem tudom csak írok pár tippet: A mysql adatbázis táblájának minden mezõjének a neki megfelelõ típus van megadva? (text varchar int Float stb.?)
Amúgy mysql rendelkezik date dologgal is ami sokkal egyszerûbbé teszi az ilyen idõ kiírás/mentés dolgokat.
http://www.w3schools.com/sql/sql_dates.asp
Meg amúgy azt se értem hogy minek akarsz minden adatot frissíteni ha egy játékos bejelentkezve van.
Én csak azokat az adatokat frissíteném mysql-en amelyik adat éppen megváltozott és nem az összeset azokat minek frissíteni amelyek nem változtak közben.
Pl.: Mikor megváltozik a Score pontja akkor csak azt az egy adatot frissíteném OnPlayerDeath alatt ha az Admin szintje változik meg akkor azt magában a /setlevel parancsban frissíteném az adatbázisban, és így tovább.

MySQL:Nem ír fel adatot
« Válasz #6 Dátum: 2011. szeptember 11. - 20:56:02 »
0 Show voters

Meg amúgy azt se értem hogy minek akarsz minden adatot frissíteni ha egy játékos bejelentkezve van.
Én csak azokat az adatokat frissíteném mysql-en amelyik adat éppen megváltozott és nem az összeset azokat minek frissíteni amelyek nem változtak közben.
Pl.: Mikor megváltozik a Score pontja akkor csak azt az egy adatot frissíteném OnPlayerDeath alatt ha az Admin szintje változik meg akkor azt magában a /setlevel parancsban frissíteném az adatbázisban, és így tovább.
 
[/quote]
Köszi azért,mindjárt elolvasom,amit küldtél!
Félreértesz ez csak az OnPlayerDisconnect callback-hoz kéne!
Amúgy kiszedtem a LuxAdmin-ból is a szerveren töltött idõ mentését régebben,és azt le tudtam menteni,csak folytatni nem!
Na és ebben tudnal segíteni egy kicsit nekem és zárok?!
Én ezt úgy gondoltam hogy kiolvasom,és lementem egy enumba,csak itt elakadt a tudományom!

MySQL:Nem ír fel adatot
« Válasz #7 Dátum: 2011. szeptember 11. - 21:10:48 »
0 Show voters
Amúgy a laston azt jelenti mikor csatlakozott a szerverhez és nem azt amikor kilépett.
Én csak egy sql példát írnék ide pontosabban a saját connectedlog sql szerkezetét ami talán segít egy kicsit, vagy még több fejtörést fog okozni.
 

CREATE TABLE IF NOT EXISTS `connectedlog` (
  `Count` int(5) NOT NULL AUTO_INCREMENT,
  `ConnectedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `Ip` varchar(20) COLLATE utf8_hungarian_ci NOT NULL,
  `PlayerName` varchar(30) COLLATE utf8_hungarian_ci NOT NULL,
  PRIMARY KEY (`Count`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci AUTO_INCREMENT;

 
Itt a ConnectedTime lenne a te Laston kifejezésed, így egybõl mentené az idõt persze lehet változtatni a formátumokon.

MySQL:Nem ír fel adatot
« Válasz #8 Dátum: 2011. szeptember 12. - 14:56:51 »
0 Show voters
Idézetet írta: Zsolesszka date=1315768248\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"11404\" data-ipsquote-contentclass=\"forums_Topic
Amúgy a laston azt jelenti mikor csatlakozott a szerverhez és nem azt amikor kilépett.
Én csak egy sql példát írnék ide pontosabban a saját connectedlog sql szerkezetét ami talán segít egy kicsit, vagy még több fejtörést fog okozni.
 

CREATE TABLE IF NOT EXISTS `connectedlog` (
  `Count` int(5) NOT NULL AUTO_INCREMENT,
  `ConnectedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `Ip` varchar(20) COLLATE utf8_hungarian_ci NOT NULL,
  `PlayerName` varchar(30) COLLATE utf8_hungarian_ci NOT NULL,
  PRIMARY KEY (`Count`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci AUTO_INCREMENT;

 
Itt a ConnectedTime lenne a te Laston kifejezésed, így egybõl mentené az idõt persze lehet változtatni a formátumokon.
 
Köszönöm szépen a javaslatokat,tippeket,meg is fogom tanulmányozni õket miután készen leszek evvel a ,,Szerveren eltöltött idõ\"-vel,csak legyünk túl rajta :D
Meg majd lesz egy kérdésem is amit utoljára írtál,de azt tényleg a végén!
Szóval mint említettem kiszedtem a Luxadmin-ból a Szerveren eltöltött idõ mentését,és mûködik is meg le lehet menteni!
így néz ki:
[pawn]enum PlayerData
{
    hours,
    mins,
    secs,
    TotalTime,
    ConnectTime
    };
    new AccInfo[MAX_PLAYERS][PlayerData];
TotalGameTime(playerid, &h=0, &m=0, &s=0)
{
    AccInfo[playerid][TotalTime] = ( (gettime() - AccInfo[playerid][ConnectTime]) + (AccInfo[playerid][hours]*60*60) + (AccInfo[playerid][mins]*60) + (AccInfo[playerid][secs]) );
    h = floatround(AccInfo[playerid][TotalTime] / 3600, floatround_floor);
    m = floatround(AccInfo[playerid][TotalTime] / 60,   floatround_floor) % 60;
    s = floatround(AccInfo[playerid][TotalTime] % 60,   floatround_floor);
    return AccInfo[playerid][TotalTime];
}
public OnPlayerConnect(playerid)
{
    AccInfo[playerid][ConnectTime] = gettime();
 return 1;
}[/pawn]
Csak azt nem tudom hogy ,ha kilép a játékos(ugye elmenti), és visszajön hogy folytassam!
Eddig tudom:
Kiolvasom az adatokat,és gondolom el kéne menteni egy enumba(hogy ne lehessen felülírni a változót,egy másik player esetében),és itt akadtam el hogy hogyan folytassam a régit,mert most ugye újra elindítja amérést,0-ról!
Köszönöm a sok segítségedet,várom a válaszodat!
E:Már a LuxAdminos sem jó :(
És ezt nem értem,debugba azt írja hogy minden sikeresen megcsinálva:
 
[18:00:04] CMySQLHandler::Query(UPDATE `accounts` SET `Admin` = 10, `Money` = 729900, `Score` = 0, `Kills` = 0, `Deaths` = 1, `LastOn` = \'2011.09.12/18.00.04\', `h` = 00 WHERE Name = \'Preston_Marlowe\') - Successfully executed.
« Utoljára szerkesztve: 2011. szeptember 12. - 18:02:19 írta kadaradam »

MySQL:Nem ír fel adatot
« Válasz #9 Dátum: 2011. szeptember 12. - 21:58:12 »
0 Show voters
Ez ladmin csak a luxadmin felhasználta ezt a dolgot, ez az idõt 3 különbözõ változóban tárolja ezért 3 különbözõ mezõt kell létrehoznod mysql-en az órának a percnek és a másodpercnek.
[pawn]AccInfo[playerid][hours]
AccInfo[playerid][mins]
AccInfo[playerid][secs][/pawn]
És ezt a 3 adatot kell betölteni mikor a játékos bejelentkezik.
Tehát mysql-en kell 3 mezõ ezeknek hour minutes second.
Login résznél ezeket az adatokat viszont be is kell tölteni a játékosnak.
Ha nem kerül betöltésre e 3 adat akkor nullától kezdõdik az idõmérés.

MySQL:Nem ír fel adatot
« Válasz #10 Dátum: 2011. szeptember 13. - 16:51:39 »
0 Show voters
Ige,igen,tudom, én is is csinálom,azért van ott megadva csak 1,mert csak tesztelni akartam,hogy egyáltalán felírja-e a 00-át,de nem írja fel!
Amúgy itt ugy van hogy van rá egy külön callback létrehozva:
[pawn]TotalGameTime[/pawn]
és abból olvasom ki a player adatait,és ez mûködik egy formázott üzenetben,vagyis kiírja benne,de már a adatbázisba nem írja fel
E:Ha akarod TeamViewer-n megnézheted,ha sokat segít
« Utoljára szerkesztve: 2011. szeptember 13. - 16:56:48 írta kadaradam »

MySQL:Nem ír fel adatot
« Válasz #11 Dátum: 2011. szeptember 13. - 16:57:25 »
0 Show voters
A TotalGameTime csak átalakítja a tárolt adatot számodra érthetõ adattá ezért mikor te újra mentesz adatot akkor is használnod kell ezt a kódot.
Mikor a játékos adatainak mentése történik akkor is használnod kell.
[pawn]
new
    h,m,s;
TotalGameTime(playerid, h, m, s);
format(query, sizeof, \"UPDATE bla bla \", h, m, s);
mysql_query(query); [/pawn]

MySQL:Nem ír fel adatot
« Válasz #12 Dátum: 2011. szeptember 13. - 17:03:19 »
0 Show voters
Tudom,tudom hogy kell használni a MySQL plugint  :),csak ezt a változót nem akarja felírni!
Eddig mindent sikeerölt felírni,pl:Regisztráció napja,utoljára online,kedvenc skin,stb..... de csak ez nem megy!
Azon is gondolkoztam hogy nem jó a tábla,de jó mert pozíciót felírta h,m,s mezõkbe,ezt is csak a tesztelés céljából végeztem!
E:
Mint említettem a debug-ban is benne van,hogy sikeresen fel van írva!
« Utoljára szerkesztve: 2011. szeptember 13. - 17:06:58 írta kadaradam »

MySQL:Nem ír fel adatot
« Válasz #13 Dátum: 2011. szeptember 13. - 17:20:58 »
0 Show voters
Milyen debug?
Erre gondoltál?
 
[18:00:04] CMySQLHandler::Query(UPDATE `accounts` SET `Admin` = 10, `Money` = 729900, `Score` = 0, `Kills` = 0, `Deaths` = 1, `LastOn` = \'2011.09.12/18.00.04\', `h` = 00 WHERE Name = \'Preston_Marlowe\') - Successfully executed.[/quote]
Ebben hol szerepel a 3 változó amit sikeresen felírt sehol nem szerepel benne akkor mirõl beszélsz?
Hozz létre 3 mezõt hour minute second szöveggel.
Majd az OnPlayerDisconnectnél lévõ mysql UPDATE részhez írd be õket, hogy elmentse a a TotalGameTime függvény által kreált 3 adatot.

MySQL:Nem ír fel adatot
« Válasz #14 Dátum: 2011. szeptember 13. - 17:26:38 »
0 Show voters
Idézetet írta: Zsolesszka date=1315927258\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"11404\" data-ipsquote-contentclass=\"forums_Topic
Milyen debug?
Erre gondoltál?
 
[18:00:04] CMySQLHandler::Query(UPDATE `accounts` SET `Admin` = 10, `Money` = 729900, `Score` = 0, `Kills` = 0, `Deaths` = 1, `LastOn` = \'2011.09.12/18.00.04\', `h` = 00 WHERE Name = \'Preston_Marlowe\') - Successfully executed.
Ebben hol szerepel a 3 változó amit sikeresen felírt sehol nem szerepel benne akkor mirõl beszélsz?
Hozz létre 3 mezõt hour minute second szöveggel.
Majd az OnPlayerDisconnectnél lévõ mysql UPDATE részhez írd be õket, hogy elmentse a a TotalGameTime függvény által kreált 3 adatot.
 
[/quote]
Nálam a mezõk úgy vannak hogy:
h
m
s
h mint hour
m mint minute
s mint second
mivel nem írja fel ezért végeztem egy tesztet,hogy legalább 1 változót fel ír-e(a h mezõbe),de nem írta fel adatabázisba,csak egy darab 0-volt ott,és 2 kéne hogy legyen
mivel:
 
[18:00:04] CMySQLHandler::Query(UPDATE `accounts` SET `Admin` = 10, `Money` = 729900, `Score` = 0, `Kills` = 0, `Deaths` = 1, `LastOn` = \'2011.09.12/18.00.04\', `h` = 00 WHERE Name = \'Preston_Marlowe\') - Successfully executed.[/quote]

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal