SA-MP Forums Archive
[Ajuda] Problema carregar ID faction recem criada MYSQL - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Problema carregar ID faction recem criada MYSQL (/showthread.php?tid=563334)



Problema carregar ID faction recem criada MYSQL - oliverarrow - 15.02.2015

To com um problema, qnd o cara cria a faction, preciso pegar esse novo ID criado pra colocar como fmembro (a variavel) e outras comparaзхes, mas do jeito que eu to fazendo vem 0, como eu faзo?
Код:
	CMD:fcreate(playerid, params[]) {
		new string[40], query[128];
		if(scorelevel[playerid] < 500) return SendClientMessage(playerid, COLOR_RED, "Vocк precisa ter score/level 500 para criar uma faction");
		if(GetPlayerMoney(playerid) < 5000000) return SendClientMessage(playerid, COLOR_RED, "You do not have 5000000");
		if(fmembro[playerid] > 0) return SendClientMessage(playerid, COLOR_RED, "Vocк jб tem uma faction");
		
		new localfname[32];
		if(sscanf(params,"s", localfname)) return SendClientMessage(playerid, -1, "Use: /fcreate [name]");
		
        format(query, sizeof(query), "INSERT INTO `factions` (`facname`) VALUES ('%s')"
        ,
			localfname );
        mysql_query(ConnectMYSQL,query);
		
		new novafacid, consulta;
		consulta = cache_get_field_content_int(0, "ID");     				novafacid = consulta;

		fmembro[playerid] = novafacid;
		fcargo[playerid] = 5;
		GivePlayerMoney(playerid,-5000000);
		
		new facid = fmembro[playerid];
		FactionInfo[facid][facname] = localfname;
		
		format(string, sizeof(string), "%s (id:%i) criada! (/fhelp)", FactionInfo[facid][facname], novafacid );
		SendClientMessage(playerid, COLOR_GREEN, string);
		
        return 1;	
	}



Re: Problema carregar ID faction recem criada MYSQL - mau.tito - 15.02.2015

Utilize esta funзгo .


Re: Problema carregar ID faction recem criada MYSQL - PT - 15.02.2015

Use mysql_insert_id(); para obter o ID.


Re: Problema carregar ID faction recem criada MYSQL - maikons - 15.02.2015

To com o mesmo problema e nгo sabia, como usa essa func?


Re: Problema carregar ID faction recem criada MYSQL - n0minal - 15.02.2015

Essa funзгo retorna o insert_id (valor inteiro do auto_increment), essa funзгo jб salvou minha vida xD

OBS: Essa funза й R33+ se nгo me engano, usabilidade:

Код:
CMD:insertuser(playerid)
{
new name[24], query[128]; GetPlayerName(playerid, name, 24); mysql_format(handler, query, sizeof(query), "INSERT INTO `users` VALUES('NULL', '%s', 1234)", name); //NULL = coluna do auto_increment (id), serб ignorado pelo mysql quando criado e terб um valor automбtico mysql_tquery(handler, query, "OnInsert", " ", " ");//sem parвmetros na public return 1;
} forward OnInsert(); public OnInsert() {
new PlayerInfo[playerid][id] = mysql_insert_id(); //...
}
Estrutura da tabela `users`:



Re: Problema carregar ID faction recem criada MYSQL - maikons - 15.02.2015

Quote:
Originally Posted by n0minal
Посмотреть сообщение
Essa funзгo retorna o insert_id (valor inteiro do auto_increment), essa funзгo jб salvou minha vida xD

OBS: Essa funза й R33+ se nгo me engano, usabilidade:

