SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese > Lançamentos/Releases

Reply
 
Thread Tools Display Modes
Old 26/11/2011, 11:50 PM   #1
Ricop522
High-roller
 
Ricop522's Avatar
 
Join Date: Feb 2010
Location: ES
Posts: 2,696
Reputation: 150
Default Criando um sistema em MySQL

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://bit.ly/o2qXyZ) - ( um dos melhores programas, recomendo! )

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;
}
CREATE TABLE IF NO EXISTS pinfo - Para leigos que não sabem inglês:
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;
}
Para salvar as variaveis iremos usar UPDATE, como explicado.

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;
}
Terminamos o nosso código ! agora você está pronto para iniciar um novo ramo do PAWN, o MYSQL!

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)
E obrigado em especial a TheKilleR.
__________________
"Any fool can write code that a
computer can understand. Good
programmers write code that
humans can understand."

Sistemas de Informação, IFES

Last edited by Ricop522; 28/11/2011 at 12:37 AM.
Ricop522 is offline   Reply With Quote
Old 26/11/2011, 11:57 PM   #2
Dolby
High-roller
 
Dolby's Avatar
 
Join Date: Aug 2011
Location: Brazil - GO
Posts: 2,546
Reputation: 475
Default Re: Criando um sistema em MySQL

Parabens Ricop522,isso esta Otimo,eu apenas sabia usar Mysql com PHP,Esta de parabens.
__________________

Dolby is offline   Reply With Quote
Old 27/11/2011, 12:29 AM   #3
Ricop522
High-roller
 
Ricop522's Avatar
 
Join Date: Feb 2010
Location: ES
Posts: 2,696
Reputation: 150
Default Re: Criando um sistema em MySQL

Se eu chegar a 125 reputations eu posto o UCP do vídeo para vocês estudarem... ele possui o sistema de registro tão cobiçado pelos brasileiros, insira sua história e blalblalbllalalblla chatice toda.
__________________
"Any fool can write code that a
computer can understand. Good
programmers write code that
humans can understand."

Sistemas de Informação, IFES
Ricop522 is offline   Reply With Quote
Old 27/11/2011, 04:54 AM   #4
Jason`
High-roller
 
Jason`'s Avatar
 
Join Date: Sep 2011
Posts: 1,464
Reputation: 112
Default Re: Criando um sistema em MySQL

Obrigado Ricop, será muito util para mim e para outros!

+rep
Jason` is offline   Reply With Quote
Old 27/11/2011, 04:57 AM   #5
ViniBorn
Godfather
 
ViniBorn's Avatar
 
Join Date: Aug 2010
Location: Brasília
Posts: 5,028
Reputation: 648
Default Re: Criando um sistema em MySQL

Muito bem explicado.
Bom trabalho.
__________________
ViniBorn is offline   Reply With Quote
Old 27/11/2011, 12:06 PM   #6
DreeH
Huge Clucker
 
DreeH's Avatar
 
Join Date: May 2011
Posts: 328
Reputation: 24
Default Re: Criando um sistema em MySQL

Ótimo tutorial Justin.

A partir de agora vou usar só MySQL *-*'

rep+.
__________________
,
DreeH is offline   Reply With Quote
Old 27/11/2011, 12:36 PM   #7
BrunoBSF
Gangsta
 
BrunoBSF's Avatar
 
Join Date: Jun 2011
Location: Barbacena/MG
Posts: 698
Reputation: 45
Default Re: Criando um sistema em MySQL

Muito Bem Explicado Parabens
__________________
>>>BrunoBernardo<<<

Click Aki
BrunoBSF is offline   Reply With Quote
Old 27/11/2011, 01:18 PM   #8
Bruno Pereira
Banned
 
Join Date: Jan 2011
Location: Quênia
Posts: 1,195
Reputation: 62
Default Re: Criando um sistema em MySQL

Parabéns Ricop .
Eu to programando PHP + MySQL agora .
É bem legal fazer esses sistemas!

Depois que minhas provas acabarem vou me aprofundar mais e começar fazer sistemas para vender!
Eu prefiro Php do que o pawn rs, muito mais ilimitado !

Vou ver esse tutorial depois, e já vou te dar Rep. Porque tenho certeza que está foda.

@Duvida

Esse seu server Interactive RolePlay vai ser lançado mesmo?
Se for vou jogar lá, estou procurando um RP Br mas não tem nenhum que preste.
Bruno Pereira is offline   Reply With Quote
Old 27/11/2011, 01:23 PM   #9
Ricop522
High-roller
 
Ricop522's Avatar
 
Join Date: Feb 2010
Location: ES
Posts: 2,696
Reputation: 150
Default Re: Criando um sistema em MySQL

Quote:
Originally Posted by Bruno Pereira View Post
Parabéns Ricop .
Eu to programando PHP + MySQL agora .
É bem legal fazer esses sistemas!

Depois que minhas provas acabarem vou me aprofundar mais e começar fazer sistemas para vender!
Eu prefiro Php do que o pawn rs, muito mais ilimitado !

Vou ver esse tutorial depois, e já vou te dar Rep. Porque tenho certeza que está foda.

@Duvida

Esse seu server Interactive RolePlay vai ser lançado mesmo?
Se for vou jogar lá, estou procurando um RP Br mas não tem nenhum que preste.
Não, vai ser não. Foi só um projeto que eu e o strong fizemos, mas não lançamos.
__________________
"Any fool can write code that a
computer can understand. Good
programmers write code that
humans can understand."

Sistemas de Informação, IFES
Ricop522 is offline   Reply With Quote
Old 27/11/2011, 01:38 PM   #10
steki.
High-roller
 
steki.'s Avatar
 
Join Date: Nov 2010
Location: São Paulo, Brasil
Posts: 2,634
Reputation: 303
Default Re: Criando um sistema em MySQL

Se valer a pena, eu faço um tuto de Threaded Query com o plugin do BlueG. ^.^
__________________
Rio
steki. is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Tutorial] Criando Sistema de Driver-By whiX´ Lançamentos/Releases 14 26/03/2014 07:08 PM
[Tutorial] Criando Sistema de Logs. BlueX Lançamentos/Releases 17 15/11/2011 05:18 PM
[Tutorial] [TUT]Criando sistema de Driver-By Victor_Souz4 Lançamentos/Releases 20 30/10/2011 02:33 PM
[ajuda]criando sistema vip mau_tito Português/Portuguese 5 11/08/2011 04:22 PM


All times are GMT. The time now is 03:57 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.