26.11.2011, 22:50
(
Последний раз редактировалось Ricop522; 27.11.2011 в 23:37.
)
Tutorial: Entendendo o uso de MYSQL; Criando o seu sistema bбsico.
Criei esse tutorial a pedido de Pedro Miranda, espero que gostem e que entendam o BБSICO da criaзгo de sistemas em MYSQL, atй porque nгo й um tutorial que irб lhe deixar FODГO, e sim a curiosidade, vocк aprende procurando, fuзando.
Eu particulamente aprendi mysql para provar para mim mesmo e algumas pessoas, que com um pouco de tempo eu posso sim aprender esse banco de dados, umas pessoas falavam que eu nгo sabia e tudo mais, provei para essas pessoas que eu 'aprendi'.
Espero que gostem, com ele vocк irб aprender a criar um UCP ( user control panel ) integrado com o banco de dados do seu servidor (RE: Banco de Dados).
Usarei alguns cуdigos do tуpico do TheKiller pois fio com alguns codigos bases dele que eu aprendi, por isso parte do tutorial vai como crйditos para ele, um grande programador.
MySQL, significado:
Primeiramente MYSQL nгo й uma lнnguagem de programaзгo e sim um banco de dados.
Definiзгo:
O MySQL й um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem SQL (Linguagem de Consulta Estruturada, do inglкs Structured Query Language) como interface. Й atualmente um dos bancos de dados mais populares, com mais de 10 milhхes de instalaзхes pelo mundo.
MySQL: Programas necessбrios para a execuзгo
Para rodar o MYSQL no seu computador, existem alguns programas necessбrios, sгo esses:
Ъltima versгo do XAMP (http://*******/o2qXyZ) - ( um dos melhores programas, recomendo! )
Esse plugin para a execuзгo do seu primeiro gamemode.
Esse plugin para a execuзгo do seu primeiro gamemode.
Apуs ter feito o download dos programas, vamos para a parte do gamemode. Para qualquer gamemode em MYSQL, serб obrigatуrio o uso das includes e do plugin.
pawn Код:
#include <a_samp>
#include <a_mysql>
pawn Код:
#define mysql_host "127.0.0.1" //Serб na verdade o IP da database do host que o samp irб conectar;
#define mysql_user "root" //Usъario da database
#define mysql_password "" //Nгo possui senha caso seja o wamp.
#define mysql_database "sa-mp" //DATABASE QUE VOCК CRIOU ACIMA!
pawn Код:
public OnGameModeInit()
{
mysql_connect(mysql_host, mysql_user, mysql_database, mysql_password); //Usando as definiзхes acima..
mysql_query("CREATE TABLE IF NOT EXISTS pinfo(user VARCHAR(24), password VARCHAR(40), score INT(20), dinheiro INT(20), IP VARCHAR(16) )");
//CAMPOS:
//-- Nome - Use - Tipo -------
//USER - Nome do usuario - String!
//password- Senha do usuario - String!
//score - score(auto explicativo) - int
//dinheiro - dinheiro do jogador - int
//IP - ip do cara - int
return 1;
}
CRIE A TABLE pinfo CASO NAO EXISTA (...); (Uma traduзгo "mais ou menos" apenas para o seu entendimento).
Apуs conectar-se ao banco de dados, vamos verificar napublic OnPlayerConnect, se o jogador possui uma conta no banco de dados pInfo. Vamos criar uma variavel global 'dinheiro' para que dк o dinheiro do banco de dados do jogador; As funзхes usadas abaixo sгo:
mysql_query //usada para inserir alguma aзгo no banco de dados
mysql_fetch_field_row //Retira os '|' do banco de dados
mysql_num_rows //Conta a quantidade de tables
mysql_store_result //Armazena o resultado
mysql_free_result. //Libera o resultado
Para selecionar algo do banco de dados usa-se SELECT; para atualizar usa-se UPDATE;
pawn Код:
new pRegistrado[MAX_PLAYERS];
//Usado para checar se o jogador estб registrado
new pDinheiro[MAX_PLAYERS]; //Usado apra dar o dnheiro do jogador.
public OnPlayerConnect(playerid)
{
pDinheiro[playerid] = 0x0; //Reseta a variavel pDinheiro.
new query[200], pname[24]; //Cria-se nossas variaveis para serem usadas.
GetPlayerName(playerid, pname, 24); //Recebe o nome do jogador
format(query, sizeof(query), "SELECT IP FROM `pinfo` WHERE user = '%s' LIMIT 1", pname); //Formata a QUERY para serem usadas %s, %i, %d, (basico do basico do pawn.)
mysql_query(query); //Essa й a funзгo da query
mysql_store_result(); //Armazena os resultados
new rows = mysql_num_rows(); //Iremos getar quantas rows a query retornou.
if(!rows)
{
//Se a rows for 0, nгo encontrou nada
//Entгo iremos pedir o registro do jogador no banco de dados.
ShowPlayerDialog(playerid, 15000, DIALOG_STYLE_INPUT, "Registrar","Vocк nгo ta registrado, registra aew campeгo!","Registrar","Cancelar");
}
if(rows) //SENГO
{
//Rows = 1 , existe na database
//AUTO LOGIN
new IP[2][16]; //Uma para o IP do banco de dados e uma para o IP do jogador!
mysql_fetch_field_row(IP[0],"IP");
GetPlayerIp(playerid, IP[1], 16);
if(strlen(IP[0]) != 0 && !strcmp(IP[0], IP[1], true)) //Checa se os ips sгo iguais
{
MySQL_Login(playerid);
}
else if(!strlen(IP[0]) || strcmp(IP[0], IP[1], true))
{
ShowPlayerDialog(playerid, 15500, DIALOG_STYLE_INPUT, "Logar","Tu ta registrado manolo loga eww!","Logar","Cancelar");
pRegistrado[playerid] = 1; //Sets the registered variable to 1 (Shows that the player is registered).
}
}
mysql_free_result();
return 1;
}
pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 15000)
{
if(response) // Clicou no botгo de registrar
{
if(!strlen(inputtext) || strlen(inputtext) > 100) {//Senha nula ou maior que 100 caractйres
return SendClientMessage(playerid, 0xFF0000, "You must insert a password between 1-100 characters!"), ShowPlayerDialog(playerid, 15000, DIALOG_STYLE_INPUT, "Registrar","Use uma senha de 1-100 caractйres!","Registrar","Cancelar");
}
else
{
new escpass[100];
mysql_real_escape_string(inputtext, escpass);
MySQL_Register(playerid, escpass);
}
//Registra o player na funзгo MYSQL_Register
}
if(!response)
{
return SendClientMessage(playerid, 0xFF0000, "You must register before logging in!"),
ShowPlayerDialog(playerid, 15000, DIALOG_STYLE_INPUT, "Registrar","Insira uma senha manolo","Registrar","Cancelar");
}
}
if(dialogid == 15500)
{
if(!response)
{
return SendClientMessage(playerid, 0xFF0000, "You must login before you spawn!"),
ShowPlayerDialog(playerid, 15500, DIALOG_STYLE_INPUT, "Login","Vocк em que logar antes de jogar cara!!","Logar","Cancelar");
}
if(response) //Clicou em Login
{
new query[200], pname[24], escapepass[100]; //
GetPlayerName(playerid, pname, 24);
mysql_real_escape_string(inputtext, escapepass); //Contra HACKERS! (RE: MySQL Injections
format(query, sizeof(query), "SELECT `user` FROM pinfo WHERE user = '%s' AND password = SHA1('%s')", pname, escapepass);
mysql_query(query);
mysql_store_result();
new numrows = mysql_num_rows();
if(numrows == 1) MySQL_Login(playerid);
//senha do jogador e da database sгo iguais/\
if(!numrows)
{
//senha errada
SendClientMessage(playerid, 0xFF0000, "Senha errada noob!");
}
mysql_free_result(); //LEMBRE-SE DE DAR SEMPRE FREE RESULT PARA LIBERAR O QUERY;
}
}
return 1;
}
pawn Код:
new pLogado[MAX_PLAYERS];
stock MySQL_Register(playerid, passwordstring[])
{
new query[200], pname[24], IP[16];
GetPlayerName(playerid, pname, 24);
GetPlayerIp(playerid, IP, 16);
format(query, sizeof(query), "INSERT INTO pinfo (user, password, score, dinheiro, IP) VALUES('%s', SHA1('%s'), 0, 0, '%s')", pname, passwordstring, IP);
mysql_query(query);
SendClientMessage(playerid, -1, "Registrado e Logado.");
pLogado[playerid] = 1; //Logado
return 1;
}
stock MySQL_Login(playerid)
{
new query[300], pname[24], savingstring[20];
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query), "SELECT * FROM pinfo WHERE user = '%s'", pname);
//Selecionamos apenas a variavel que й importante.
mysql_query(query);
mysql_store_result();//ARMAZENA O QUERY PARA USARMOS DEPOIS, POIS USAMOS SELECT PARA SELECIONAR, OU SEJA, TEMOS QUE ARMAZENAR O QUE SELECIONAMOS EM ALGUMA COISA NЙ.
while(mysql_fetch_row_format(query,"|"))
{
//WHILE EM APENAS UMA UNICA QUERY!
//Especialmente quando temos varias variaveis
//Pode-se usar sscanf tmb.
mysql_fetch_field_row(savingstring, "score"); SetPlayerScore(playerid, strval(savingstring));
mysql_fetch_field_row(savingstring, "dinheiro"); GivePlayerMoney(playerid, strval(savingstring));
}
mysql_free_result();
SendClientMessage(playerid, -1, "Logou!");
pLogado[playerid] = 1;
return 1;
}
EX...
pawn Код:
UPDATE table_name SET column1=valor, column2='valor',... WHERE algumacoisa=algumvalor
pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
if(pLogado[playerid] == 1)
{
new score = GetPlayerScore(playerid); //Armazena o score em uma variavel
new grana = GetPlayerMoney(playerid); //armazena o $$ em uma ' '
new query[200], pname[24]; //Cria as variaveis necessarias..
GetPlayerName(playerid, pname, 24);
format(query, sizeof(query), "UPDATE pinfo SET score=%d, dinheiro=%d WHERE user='%s'", score, grana, pname);
mysql_query(query);
//NГO NECESSITA-SE DE UM FREE_RESULT EM UMA QUERY DE UPDATE
}
return 1;
}
Apenas uma coisinha...
pawn Код:
public OnPlayerRequestSpawn(playerid)
{
if(!Logged[playerid]) //Caso nгo esteje logado e tente spawnar....
{
if(!pRegistrado[playerid]) //Caso nгo esteje registrado
{
ShowPlayerDialog(playerid, 15000, DIALOG_STYLE_INPUT, "Registrar","Registra antes de jogar manolo!","Registrar","Cancelar"); //Mostra nosso dialog
return 0; //Retorna a falso, para q elee nao spawne..
}
if(pRegistrado[playerid] == 1) //.....
{
ShowPlayerDialog(playerid, 15500, DIALOG_STYLE_INPUT, "Logar","Loga ante sde jogar man...!","Logar","Cancelar");
return 0; // ' '
}
}
return 1;
}
Bom espero que vocкs tenham entendido, gostado do tutorial, fiz ele com um pouco de carinho(nгo muito), atй porque to um pouco desanimado do sa-mp,, tб muito chato e talz, eu to fazendo meu cursinho tйcnico em programaзгo e o vestibular estгo me ocupando muito tempo da minha vida, mais ainda sim visito e frequento o fуrum, continuo programando e tudo mais, atй porque sou membro da [iPs] e por isso nunca irei deixar eles , bom como vocкs podem ver eu tive um pouco de preguiзa no final ahauhhuahuaa , й porque eu to meio cansado agora ( jб й de noite..... ).
Caso vocкs tenham gostado, me deкm pelo menos um rep+ para que eu me anime a criar a segunda parte do tutorial, que й o de PHP, onde vocкs irгo aprender a criar sites desse tipo:
[ame]http://www.youtube.com/watch?v=KVyhS5Rt6nI[/ame]
Esse servidor nгo foi projetado, foi apenas algum projeto que eu e o strong estavamos criando mais decidimos nгo dar continuidade.
O site eu criei do 0 com tutoriais mesmo, usei tables, layouts eu quem criei com muita paciкncia hauhauha nгo sou um bom designer.
Script iniciante para quem quer comeзar com MYSQL:
Clique aqui
Por fim,
Crйditos:
[iPs] Ricop522
[iPs] Team (all)
E obrigado em especial a TheKilleR.