Код:
mysql_format(handler, query, sizeof(query), "INSERT INTO `users` VALUES('NULL', ...);
mysql_tquery(handler, query, "OnInsert", "");
//NULL = coluna do auto_increment, serб ignorado pelo mysql

forward OnInsert();
public OnInsert()
{
new PlayerInfo[playerid][id] = mysql_insert_id();
//...
}
Nгo consegui pegar como usar, pode fazer com o codigo dele como exemplo pra eu tentar adaptar pro meu?


Re: Problema carregar ID faction recem criada MYSQL - n0minal - 15.02.2015

Quote:
Originally Posted by maikons
Посмотреть сообщение
Nгo consegui pegar como usar, pode fazer com o codigo dele como exemplo pra eu tentar adaptar pro meu?
Й auto-explicativo cara '-' Jб fiz o exemplo, qual versгo do MySQL vocк usa?

@edit: Corrigi o exemplo, tenta entender lб.


Re: Problema carregar ID faction recem criada MYSQL - maikons - 16.02.2015

Pra mim й embolado, vc consegue fazer pra rodar nesse comando dele, dai eu tento adaptar aqui pro meu pra ver se aprendi?


Re: Problema carregar ID faction recem criada MYSQL - oliverarrow - 17.02.2015

Tbm nгo entendi... entгo no meu caso ficaria assim?
Код:
	CMD:fcreate(playerid, params[]) {
		new string[40], query[128];
		if(scorelevel[playerid] < 500) return SendClientMessage(playerid, COLOR_RED, "Vocк precisa ter score/level 500 para criar uma faction");
		if(GetPlayerMoney(playerid) < 5000000) return SendClientMessage(playerid, COLOR_RED, "You do not have 5000000");
		if(fmembro[playerid] > 0) return SendClientMessage(playerid, COLOR_RED, "Vocк jб tem uma faction");
		
		new localfname[32];
		if(sscanf(params,"s", localfname)) return SendClientMessage(playerid, -1, "Use: /fcreate [name]");
		
        format(query, sizeof(query), "INSERT INTO `factions` (`facname`) VALUES ('%s')"
        ,
			localfname );
        mysql_query(ConnectMYSQL,query);
		
		
		
		
		new novafacid, consulta;
		//consulta = cache_get_field_content_int(0, "ID");     				novafacid = consulta;
		novafacid = mysql_insert_id();
		
		
		
		fmembro[playerid] = novafacid;
		fcargo[playerid] = 5;
		GivePlayerMoney(playerid,-5000000);
		
		new facid = fmembro[playerid];
		FactionInfo[facid][facname] = localfname;
		
		format(string, sizeof(string), "%s (id:%i) criada! (/fhelp)", FactionInfo[facid][facname], novafacid );
		SendClientMessage(playerid, COLOR_GREEN, string);
        return 1;	
	}



Re: Problema carregar ID faction recem criada MYSQL - arakuta - 17.02.2015

Primeiramente, utilize a versгo mais atualizada do MySQL. Vocк terб que readaptar todo seu cуdigo, mas terб um sistema muito mais rбpido, estбvel e mais funcional.

https://github.com/pBlueG/SA-MP-MySQL/releases

Essa versгo do MySQL trabalha com cache, leia este tutorial:

https://sampforum.blast.hk/showthread.php?tid=337810

E agora para resolver seu problema, a soluзгo й simples.
Faзa a consulta de inserзгo, e entгo na callback de resposta do MySQL, pegue o ID ъnico da ъltima linha inserida. Este serб o ID da facзгo:

pawn Код:
CMD:criarfacao(playerid,params[])
{
    // Seu comando de criar facзгo bla bla bla
   
    format(query,sizeof query,"INSERT INTO factions (facname) VALUES ('%s');",localfname);
    mysql_function_query(mysqlhandle,query,true,"r@MySQL_CreateFaction","d",playerid) // importante deixar o cache como TRUE.

    return 1;
}

// Declarar a callback de resposta (topo do GM)
forward r@MySQL_CreateFaction(playerid); // Playerid й quem criou a facзгo.

public r@MySQL_CreateFaction(playerid)
{
    // A partir daqui, o MySQL pode retornar um erro (caso algo tenha dado errado)
    // Ou o ID da facзгo criada, que pode ser acessado pela funзгo mysql_insert_id();
   
    Player[playerid][faccao] = mysql_insert_id();
   
    SendClientMessage(playerid,-1,"Sua facзгo foi criada com sucesso!");
   
    // outras coisas bla bla bla

    return 1;
}