GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: doboka98 - 2014. március 29. - 18:46:21

Cím: MySQL fetch int nem mûködik
Írta: doboka98 - 2014. március 29. - 18:46:21
Sziasztok! Már kezdtem örülni, hogy ma nem kell írjak segítségért, de sajnos megint egy problémába ütköztem. Elkezdtem a táskarendszerem mysql-ben és teljesen elakadtam, nem értem miért nem úgy mûködik ahogy kéne.
 
stock TaskaBetolt(playerid)
{
new query[128+1], dialog[1024+1];
new ertek;
for(new i = 1; i < ITEMS; i++)
{
format(query, sizeof(query), \"SELECT %i FROM taska WHERE username = \'%s\'\", i, playername(playerid));
mysql_query(query);
mysql_store_result();
ertek = mysql_fetch_int();
if(ertek == 0) { continue; }
if(strlen(dialog)) {
   format(dialog,sizeof(dialog),\"%s\\n%s\",dialog, taskatartalom);
}
else {
   format(dialog,sizeof(dialog),\"%s\",taskatartalom);
}
mysql_free_result();
}
ShowPlayerDialog(playerid, TASKA, DIALOG_STYLE_LIST, \"Táska\", dialog, \"Választ\", \"Kilép\");
}

 
Konkrétan az a gond, hogy mintha nem venné figyelembe a 10. sort. Nem ugorja át azt, ahol az érték nulla és ehelyett kiírja nekem az összes taskatartalom tömbben szereplõ nevet. Mit lehet tenni?
Cím: MySQL fetch int nem mûködik
Írta: anorennia - 2014. március 30. - 16:10:04
\"SELECT %i FROM taska WHERE username = \'%s\'\"

 
ehelyett nem ezt szeretted volna?
 
\"SELECT ertek FROM taska WHERE username = \'%s\'\"

 
számomra az a %i az elején értelmetlen.. ^^
Cím: MySQL fetch int nem mûködik
Írta: doboka98 - 2014. március 30. - 17:12:38
Nem. Arról van szó, hogy a táblában a soraim (oszlopaim) neve számok 1-47-ig. Tehát 1, 2, 3....47. Ezért ilyen egyszerû, kiválasztja az i elemet a taska táblából, ahol username a player.
Cím: MySQL fetch int nem mûködik
Írta: Zsolesszka - 2014. március 30. - 18:51:47
Nagyon fejre állítottad a dolgokat,
van egy táblád aminek a neve taska abban létrehoztál 1-tõl 47-ig oszlopokat,
alatta milyen formában vagy melyik oszlopban tárolod a felhasználónevet illetve milyen értéket is szeretnél megjeleníteni?
Mivel egy oszlopban és az azt keresztezõ sorban egy adatot lehet tárolni kettõ nem fér el maximum ha karakterláncként tárolod mondjuk vesszõvel elválasztva, \"Árpád,23\".
Valahogy értelmetlen az egész, kezd újra és ne használj for ciklusban mysql_query utasítást mert nagyon sokáig tart míg lefut, egyszóval lassú (akadozó) módod lesz.
Cím: MySQL fetch int nem mûködik
Írta: doboka98 - 2014. március 30. - 18:54:16
A lényeg az, hogy egy táskarendszert szeretnék. Az 1-47-ig az oszlopok a fegyver ID-k. A ciklus lefut és amikor az i=1, akkor az 1-es weapont ID-t kéri ki és ha annak az értéke 0, akkor nem írja be a dialogba, továbbmegy. Ezt lehetne egyszerûbben megoldani?
Szerk. : A username a 0. oszlop, utána jönnek a számok.
Cím: MySQL fetch int nem mûködik
Írta: Zsolesszka - 2014. március 30. - 19:03:29
Ha jól értem, te annyit szeretnél hogy milyen fegyver legyen.
Biztosan lehetséges egyszerûbben megoldani.
Cím: MySQL fetch int nem mûködik
Írta: doboka98 - 2014. március 30. - 19:07:07
Nem feltétlenül, úgy gondoltam, hogy a 47 után (a weapon id-k vége után) adok hozzá további tárgyakat, amiket ugyanígy tárolok (pl. szendvics, kulcs. stb.). Úgy szeretném, hogyha pl. az oszlopok értéke 2, akkor 2 darab legyen az adott tárgyból/fegyverbõl (itt lõszer). Ez kicsit érthetetlen lehet, de nem tudom hogyan oldhatnám meg a táskarendszerem másképp.
Cím: MySQL fetch int nem mûködik
Írta: Zsolesszka - 2014. március 30. - 19:40:53
Értem, akkor is az adat lekérésed nem jó.
Egyetlen sql utasítással kellene lekérned minden adatot amire éppen szükséged van, most az összesre mivel 47 darab fegyver közül kell kiszedned azokat amelyek gyakorlatilag megvannak tehát egy az értékük:
 
 mysql_query(\"SELECT * FROM taska WHERE username = \'%s\'\");

 
Majd a vissza kapott adatok alapján tudod eldönteni melyik fegyvert kell ténylegesen ki íratni dialogba, idõvel persze gondot fog okozni majd az is ha a dialogból kell kiválasztani egyet és azt oda adni a játékosnak, mivel ott már csak azok a dolgok szerepelnek amik megvannak, a helyedben azt hogy van-e fegyver ugyanazzal az értékkel tüntetném fel ami a fegyver valódi ID értéke és mondjuk -1-el ha nincs neki:
1 2 3  4 5 6   7 8
1 2 3 -1 5 6 -1 8
Itt tehát a 4-es és a 7-es nincs a játékosnak meg.
Ezzel a módszerrel könnyebben tudsz nevet adni felsorolásban a dolgoknak és könnyebben vissza lehet azonosítani mikor kiválasztja azt egy játékos.
Egyébként elég nagy fába vágtad a fejszéd így kezdésnek. :D
Cím: MySQL fetch int nem mûködik
Írta: doboka98 - 2014. március 30. - 19:53:22
Igen, de akkor itt hogy fogom tárolni az ammot? :D
Cím: MySQL fetch int nem mûködik
Írta: Zsolesszka - 2014. március 30. - 20:09:37
Akkor a késõbbi azonosításra mást kell kitalálnod, mert igazad van tárolhatod ott a lõszer mennyiségét is.
Cím: MySQL fetch int nem mûködik
Írta: doboka98 - 2014. március 30. - 20:21:54
Nagyon nem tudom hogy tudnám ezt kivitelezni és nem szeretném ezt a részt átugrani.

Dupla hozzászólás automatikusan összefûzve. ( 2014. március 31. - 18:15:25 )

:D Jaj ez a samp. Nem mûködik az ami eddig mûködött. Most a parancsra unknown commandot ír, holott ezelõtt még ugyanígy mûködött :D. Mekkora fos már ez.
Cím: MySQL fetch int nem mûködik
Írta: doboka98 - 2014. március 29. - 18:46:21
Sziasztok! Már kezdtem örülni, hogy ma nem kell írjak segítségért, de sajnos megint egy problémába ütköztem. Elkezdtem a táskarendszerem mysql-ben és teljesen elakadtam, nem értem miért nem úgy mûködik ahogy kéne.
 
stock TaskaBetolt(playerid)
{
new query[128+1], dialog[1024+1];
new ertek;
for(new i = 1; i < ITEMS; i++)
{
format(query, sizeof(query), \"SELECT %i FROM taska WHERE username = \'%s\'\", i, playername(playerid));
mysql_query(query);
mysql_store_result();
ertek = mysql_fetch_int();
if(ertek == 0) { continue; }
if(strlen(dialog)) {
   format(dialog,sizeof(dialog),\"%s\\n%s\",dialog, taskatartalom);
}
else {
   format(dialog,sizeof(dialog),\"%s\",taskatartalom);
}
mysql_free_result();
}
ShowPlayerDialog(playerid, TASKA, DIALOG_STYLE_LIST, \"Táska\", dialog, \"Választ\", \"Kilép\");
}

 
Konkrétan az a gond, hogy mintha nem venné figyelembe a 10. sort. Nem ugorja át azt, ahol az érték nulla és ehelyett kiírja nekem az összes taskatartalom tömbben szereplõ nevet. Mit lehet tenni?
Cím: MySQL fetch int nem mûködik
Írta: anorennia - 2014. március 30. - 16:10:04
\"SELECT %i FROM taska WHERE username = \'%s\'\"

 
ehelyett nem ezt szeretted volna?
 
\"SELECT ertek FROM taska WHERE username = \'%s\'\"

 
számomra az a %i az elején értelmetlen.. ^^
Cím: MySQL fetch int nem mûködik
Írta: doboka98 - 2014. március 30. - 17:12:38
Nem. Arról van szó, hogy a táblában a soraim (oszlopaim) neve számok 1-47-ig. Tehát 1, 2, 3....47. Ezért ilyen egyszerû, kiválasztja az i elemet a taska táblából, ahol username a player.
Cím: MySQL fetch int nem mûködik
Írta: Zsolesszka - 2014. március 30. - 18:51:47
Nagyon fejre állítottad a dolgokat,
van egy táblád aminek a neve taska abban létrehoztál 1-tõl 47-ig oszlopokat,
alatta milyen formában vagy melyik oszlopban tárolod a felhasználónevet illetve milyen értéket is szeretnél megjeleníteni?
Mivel egy oszlopban és az azt keresztezõ sorban egy adatot lehet tárolni kettõ nem fér el maximum ha karakterláncként tárolod mondjuk vesszõvel elválasztva, \"Árpád,23\".
Valahogy értelmetlen az egész, kezd újra és ne használj for ciklusban mysql_query utasítást mert nagyon sokáig tart míg lefut, egyszóval lassú (akadozó) módod lesz.
Cím: MySQL fetch int nem mûködik
Írta: doboka98 - 2014. március 30. - 18:54:16
A lényeg az, hogy egy táskarendszert szeretnék. Az 1-47-ig az oszlopok a fegyver ID-k. A ciklus lefut és amikor az i=1, akkor az 1-es weapont ID-t kéri ki és ha annak az értéke 0, akkor nem írja be a dialogba, továbbmegy. Ezt lehetne egyszerûbben megoldani?
Szerk. : A username a 0. oszlop, utána jönnek a számok.
Cím: MySQL fetch int nem mûködik
Írta: Zsolesszka - 2014. március 30. - 19:03:29
Ha jól értem, te annyit szeretnél hogy milyen fegyver legyen.
Biztosan lehetséges egyszerûbben megoldani.
Cím: MySQL fetch int nem mûködik
Írta: doboka98 - 2014. március 30. - 19:07:07
Nem feltétlenül, úgy gondoltam, hogy a 47 után (a weapon id-k vége után) adok hozzá további tárgyakat, amiket ugyanígy tárolok (pl. szendvics, kulcs. stb.). Úgy szeretném, hogyha pl. az oszlopok értéke 2, akkor 2 darab legyen az adott tárgyból/fegyverbõl (itt lõszer). Ez kicsit érthetetlen lehet, de nem tudom hogyan oldhatnám meg a táskarendszerem másképp.
Cím: MySQL fetch int nem mûködik
Írta: Zsolesszka - 2014. március 30. - 19:40:53
Értem, akkor is az adat lekérésed nem jó.
Egyetlen sql utasítással kellene lekérned minden adatot amire éppen szükséged van, most az összesre mivel 47 darab fegyver közül kell kiszedned azokat amelyek gyakorlatilag megvannak tehát egy az értékük:
 
 mysql_query(\"SELECT * FROM taska WHERE username = \'%s\'\");

 
Majd a vissza kapott adatok alapján tudod eldönteni melyik fegyvert kell ténylegesen ki íratni dialogba, idõvel persze gondot fog okozni majd az is ha a dialogból kell kiválasztani egyet és azt oda adni a játékosnak, mivel ott már csak azok a dolgok szerepelnek amik megvannak, a helyedben azt hogy van-e fegyver ugyanazzal az értékkel tüntetném fel ami a fegyver valódi ID értéke és mondjuk -1-el ha nincs neki:
1 2 3  4 5 6   7 8
1 2 3 -1 5 6 -1 8
Itt tehát a 4-es és a 7-es nincs a játékosnak meg.
Ezzel a módszerrel könnyebben tudsz nevet adni felsorolásban a dolgoknak és könnyebben vissza lehet azonosítani mikor kiválasztja azt egy játékos.
Egyébként elég nagy fába vágtad a fejszéd így kezdésnek. :D
Cím: MySQL fetch int nem mûködik
Írta: doboka98 - 2014. március 30. - 19:53:22
Igen, de akkor itt hogy fogom tárolni az ammot? :D
Cím: MySQL fetch int nem mûködik
Írta: Zsolesszka - 2014. március 30. - 20:09:37
Akkor a késõbbi azonosításra mást kell kitalálnod, mert igazad van tárolhatod ott a lõszer mennyiségét is.
Cím: MySQL fetch int nem mûködik
Írta: doboka98 - 2014. március 30. - 20:21:54
Nagyon nem tudom hogy tudnám ezt kivitelezni és nem szeretném ezt a részt átugrani.

Dupla hozzászólás automatikusan összefûzve. ( 2014. március 31. - 18:15:25 )

:D Jaj ez a samp. Nem mûködik az ami eddig mûködött. Most a parancsra unknown commandot ír, holott ezelõtt még ugyanígy mûködött :D. Mekkora fos már ez.