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: ProPeti - 2015. március 24. - 22:15:41

Cím: DIALOG + SQL
Írta: ProPeti - 2015. március 24. - 22:15:41
Sziasztok!
Olyan kérdésem lenne, hogy egy DIALOG_STLYE_LIST-ben, hogy tudom lekérni sql-ből az emberek nevét?
Igazából azzal lenne probléma, hogyha több nevet talál akkor 1-el több listitem legyen. Gondolkoztam már rajta de nem sikerült rájönnöm, hogy hogy tudom ezt megoldani.
Előre is köszönöm a segítséget!
Cím: DIALOG + SQL
Írta: scripter - 2015. március 25. - 14:54:47

//ez a parancs alá
mysql_tquery(mysql,\"SELECT * FROM Users\",\"User_List\",\"i\",playerid);
//ez meg csak a illeszd be vhova
forward User_List(playerid);
public User_List(playerid)
{
new rows=cache_num_rows();
if(rows==0) return SendClientMessage(playerid,-1,\"{228B22}[users]: {FFA500}Nincsenek regisztrált játékosok.\"); //de ez ugysem fog megtöténni mert már az is regisztrált, akinek megjelenÍtjük :) Az más h azt nem kell listázni, akinek megmutatjuk.
new name[24],string[3500],bool:color=false;
for(new i;i<rows;i++)
{
    color=!color;
cache_get_field_content(i,\"Name\",name);
format(string,sizeof(string),\"%s{%s}%s\\n\",string,(color==false)?(\"FFD700\"):(\"DAA520\"),name);
}
ShowPlayerDialog(playerid,DIALOG_USERS,DIALOG_STYLE_LIST,\"Regisztált játékosok\",string,\"Vissza\",\"Rendben\");
return 1;
}

 
még ki is színeztem :)
de a string méretét is át írhatod, a slot-nak megfelelően.
U.I: hopsz xD csak most vettem ki a klán rendszeremből. :)
átírtam

Dupla hozzászólás automatikusan összefûzve. ( 2015. március 25. - 15:38:01 )

De a \'Users\' tábla nevét írd át a tiédre.
A \'Name\' mező gondolom ugyanaz.
Cím: DIALOG + SQL
Írta: ProPeti - 2015. március 26. - 18:32:24
Köszönöm :3
Nos még ha lehet akkor egy olyan kérdésem lenne, hogyha rámegyek az egyik névre (listitemre), akkor hogy tudom megcsinálni, hogy hozzon be egy újabb dialogot és azt az embert tudjam kezelni?
Cím: DIALOG + SQL
Írta: Kyosuke_Hiroshi - 2015. március 26. - 23:47:44

new string[32];
format(string,sizeof(string),\"SELECT * FROM Users WHERE ID=\'%d\'\",strval(listitem))
mysql_tquery(mysql,string,\"karakter\",\"i\",playerid);

 
Bocsi tabról vagyok
de ez a mysql kód ha kell a karakter publicot is megírom neked.
Cím: DIALOG + SQL
Írta: ProPeti - 2015. március 27. - 15:59:33
Megköszönöm ha megírod :)
Cím: DIALOG + SQL
Írta: Kyosuke_Hiroshi - 2015. március 27. - 16:13:51
Ha haza értem megcsinálom viszont
R37 es mysqlt használok szóval azzal tudom megoldani neked ha úgy megfelel neked.
pl 3 adatot ki íratok vele ha megfelel pl név, szint, admin szint
Cím: DIALOG + SQL
Írta: ProPeti - 2015. március 27. - 16:24:01
Rendben, köszönöm :)
Cím: DIALOG + SQL
Írta: Kyosuke_Hiroshi - 2015. március 27. - 17:33:37
Tessék
 

/*
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `karakterek`;
CREATE TABLE `karakterek` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Nev` varchar(32) NOT NULL,
  `Admin` int(10) NOT NULL,
  `Szint` int(10) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
INSERT INTO `karakterek` VALUES (\'1\', \'Kyosuke_Hiroshi\', \'5555\', \'32\');
INSERT INTO `karakterek` VALUES (\'2\', \'Kyosuke_Hirooshi\', \'5554\', \'31\');
*/
#include <a_samp>
#include <a_mysql>
new sql_ID;
#define SQL_Host \"127.0.0.1\"
#define SQL_User \"root\"
#define SQL_Jelszo \"asdasd\"
#define SQL_Adatbazis \"tester\"
 
#define get_int(%1,%2,%3) (%3 = cache_get_field_content_int(%1,%2))
#define get_string cache_get_field_content
#define DIALOG_1 1
 
main()
{
}
public OnGameModeInit()
{
mysql_log(LOG_ERROR | LOG_WARNING | LOG_DEBUG, LOG_TYPE_TEXT);
sql_ID = mysql_connect(SQL_Host, SQL_User, SQL_Adatbazis, SQL_Jelszo);
SetGameModeText(\"Blank Script\");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnGameModeExit()
{
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}
 
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp(\"/karik\", cmdtext, true, 10) == 0)
{
new query[32];
format(query,sizeof(query),\"SELECT * FROM karakterek\",0);
mysql_tquery(sql_ID,query,\"Karakterek\",\"i\",playerid);
return 1;
}
return 0;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1)
{
if(response)
{
   new query[128];
   format(query,sizeof(query),\"SELECT * FROM karakterek where Nev=\'%s\'\",inputtext);
   mysql_tquery(sql_ID,query,\"KarakterekStat\",\"i\",playerid);
}
}
return 1;
}
forward KarakterekStat(playerid);
public KarakterekStat(playerid)
{
new nums,fields;
cache_get_data(nums,fields);
new a,sz,nev[32],adatok[128];
if(nums)
{
get_int(0,\"Admin\",a);
get_int(0,\"Szint\",sz);
get_string(0,\"Nev\",nev);
format(adatok,sizeof(adatok),\"Admin: %d || Szint: %d || Név: %s\",a,sz,nev);
}
ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,\"Adatok\",adatok,\"OK\",\"\");
return 1;
}
forward Karakterek(playerid);
public Karakterek(playerid)
{
new nums,fields,formazas[512],nev[32];
cache_get_data(nums, fields);
if(nums)
{
new i = -1;
    for(;++i < nums;)
    {
   get_string(i,\"Nev\",nev);
   if(i == 0)
   {
      format(formazas,sizeof(formazas),\"%s\",nev);
   }
   else
   {
      format(formazas,sizeof(formazas),\"%s\\n%s\",formazas,nev);
   }
}
ShowPlayerDialog(playerid,DIALOG_1,DIALOG_STYLE_LIST,\"Karakterek\",formazas,\"OK\",\"Mégse\");
}
else
{
SendClientMessage(playerid,-1,\"Nincs karakter!\");
}
return 1;
}

 
SQL táblával mellékelve amit beimportálsz.
Ez tuti jó leteszteltem.
Cím: DIALOG + SQL
Írta: scripter - 2015. március 27. - 19:54:01
A mysql insert into előtt még a tábla név után () be a mező neveket meg kell adni.
A Név mező varchar(24) elég
A kódot még lehet egyszerüsíteni és \"korszerűsíteni\"
Majd ha kell megcsinálom, csak telorol vok
Cím: DIALOG + SQL
Írta: Kyosuke_Hiroshi - 2015. március 27. - 20:43:26
Idézetet írta: scripter date=1427482441\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"53450\" data-ipsquote-contentclass=\"forums_Topic
A mysql insert into előtt még a tábla név után () be a mező neveket meg kell adni.
A Név mező varchar(24) elég
A kódot még lehet egyszerüsíteni és \"korszerűsíteni\"
Majd ha kell megcsinálom, csak telorol vok
 
1. Okés a Navicat nevezetű remek program így exportált szóval egyenlőre abban jobban hiszek és igen tudom
INSERT INTO `tabla` (Mezo1,Mezo2,Mezo3) VALUES (\'1\', \'2\', \'3\',\'\')

 hogy így is lehet.
2. Okés ...
3. okés ez tuti működik.
Cím: DIALOG + SQL
Írta: ProPeti - 2015. március 28. - 14:24:02
Próbáltam beilleszteni a saját modomba hát nem sikerült.
Aztán azt hittem, hogy elrontottma valamit és a te kódodat úgy ahogy van lefuttattam, átírtam az én adataimra stb (hogy sql-t elérje meg táblanevek), és azt tapasztaltam hogy nem én rontottam el, hanem a kód hibás. Nem tudom, hogy nálad, hogy működött de mikor beírtam a /karik-at kidobott annyi listitemet ahány karakter van az adatbázisban az addig oké, viszont az összes neve az hogy \"NULL\".
Ezek után ugye hiába megyek rá bármire nem adja ki a következő dialogot. :/
____________________________________________________________________
Módosítás:
Na kiderült, hogy mégis én voltam balfasz :D Elfelejtettem átírni a \"Név\" táblát \"név\"-re, mert ugye nem mindegy hogy kicsivel vagy naggyal van-e.
Nagyon szépen köszönöm a segítséget! :)