[Tutorial] Criando um sistema em MySQL
#1

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.


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>
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.[ame=http://www.youtube.com/watch?v=MiJlWnK9ndY]Clique aqui[/ame], a parte que lhe interessa й apenas a do banco de dados - criando-o; os da tables nгo lhe interessam!!!

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!
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 Код:
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 Код:
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 Код:
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 Код:
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 Код:
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;
}
Terminamos o nosso cуdigo ! agora vocк estб pronto para iniciar um novo ramo do PAWN, o MYSQL!

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.
Reply
#2

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

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.
Reply
#4

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

+rep
Reply
#5

Muito bem explicado.
Bom trabalho.
Reply
#6

Уtimo tutorial Justin.

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

rep+.
Reply
#7

Muito Bem Explicado Parabens
Reply
#8

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.
Reply
#9

Quote:
Originally Posted by Bruno Pereira
Посмотреть сообщение
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.
Reply
#10

Se valer a pena, eu faзo um tuto de Threaded Query com o plugin do BlueG. ^.^
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)