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).
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://bit.ly/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 Code:
#include <a_samp> #include <a_mysql>
Okay, feito as includes, vamos para as definições de Login na database, é de suma importância que você tenha criado a database no wamp.
, a parte que lhe interessa é apenas a do banco de dados - criando-o; os da tables não lhe interessam!!!
pawn Code:
#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!
Existem meios rápidos para a criação do banco de dados sem que você usúario , dê o trabalho de ir no phpmyadmin e criar, irei mostrar logo abaixo.
pawn Code:
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 Code:
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; }
Agora iremos fazer as responses do dialog.
pawn Code:
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; }
Agora vamos fazer nossas funções que foram criadas; Nós iremos usar a variavel pLogado para checar se ele está ou não logado, é de suma importancia essa variavel. Já checamos se ele está logado, agora só temos que dar as informações do banco de dados para a conta dele..Iremos usar INSERT INTO, que é INSIRA EM/PARA para a função de registrar.
pawn Code:
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 Code:
UPDATE table_name SET column1=valor, column2='valor',... WHERE algumacoisa=algumvalor
pawn Code:
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 Code:
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:
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)
1 comentários:
arruma esse display bosta deste forum porra, ta muinto dificil de ler
Postar um comentário