Szerző Téma: MYSQL HELP!  (Megtekintve 859 alkalommal)

MYSQL HELP!
« Dátum: 2013. Január 03. - 19:54:35 »
0 Show voters
Helló.Ismét egy kis gondom akadt mysql el.Nem tudom hogy ez bugg, vagy valamit én hibáztam.
Egy race systemet csinálok, pontosabban a verseny készítõ részét.Úgy gondoltam hogy az adatbázisba csinálok egy táblázatot, és abba mentse le a versenyinfókat, a következõ képpen
Ez a dialogom
 

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_CRACE)
    {
        if(response == 1)
        {
            if((strlen(inputtext) < 1))
   {
       SendClientMessage(playerid, VOROS, \"A név minimum 1 karakter hosszú kell hogy legyen!\");
       PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
       ShowPlayerDialog(playerid, DIALOG_CRACE, DIALOG_STYLE_INPUT, \"Race System\", \"\"VOROS_K\"HIBA:A név minimum 1 karakter kell hogy legyen!\\n\"ZOLD_K\"Írj egy nevet a pályanak!\", \"Elfogad\", \"\");
   }
   else
   {
                new racen[100];
      format(racen, sizeof(racen), \"%s\", inputtext);
      format(query, sizeof(query), \"SELECT * FROM  `kserace` WHERE `RaceName` = \'%s\'\", inputtext);
      mysql_function_query(FCH, query, true, \"CheckRaceName\", \"ss\",playerid, racen);
   }
        }
         return 1;
}
       return 0;
}

 
Így néz ki a CheckRaceName:
 

public CheckRaceName(playerid, racen[]) {
new rows, fields;
new rnstr2[256];
cache_get_data(rows, fields);
printf(\"rows:%d\", rows);
if(rows) {
ShowPlayerDialog(playerid, DIALOG_CRACE, DIALOG_STYLE_INPUT, \"Race System\", \"\"VOROS_K\"HIBA:Ilyen nevû versenypályánk már van!\"ZOLD_K\"Írj egy nevet a pályanak!\", \"Elfogad\", \"\");
} else {
new sikerstring[300], starttick, finishtick;
format(rnstr2, sizeof(rnstr2), \"INSERT INTO `kserace` (`RaceNr` ,`RaceName` ,`RaceCreator` ,`raceX` ,`raceY` ,`raceZ`) VALUES ( NULL , \'%s\' , \'%s\', \'%f\', \'%f\', \'%f\');\", racen, PName(playerid), X[playerid][0], Y[playerid][0], Z[playerid][0]);
mysql_function_query(FCH, rnstr2, true, \"SaveChoords\", \"\");
for(new i = 1; i <= CPNumber[playerid]; i++) {
format(rnstr2, sizeof(rnstr2), \"INSERT INTO `kserace` (`RaceNr` ,`RaceName` ,`RaceCreator` ,`raceX` ,`raceY` ,`raceZ`) VALUES ( NULL , \'%s\' , \'\', \'%f\', \'%f\', \'%f\');\", racen, X[playerid], Y[playerid], Z[playerid]);
mysql_function_query(FCH, rnstr2, true, \"SaveChoords\", \"\");
}
finishtick = GetTickCount() - starttick;
DisablePlayerRaceCheckpoint(playerid);
RaceInfos[playerid][isBuilder] = 0;
CPNumber[playerid] = 0;
format(sikerstring, sizeof(sikerstring), \"Sikeresen létrehoztad a {eb1717} %s {17eb17} nevü versenypályát.\\nA versenypálya lementve{eb1717} %d {17eb17}ms alatt!\\nKoordináták \"VOROS_K\"MySQL\"ZOLD_K\"-re lettek mentve!\", racen, finishtick);
ShowPlayerDialog(playerid, DIALOG_FRACE, DIALOG_STYLE_MSGBOX, \"Race System\",sikerstring,\"Kilépés\",\"\");
printf(\"%s egy új pályát készített || A pálya neve:%s\", PName(playerid), racen);
}
return 1;
}

 
A gondom az lenne vele, hogy mikor a \"for\" ciklushoz ér, már nem csinál semmit.(for alatt semmi sem megy).
Mi lehet ennek az oka?
Am a CPNumber[playerid], az az elmentett cp-k száma
« Utoljára szerkesztve: 2013. Január 05. - 14:45:09 írta xSkillZ7x »

MYSQL HELP!
« Válasz #1 Dátum: 2013. Január 04. - 11:25:24 »
+1 Show voters
For ciklusban mysql_function_query =  :wall:
Fûzd össze egyetlen karakterlánccá az egészet és úgy küld el egy karakterláncban mysql-nek.

MYSQL HELP!
« Válasz #2 Dátum: 2013. Január 04. - 15:35:44 »
0 Show voters
OKÉ

Dupla hozzászólás automatikusan összefûzve. ( 2013. Január 04. - 17:34:39 )

Am ezt akárhogy is próbálom nem megy.Meg tudom csinálni hogy menjen, viszont akkor ki kéne belõle szedni azt hogy check olja, hogy foglalt e az adott versenynév.Örülnék ha valaki leírná.
« Utoljára szerkesztve: 2013. Január 04. - 17:34:39 írta xSkillZ7x »

MYSQL HELP!
« Válasz #3 Dátum: 2013. Január 04. - 17:44:31 »
+1 Show voters
Na most én azt írtam hogy a for ciklus alatti dolgokat alkosd meg egyetlen egy karakterláncból és nem azt hogy csak is egyetlen egy mysql_function_query legyen.
A te esetedben mindenképpen kell kettõ, az elsõ lépés ahogy ellenõrzõd létezik-e, és a második amikor kiderül nem létezik a megadott néven adatsor akkor elmenteni az adatokat, tehát ott kell összefûzni egy karakterláncba az adatokat és úgy elküldeni mysql szerverhez.
Bocsánat hogy pont más függvénnyel szemléltetem, de így  lehet több sort létrehozni egyetlen egy utasítással:
 
INSERT INTO `hotel`(`foglalasido`, `naphosz`) VALUES ( NOW(), 33), ( NOW(), 63), ( NOW(), 38), ( NOW(), 34)
« Utoljára szerkesztve: 2013. Január 04. - 17:58:45 írta ɐʞzssǝlosz »

MYSQL HELP!
« Válasz #4 Dátum: 2013. Január 04. - 21:09:21 »
0 Show voters
Ja értem.Ezt meg próbáltam így, de kicsit rosszúl jön ki, mert túl hosszúra kell formatáljam a queryt.Meg mutatom, de ez sem mûködött ahogy kéne, úgyhogy egyenlõre át raktam sima lementésnél és nem checkolja hogy létezik e a név.Meg próbálok addig olyan versenyeket létrehozni, hogy ne írjam ugyanazt a nevet.Így csináltam:
 

rnstr2 = \"INSERT INTO `kserace` (`RaceNr` ,`RaceName` ,`RaceCreator` ,`raceX` ,`raceY` ,`raceZ`) VALUES\";
      for(new i = 0; i < CPNumber[playerid];i++) {
      format(qstr, sizeof(qstr), \"%s ( NULL , \'%s\' , \'%s\', \'%f\', \'%f\', \'%f\'),\",qstr, racen, PName(playerid), X[playerid], Y[playerid], Z[playerid]);
      }
      format(savequery, sizeof(savequery), \"%s %s ( NULL , \'%s\' , \'%s\', \'%f\', \'%f\', \'%f\');\",rnstr2, qstr, racen, PName(playerid), X[playerid][CPNumber[playerid]], Y[playerid][CPNumber[playerid]], Z[playerid][CPNumber[playerid]]);
               
      format(query, sizeof(query), \"SELECT * FROM  `kserace` WHERE `RaceName` = \'%s\'\", inputtext);
      mysql_function_query(FCH, query, true, \"CheckRaceName\", \"ds\",playerid, racen);

 
Azért kell ez a sok format, mert nem fix a cp-k száma.
« Utoljára szerkesztve: 2013. Január 05. - 14:35:12 írta xSkillZ7x »

MYSQL HELP!
« Válasz #5 Dátum: 2013. Január 05. - 01:19:21 »
+1 Show voters
Nem számít milyen hosszú, én 4000-es méretût alkalmaztam ilyen dolgokhoz.
Létrehoztam egy globális változót ilyen célokra és ahol szükséges volt hosszú karakterlánc használatra ezt alkalmaztam:
 
new bigstring[4000];

 
Persze ki is lehet számolni mennyire van szükség és persze csökkentheted az elkészült karakterlánc hosszát, ha kiveszed a szóközöket:
 
\'%s\' , \'%s\', \'%f\', \'%f\', \'%f\')

 
helyett:
 
\'%s\',\'%s\',\'%f\',\'%f\',\'%f\')

 
Már ebben 5 karakternyi hely meglett spórolva az 40 ismétlõdésnél már 200 karakternyi hely. :D
Ha még tovább szeretnéd csökkenteni a %f paraméternél az aposztróf jeleket is elhagyhatod (\') az mindjárt még minusz 6 karakter.

MYSQL HELP!
« Válasz #6 Dátum: 2013. Január 05. - 11:47:07 »
0 Show voters
Oké.Viszont Így sem mûködik rendesen.Am pill.Bemásolom mingyárt mi a gond

Dupla hozzászólás automatikusan összefûzve. ( 2013. Január 05. - 14:18:43 )

Scriptem tetején:
 

new qstr[4000];

 
Itt van a dialog:
Meg formáltam a hosszú query-t és checkolom, hogy van e ilyen nevû verseny
 

if(dialogid == DIALOG_CRACE)
    {
        if(response == 1)
        {
            if((strlen(inputtext) < 1))
   {
       SendClientMessage(playerid, VOROS, \"A név minimum 1 karakter hosszú kell hogy legyen!\");
       PlayerPlaySound(playerid, 1085, 0.0, 0.0, 0.0);
       ShowPlayerDialog(playerid, DIALOG_CRACE, DIALOG_STYLE_INPUT, \"Race System\", \"\"VOROS_K\"HIBA:A név minimum 1 karakter kell hogy legyen!\\n\"ZOLD_K\"Írj egy nevet a pályanak!\", \"Elfogad\", \"\");
   }
   else
   {
      
       new rnstr2[256];
       new racen[100];
      format(racen, sizeof(racen), \"%s\", inputtext);
                rnstr2 = \"INSERT INTO `kserace` (`RaceNr`,`RaceName`,`RaceCreator`,`raceX`,`raceY`,`raceZ`) VALUES\";
      for(new i = 0; i < CPNumber[playerid];i++) {
      format(qstr, sizeof(qstr), \"%s( NULL ,\'%s\' ,\'%s\',\'%f\',\'%f\',\'%f\'),\",qstr, racen, PName(playerid), X[playerid], Y[playerid], Z[playerid]);
      }
      format(qstr, sizeof(qstr), \"%s %s ( NULL ,\'%s\' ,\'%s\',\'%f\',\'%f\',\'%f\');\",rnstr2, qstr, racen, PName(playerid), X[playerid][CPNumber[playerid]], Y[playerid][CPNumber[playerid]], Z[playerid][CPNumber[playerid]]);
               
      format(query, sizeof(query), \"SELECT * FROM  `kserace` WHERE `RaceName` = \'%s\'\", inputtext);
      mysql_function_query(FCH, query, true, \"CheckRaceName\", \"ss\",playerid, racen);
   }
        }
         return 1;
}

 
A CheckRaceName:
Itt küldöm MySQLnek a megformált hosszú query-t, ha a név nem létezik.
 

forward CheckRaceName(playerid, racen[]);
public CheckRaceName(playerid, racen[]) {
new rows, fields;
cache_get_data(rows, fields);
printf(\"rows:%d\", rows);
if(rows) {
ShowPlayerDialog(playerid, DIALOG_CRACE, DIALOG_STYLE_INPUT, \"Race System\", \"\"VOROS_K\"HIBA:Ilyen nevû versenypályánk már van!\"ZOLD_K\"Írj egy nevet a pályanak!\", \"Elfogad\", \"\");
} else {
    printf(\"g:%d\", playerid);
    mysql_function_query(FCH, qstr, true, \"SaveChoords\", \"ss\", playerid,racen);
}
return 1;
}

 
A SaveChoords így néz ki:
 

forward SaveChoords(playerid,racen);
public SaveChoords(playerid,racen) {
    new sikerstring[300];
    DisablePlayerRaceCheckpoint(playerid);
RaceInfos[playerid][isBuilder] = 0;
CPNumber[playerid] = 0;
format(sikerstring, sizeof(sikerstring), \"Sikeresen létrehoztad a {eb1717} %s {17eb17} nevü versenypályát.\\nA versenypálya lementve MYSQL-re!\", racen);
ShowPlayerDialog(playerid, DIALOG_FRACE, DIALOG_STYLE_MSGBOX, \"Race System\",sikerstring,\"Kilépés\",\"\");
printf(\"%s egy új pályát készített || A pálya neve:%s\", PName(playerid), racen);
return 1;
}

 
Viszont ez a sikeresen létrehoztad a %s nevû versenypályát ... meg a többi cucc nem jön be.Nem tudom az okát miért.
Ezen kívûl versenyépítõ maradok és a cp-t sem tûnteti el.

Dupla hozzászólás automatikusan összefûzve. ( 2013. Január 05. - 14:34:54 )

Áh meg van a hiba miért nem ment.playeridhoz véletlenül \"s\"-t írtam és \"d\" kellettv olna :P

Dupla hozzászólás automatikusan összefûzve. ( 2013. Január 05. - 14:44:43 )

Nah de mostmár megy.Am kössz a segítséget. :P
« Utoljára szerkesztve: 2013. Január 05. - 14:44:43 írta xSkillZ7x »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal