[TuT] MySQL log/reg sistem

Započeo SANY_xD, Jul 27, 2013, 23:06:40 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Cao, predstavljam vam tutorijal pod nazivom MySQL log/reg sistem !
Da pocnemo:
Otvorite pawno, kliknete new i nastimate sve kako vi ocete...
Prvi korak je ispod
#include <a_samp>
dodati
#include <a_mysql>
Drugi korak je definirati bazu podataka

#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_DB "sany"
#define MYSQL_PW ""

Ispod toga dodajte :
new Query[1000], konekcija;
Ovo stavite ispod includeove...
Prilagodite svom mysql spajanju
pod:
OnGameModeInIt
dodajte
DBSpoji();
mysql_debug(1);
konekcija = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PW);

Dodajemo sljedeci Enum
enum pInfo()
{
pAdmin,
pNovac,
pLevel,
pUbistva,
pSmrti
}
new PlayerInfo[MAX_PLAYERS][pInfo];

Dodajemo forwardove
forward OnQueryFinish(gQuery[]);
forward ProvjeraIgraca(playerid);
forward LogirajKorisnika(playerid, sifra);

pod:
OnGameModeExit
stavite
mysql_close();
pod:
OnPlayerConnect
stavite:
mysql_format(konekcija, Query, "SELECT * FROM `korisnici` WHERE `ImeKorisnika` = '%e'", RPIme(playerid));
mysql_function_query(konekcija, Query, false, "ProvjeraIgraca", "d", playerid);

pod:
OnPlayerDisconnect
stavite:
mysql_format(konekcija, Query, "UPDATE `korisnici` SET `Novac` = %d, `Level` = %d, `Admin` = %d, `Ubistva` = %d, `Smrti` = %d", GetPlayerMoney(playerid), GetPlayerScore(playerid), PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pUbistva], PlayerInfo[playerid][pSmrti]);
    mysql_function_query(konekcija, Query, false, "OnQueryFinish", "s", Query);

pod:
OnPlayerDeath
stavite:
PlayerInfo[killerid][pUbistva] ++;
PlayerInfo[playerid][pSmrti] ++;

ovo stavite na dno moda
public OnQueryFinish(gQuery[])
{
print("Query se uspjesno izvrsio");
return 1;
}

pod
OnDialogResponse
dodajte
switch(dialogid)
{
    case 0:
    {
        if(!response) return Kick(playerid);
        mysql_format(konekcija, Query, " SELECT * FROM `korisnici` WHERE ImeKorisnika = '%e' AND Sifra = md5('%e')", RPIme(playerid), inputtext);
        mysql_function_query(konekcija, Query, false, "LogirajKorisnika", "ds", playerid, inputtext);
}
case 1:
{
    new IP[50];
    GetPlayerIp(playerid, IP, sizeof(IP));
    if(!response) return Kick(playerid);
    mysql_format(konekcija, Query, "INSERT INTO `korisnici` (ImeKorisnika, Sifra, Novac, Level, Admin, Ubistva, Smrti, IP) VALUES('%e', md5('%e'), 5000, 1, 0, 0, 0, '%e')", RPIme(playerid), inputtext, IP);
            mysql_function_query(konekcija, Query, false, "OnQueryFinish", "s", Query);
}
}
if(dialogid == 2)
{
    if(!response) return Kick(playerid);
    if(response)
    {
        SpawnPlayer(playerid);
    }
}
if(dialogid == 3)
{
    new string[264];
if(!response) return Kick(playerid);
    if(response)
    {
        format(string, sizeof(string), "Login %s  !\nPokusaj ponovo da se logiras!!", RPIme(playerid));
    ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PASSWORD, "Prijava", string, "Prijavi se", "Odustani");
    }
}

na dno dodajte ove stockove
stock RPIme(playerid)
{
new Ime[MAX_PLAYER_NAME];
GetPlayerName(playerid, Ime, MAX_PLAYER_NAME);
return Ime;
}

stock DBSpoji()
{
if(mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PW)) print("| SaNyAC | Spajanje sa MySQL bazom je uspesno!");
else print("| SaNyAC | Spajanje sa MySQL bazom nije uspelo...");
}

Dodajte ove publice na dno
public OnQueryError(errorid, error[], callback[], query[], connectionHandle)
{
printf("EID: %d | Error: %s | Query: %s", errorid, error, query);
return 1;
}

public LogirajKorisnika(playerid, sifra)
{
new string[264];
mysql_store_result();
if(mysql_num_rows(konekcija) == 1)
{
    if(mysql_retrieve_row())
    {
        mysql_fetch_field_row(string, "Admin"); PlayerInfo[playerid][pAdmin] = strval(string);
        mysql_fetch_field_row(string, "Level"); PlayerInfo[playerid][pLevel] = strval(string);
        mysql_fetch_field_row(string, "Novac"); PlayerInfo[playerid][pNovac] = strval(string);
        mysql_fetch_field_row(string, "Ubistva"); PlayerInfo[playerid][pUbistva] = strval(string);
        mysql_fetch_field_row(string, "Smrti"); PlayerInfo[playerid][pSmrti] = strval(string);
        ShowPlayerDialog(playerid, 2, DIALOG_STYLE_MSGBOX, "Logiran", "Uspjesno ste prijavljeni!", "Uredu", "Izlaz");
    }
}
else
{
    ShowPlayerDialog(playerid, 3, DIALOG_STYLE_MSGBOX, "Kriva sifra", "Vasa sifra je netacna!", "Uredu", "Izlaz");
}
mysql_free_result();
return 1;
}

public ProvjeraIgraca(playerid)
{
new string[264];
mysql_store_result();
if(mysql_num_rows(konekcija) != 0)
{
    format(string, sizeof(string), "Dobrodosao nazad %s  !\n Molim vas da se prijavite!!", RPIme(playerid));
    ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PASSWORD, "Prijava", string, "Prijavi se", "Odustani");
}
else
{
    format(string, sizeof(string), "Dobrodosao %s na ovaj server !\n Upisite sifru da se registrujete!!", RPIme(playerid));
    ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Registracija", string, "Registracija", "Odustani");
}
mysql_free_result();
return 1;
}


NAPOMENA: Morate imati MYSQL plugin i include , neda mi se sad trazit link !
Morate napravit novu databazu pod imenom "sany"
Tablica koju cete import:

http://www.mediafire.com/?b5kkil2bl26lc39

OBJASNJENJE:
#include <a_mysql> ----------> dodajemo da cemo koristit include mysql

#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_DB "sany"
#define MYSQL_PW ""
---------> Definisemo databazu na koju se server konektuje]

new Query[1000], konekcija; ----------> definiramo Query i konekcija

mysql_debug(1); ------------> dodajemo da ce se koristit mysql_debug
konekcija = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PW); -----------> spajamo se sa databazom

enum pInfo()
{
pAdmin,
pNovac,
pLevel,
pUbistva,
pSmrti
}
new PlayerInfo[MAX_PLAYERS][pInfo];
-------------> definiramo pAdmin, pNovac, pLevel, pUbistva, pSmrti

mysql_close(); ----------> gasimo mysql

mysql_format(konekcija, Query, "SELECT * FROM `korisnici` WHERE `ImeKorisnika` = '%e'", RPIme(playerid));
mysql_function_query(konekcija, Query, false, "ProvjeraIgraca", "d", playerid);
stavljamo ucitavanje korisnickovog accounta

mysql_format(konekcija, Query, "UPDATE `korisnici` SET `Novac` = %d, `Level` = %d, `Admin` = %d, `Ubistva` = %d, `Smrti` = %d", GetPlayerMoney(playerid), GetPlayerScore(playerid), PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][pUbistva], PlayerInfo[playerid][pSmrti]);
    mysql_function_query(konekcija, Query, false, "OnQueryFinish", "s", Query);
--------> dodajemo cuvanje korisnickog accounta

PlayerInfo[killerid][pUbistva] ++;
PlayerInfo[playerid][pSmrti] ++;
----------> dodajemo da kad igrac koji je ubio dodaje mu se ubistvo, takodje isto kao i za smrti

switch(dialogid)
{
    case 0:
    {
        if(!response) return Kick(playerid);
        mysql_format(konekcija, Query, " SELECT * FROM `korisnici` WHERE ImeKorisnika = '%e' AND Sifra = md5('%e')", RPIme(playerid), inputtext);
        mysql_function_query(konekcija, Query, false, "LogirajKorisnika", "ds", playerid, inputtext);
}
case 1:
{
    new IP[50];
    GetPlayerIp(playerid, IP, sizeof(IP));
    if(!response) return Kick(playerid);
    mysql_format(konekcija, Query, "INSERT INTO `korisnici` (ImeKorisnika, Sifra, Novac, Level, Admin, Ubistva, Smrti, IP) VALUES('%e', md5('%e'), 5000, 1, 0, 0, 0, '%e')", RPIme(playerid), inputtext, IP);
            mysql_function_query(konekcija, Query, false, "OnQueryFinish", "s", Query);
}
}
if(dialogid == 2)
{
    if(!response) return Kick(playerid);
    if(response)
    {
        SpawnPlayer(playerid);
    }
}
if(dialogid == 3)
{
    new string[264];
if(!response) return Kick(playerid);
    if(response)
    {
        format(string, sizeof(string), "Login %s  !\nPokusaj ponovo da se logiras!!", RPIme(playerid));
    ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PASSWORD, "Prijava", string, "Prijavi se", "Odustani");
    }
}
------------> dodajemo dialoge za login, register, pogresnu sifru i pravilnu sifru

stock RPIme(playerid)
{
new Ime[MAX_PLAYER_NAME];
GetPlayerName(playerid, Ime, MAX_PLAYER_NAME);
return Ime;
}
------------> definisemo RPIme

stock DBSpoji()
{
if(mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PW)) print("| SaNyAC | Spajanje sa MySQL bazom je uspesno!");
else print("| SaNyAC | Spajanje sa MySQL bazom nije uspelo...");
}
---------> ako se baza spojila ili ako nije se spojila da ispise

public LogirajKorisnika(playerid, sifra)
{
new string[264];
mysql_store_result();
if(mysql_num_rows(konekcija) == 1)
{
    if(mysql_retrieve_row())
    {
        mysql_fetch_field_row(string, "Admin"); PlayerInfo[playerid][pAdmin] = strval(string);
        mysql_fetch_field_row(string, "Level"); PlayerInfo[playerid][pLevel] = strval(string);
        mysql_fetch_field_row(string, "Novac"); PlayerInfo[playerid][pNovac] = strval(string);
        mysql_fetch_field_row(string, "Ubistva"); PlayerInfo[playerid][pUbistva] = strval(string);
        mysql_fetch_field_row(string, "Smrti"); PlayerInfo[playerid][pSmrti] = strval(string);
        ShowPlayerDialog(playerid, 2, DIALOG_STYLE_MSGBOX, "Logiran", "Uspjesno ste prijavljeni!", "Uredu", "Izlaz");
    }
}
else
{
    ShowPlayerDialog(playerid, 3, DIALOG_STYLE_MSGBOX, "Kriva sifra", "Vasa sifra je netacna!", "Uredu", "Izlaz");
}
mysql_free_result();
return 1;
}
----------> Dodajemo sta da se uradi kad se igrac logira

public ProvjeraIgraca(playerid)
{
new string[264];
mysql_store_result();
if(mysql_num_rows(konekcija) != 0)
{
    format(string, sizeof(string), "Dobrodosao nazad %s  !\n Molim vas da se prijavite!!", RPIme(playerid));
    ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PASSWORD, "Prijava", string, "Prijavi se", "Odustani");
}
else
{
    format(string, sizeof(string), "Dobrodosao %s na ovaj server !\n Upisite sifru da se registrujete!!", RPIme(playerid));
    ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Registracija", string, "Registracija", "Odustani");
}
mysql_free_result();
return 1;
}
---------> provjerava dali je igrac registrovan ili nije registrovan
Poslednja Izmena: Jul 27, 2013, 23:37:07 POSLE PODNE od |~SaNy~|

Apsolutno ništa nisi objasnio nego si samo rekao: stavi ovo ovdje, ovo ondje i to je to - to nije tutorial. I ako ćeš već raditi tutorial o mySQL-u, koristi najnoviju verziju mySQL-a.

Last nick: Paradox

Znam, ovo mi je prvi TuT, neam vremena sad da pisem objasnjenja dodat cu sutra
koristim:
* MySQL plugin R7
* Copyright (c) 2008-2011, BlueG

Citat: |~SaNy~| poslato Jul 27, 2013, 23:17:54 POSLE PODNE
Znam, ovo mi je prvi TuT, neam vremena sad da pisem objasnjenja dodat cu sutra

Ako sad nisi imao vremena, zašto si onda objavljivao tutorial kad si mogao sutra kad to sve središ? Ne bi ništa izgubio.

Citat: |~SaNy~| poslato Jul 27, 2013, 23:17:54 POSLE PODNE
koristim:
* MySQL plugin R7
* Copyright (c) 2008-2011, BlueG

To je već poprlično stara verzija, trenutno najnoviji je R31.

Last nick: Paradox

Ništa nije objašnjeno tako da 0/5
NAPUSTIO SAM SAMP

Oproštajni post


imas gresaka, a i tutorijal podrazumeva objasnjenje svake linije, ali neka ostane tu, pa ti popravi kada budes mogao, i ako budes mogao

Citat: Blaeks poslato Jul 28, 2013, 04:19:47 PRE PODNE
imas gresaka, a i tutorijal podrazumeva objasnjenje svake linije, ali neka ostane tu, pa ti popravi kada budes mogao, i ako budes mogao
Mislim dakle Boze
Na Zari sve i svasta

zasto ja imam u skripti     
#define SQL_HOST "localhost" //WAMP host, ako je externi, promjenite ovo
#define SQL_USER "root" //WAMP User
#define SQL_PASS "" //WAMP PW(default - nema PWa)
#define SQL_DB "sa-mp" //Databazu koju ste kreirali(kasnije u koracima)

a ovjde je #define MYSQL a meni SQL

Jao pa to ti je isto sra*nje, samo sto si ti drukcije definirao a ja drukcije -.-

Slazem se sa Paradoxom, da nije preterano objasnjeno za objasnjenje imas 1/10 a za trud koji je bitniji pohvala
RESPECT: Blaeks, Yui_Sang, Gagi, Kapetan Husein, Luksa, Slay, Denis_Lapi, Zoran(Dude)

Programski jezici koje koristim: C, C#, Visual Basic, HTML, CSS, PHP (tek ucim).


tutorijal je ukraden od Sistem32 on je napravio taj tutorijal samo si izmjenuo neke sitnice i to je to! 0 objasnjeno!

Citat: BC | Bobo poslato Jul 25, 2014, 13:13:12 POSLE PODNE
tutorijal je ukraden od Sistem32 on je napravio taj tutorijal samo si izmjenuo neke sitnice i to je to! 0 objasnjeno!

refrešao si temu skoro godinu dana, molio bih te da pročitaš pravila foruma i svih podforuma , lock.