Izrada MYSQL Systema! by: TheKiller
Sta je potrebno?
Zadnji WAMP (http://www.wampserver.com/dl.php)
MYSQL Plugin
Vrijeme
Napomena: Ovaj tutorial je za malo bolje skriptere, ukoliko se ne smatrate time, nemojte niti pocet radit.. Takoder zahtijeva dosta dobro poznavanje HTML | PHP i CSSa
Koraci
#1
Napocetku, treba pokrenuti WAMP server i MYSQL plugin, kada ste zavrsili krenite na #2 korak.
#2
Sada kada je WAMP i MYSQL plugin slozen, sada mozemo poceti praviti MYSQL System.
#include
#include
//DCMD - za register i login komandu
#define dcmd(%1,%2,%3) if (!strcmp((%3), #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
//WAMP
#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)
#define mysql_fetch_row(%1) mysql_fetch_row_format(%1,"|")public OnGameModeInit()
{
if(!mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS))
{
print("SQL connection attempt 1 FAILED!");
if(!mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS))
{
print("SQL connection attempt 2 FAILED!");
if(!mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS))
{
print("SQL connection attempt 3 FAILED!");
return 1;
}
}
}
return 1;
}public OnPlayerConnect(playerid)
{
new Query, Pname; //Kreira Query i Pname
GetPlayerName(playerid, Pname, 24); //Uzima igracevo ime
format(Query, sizeof(Query), "SELECT * FROM `playerinfo` WHERE `user` = '%s'", Pname); //Selektira liniju gdje 'playername' je igrac
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0) //Ako je igrac pronaden
{
new PIP; //Kreira IP String
GetPlayerIp(playerid, PIP, 56); //Uzima igracev IP
format(Query, sizeof(Query), "SELECT * FROM `playerinfo` WHERE `user` = '%s' AND `IP` = '%s'", Pname, PIP); //Gleda dali je IP igraca isti kao i prosle konekcije, ako je = autologin
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0) // Ako je igracev IP isti ko i prosle konekcije
{
new line;
SetPVarInt(playerid, "Logged", 1); //Stavlja igracu da je logiran
SendClientMessage(playerid, 0x009600AA, "Automatski ste Logirani!");
if(mysql_fetch_row(line))
{
new data; //Data stringovi
new data2; //Data varijable
sscanf(line, "p|ssdddds", data, data, data2, data2, data2, data2, data); //Razdvojava linije pomocu sscanfa
SetPVarInt(playerid, "Kills", data2); //Stavlja Pvarove
SetPVarInt(playerid, "Logged", 1); //Stavlja Pvarove
SetPVarInt(playerid, "Deaths", data2); //Stavlja Pvarove
SetPlayerScore(playerid, data2); //Stavlja igracev Score
GivePlayerMoney(playerid, data2); //Stavlja igracu novac
mysql_free_result();
}
}
if(!mysql_num_rows())
{
SendClientMessage(playerid, 0x009600AA, "Ovaj korisnicki racun je registriran, molimo logirajte se"); //Igrac je vec registriran, ali se IP ne podudara s proslom konekcijom
ShowPlayerDialog(playerid, 15000, DIALOG_STYLE_INPUT , "Login", "Ovaj korisnicki racun je registriran, molimo logirajte se", "OK", "Izlaz");
}
}
else
{
ShowPlayerDialog(playerid, 14600, DIALOG_STYLE_INPUT , "Registracija", "Ovaj korisnicki Racun nije registriran, molimo registrirajte se!", "OK", "Izlaz");
SendClientMessage(playerid, 0x009600AA, "Ovaj korisnicki racun nije registriran, registirajte se!"); //Igrac nije registriran
}
mysql_free_result();
return 1;
}public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 14600)
{
if(response)
{
if(!strlen(inputtext)) //Ako igrac nije unesio PW
{
ShowPlayerDialog(playerid, 14600, DIALOG_STYLE_INPUT , "Registracija", "Ovaj korisnicki racun nije registriran, registrirajte se!", "OK", "Izlaz");
SendClientMessage(playerid, 0xF60000AA, "Molimo unesite PW.");
}
new PIP;
new Query, Pname;
GetPlayerName(playerid, Pname, 24); //Igracevo ime
GetPlayerIp(playerid, PIP, 50); //Igracev IP
format(Query, sizeof(Query), "INSERT INTO `playerinfo` (`user`, `password`, `kills`, `deaths`, `score`, `money`, IP) VALUES ('%s', '%s', 0, 0, 0, 0, '%s')", Pname, inputtext, PIP); //Unosava string
mysql_query(Query);
GameTextForPlayer(playerid, "~g~Registrirani", 2000, 3);
SendClientMessage(playerid, 0x0000D9AA, "Vi ste registrirani i logirani na svoj korisnicki racun!");
SetPVarInt(playerid, "Logged", 1);
}
}
if(dialogid == 15000)
{
if(response)
{
new Query, Pname;
GetPlayerName(playerid, Pname, 24);
format(Query, sizeof(Query), "SELECT * FROM `playerinfo` WHERE `user` = '%s' AND `password` = '%s'", Pname, inputtext);
mysql_query(Query);
mysql_store_result();
if(!mysql_num_rows())
{
SendClientMessage(playerid, 0xF60000AA, "Pogresna lozinka!");
SetPVarInt(playerid, "WrongPass", GetPVarInt(playerid, "WrongPass") + 1);
ShowPlayerDialog(playerid, 15000, DIALOG_STYLE_INPUT , "Login", "Ovaj korisnicki racun je registriran, molimo logirajte se", "OK", "Izlaz");
if(GetPVarInt(playerid, "WrongPass") == 3)
{
SendClientMessage(playerid, 0xF60000AA, "Izbaceni ste, jer ste pogrijesili PW 3 puta!!");
Kick(playerid);
}
}
else
{
new line;
if(mysql_fetch_row(line))
{
new data; //Data string
new data2; //Data varijable
sscanf(line, "p|ssdddds", data, data, data2, data2, data2, data2, data); //Razdvojava liniju putem sscanfa
SetPVarInt(playerid, "Kills", data2); //Stavlja Pvar
SetPVarInt(playerid, "Logged", 1); //Stavlja Pvar
SetPVarInt(playerid, "Deaths", data2); //Stavlja Pvar
SetPlayerScore(playerid, data2); //Stavlja igracev Score
SetPVarInt(playerid, "MoneyGiven", data2); //Stavlja igracu novac
SendClientMessage(playerid, 0x0000D9AA, "Logirani ste!");
mysql_free_result();
}
}
}
}
return 1;
}public OnPlayerRequestSpawn(playerid)
{
if(GetPVarInt(playerid, "Logged") == 0)
{
new Query, Pname; //Varijable
GetPlayerName(playerid, Pname, 24); //Uzima igracevo ime
format(Query, sizeof(Query), "SELECT * FROM `playerinfo` WHERE `user` = '%s'" , Pname); //MySQL string
mysql_query(Query);
mysql_store_result();
if(!mysql_num_rows()) ShowPlayerDialog(playerid, 14600, DIALOG_STYLE_INPUT , "Registracija", "Ovaj korisnicki racun nije registriran, registrirajte se!", "OK", "Izlaz"); //Ako igrac nije registriran, prikazuje Dialog
else ShowPlayerDialog(playerid, 15000, DIALOG_STYLE_INPUT , "Login", "Ovaj korisnicki racun je registriran, logirajte se", "OK", "Izlaz"); //Ako je igrac registriran, prikazuje dialog za login
return 0;
}
return 1;
}public OnPlayerSpawn(playerid)
{
if(GetPVarInt(playerid, "Logged") == 1 && GetPVarInt(playerid, "MoneyGiven") > 0)
{
GivePlayerMoney(playerid, GetPVarInt(playerid, "MoneyGiven"));
SetPVarInt(playerid, "MoneyGiven", 0);
}
return 1;
}public OnPlayerDeath(playerid, killerid, reason)
{
SetPVarInt(playerid, "Deaths", GetPVarInt(playerid, "Deaths") + 1); //Stavlja smrti igracu +1 koji je umro(playerid)
if(killerid != INVALID_PLAYER_ID) SetPVarInt(playerid, "Kills", GetPVarInt(playerid, "Kills") + 1); // Dodaje kill igracu koji je ubio +1 (killerid)
return 1;
}public OnPlayerDisconnect(playerid, reason)
{
if(GetPVarInt(playerid, "Logged") == 1) //Samo ako je igrac bio logiran
{
new query; //Varijable
new Pname; //Varijable
GetPlayerName(playerid, Pname, 24); //Uzima igracevo ime
format(query, sizeof(query), "UPDATE `playerinfo` SET `score` = '%d',`money` = '%d', `kills` = '%d', `deaths` = '%d' WHERE `user` = '%s'", GetPlayerScore(playerid), GetPlayerMoney(playerid), GetPVarInt(playerid, "Kills"), GetPVarInt(playerid, "Deaths"), Pname); //Uzima info igraca
mysql_query(query);
mysql_free_result();
}
return 1;
}stock sscanf(string[], format[], {Float,_}:...)
{
#if defined isnull
if (isnull(string))
#else
if (string == 0 || (string == 1 && string == 0))
#endif
{
return format;
}
#pragma tabsize 4
new
formatPos = 0,
stringPos = 0,
paramPos = 2,
paramCount = numargs(),
delim = ' ';
while (string && string <= ' ')
{
stringPos++;
}
while (paramPos < paramCount && string)
{
switch (format[formatPos++])
{
case '\0':
{
return 0;
}
case 'i', 'd':
{
new
neg = 1,
num = 0,
ch = string;
if (ch == '-')
{
neg = -1;
ch = string[++stringPos];
}
do
{
stringPos++;
if ('0' <= ch <= '9')
{
num = (num * 10) + (ch - '0');
}
else
{
return -1;
}
}
while ((ch = string) > ' ' && ch != delim);
setarg(paramPos, 0, num * neg);
}
case 'h', 'x':
{
new
num = 0,
ch = string;
do
{
stringPos++;
switch (ch)
{
case 'x', 'X':
{
num = 0;
continue;
}
case '0' .. '9':
{
num = (num << 4) | (ch - '0');
}
case 'a' .. 'f':
{
num = (num << 4) | (ch - ('a' - 10));
}
case 'A' .. 'F':
{
num = (num << 4) | (ch - ('A' - 10));
}
default:
{
return -1;
}
}
}
while ((ch = string) > ' ' && ch != delim);
setarg(paramPos, 0, num);
}
case 'c':
{
setarg(paramPos, 0, string[stringPos++]);
}
case 'f':
{
new changestr, changepos = 0, strpos = stringPos;
while(changepos < 16 && string && string != delim)
{
changestr[changepos++] = string[strpos++];
}
changestr = '\0';
setarg(paramPos,0,_:floatstr(changestr));
}
case 'p':
{
delim = format[formatPos++];
continue;
}
case '\'':
{
new
end = formatPos - 1,
ch;
while ((ch = format[++end]) && ch != '\'') {}
if (!ch)
{
return -1;
}
format = '\0';
if ((ch = strfind(string, format, false, stringPos)) == -1)
{
if (format[end + 1])
{
return -1;
}
return 0;
}
format = '\'';
stringPos = ch + (end - formatPos);
formatPos = end + 1;
}
case 'u':
{
new
end = stringPos - 1,
id = 0,
bool:num = true,
ch;
while ((ch = string[++end]) && ch != delim)
{
if (num)
{
if ('0' <= ch <= '9')
{
id = (id * 10) + (ch - '0');
}
else
{
num = false;
}
}
}
if (num && IsPlayerConnected(id))
{
setarg(paramPos, 0, id);
}
else
{
#if !defined foreach
#define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
#define __SSCANF_FOREACH__
#endif
string = '\0';
num = false;
new
name;
id = end - stringPos;
foreach (Player, playerid)
{
GetPlayerName(playerid, name, sizeof (name));
if (!strcmp(name, string, true, id))
{
setarg(paramPos, 0, playerid);
num = true;
break;
}
}
if (!num)
{
setarg(paramPos, 0, INVALID_PLAYER_ID);
}
string = ch;
#if defined __SSCANF_FOREACH__
#undef foreach
#undef __SSCANF_FOREACH__
#endif
}
stringPos = end;
}
case 's', 'z':
{
new
i = 0,
ch;
if (format)
{
while ((ch = string[stringPos++]) && ch != delim)
{
setarg(paramPos, i++, ch);
}
if (!i)
{
return -1;
}
}
else
{
while ((ch = string[stringPos++]))
{
setarg(paramPos, i++, ch);
}
}
stringPos--;
setarg(paramPos, i, '\0');
}
default:
{
continue;
}
}
while (string && string != delim && string > ' ')
{
stringPos++;
}
while (string && (string == delim || string <= ' '))
{
stringPos++;
}
paramPos++;
}
do
{
if ((delim = format[formatPos++]) > ' ')
{
if (delim == '\'')
{
while ((delim = format[formatPos++]) && delim != '\'') {}
}
else if (delim != 'z')
{
return delim;
}
}
}
while (delim > ' ');
return 0;
}#3
Postavljanje PhpMyAdmin-a je korak 3.
1. Idite u MYSQL stranicu
External (Ne na vasem compu) - Idite na web stranicu
Internal (Wamp | na vasem compu) - idite do localhost/phpmyadmin
2. Pronadite i napravite novu databazu imena sa-mp.
3. Pronadite gdje pise "Create new table on database sa-mp" i napisite "playerinfo" sa 7 polja(field)
4. Unesite sljedece informacije u svaku liniju
1 linija:
Field - user
Type - varchar
Length - 24
2 linija:
Field - password
Type - varchar
Length - 24
3 linija:
Field - kills
Type - int
Length - 11
4 linija:
Field - deaths
Type - int
Length - 11
5 linija:
Field - score
Type - int
Length - 11
6 linija:
Field - money
Type - int
Length - 11
7 linija:
Field - IP
Type - varchar
Length - 50
5. Pritisnite Save gumb(Spremi)
#4
Pravljenje websitea, UCP-a(User Control Panel) u PHPu
File: database.php
Info: Ovo je prvi file koji trebate imati da bi se Web spojio na MYSQL databazu i koji bude includan(ubacen) u vecinu vasih web stranica UCPa.
$con = mysql_connect("localhost","root","");
mysql_select_db("sa-mp");
//Ako koristite externi(tj. server negdje na web stranici, a ne na vasem compu) onda ne zaboravite promjeniti: (mysql_connect(server[],user[],pass[]);
?>File: index.php
Info: Prva web stranica na koju ide igrac
File: Logged.php
Info: Nakon sto se igrac ulogira, bit ce ovdje redirektan(prebacen).
include("database.php");
session_start();
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
if(isset($_SESSION["Username"]))
{
$user = $_SESSION["Username"];
$pass = $_SESSION["Password"];
}
else
{
$user = $_POST["User"];
$pass = $_POST["Password"];
$_SESSION['Username'] = $user;
$_SESSION['Password'] = $pass;
}
$query = "SELECT * FROM playerinfo WHERE user = '$user'";
$result = mysql_query($query);
$username_exist = mysql_num_rows($result);
if($username_exist == 0)
{
echo('Taj nick ne postoji');
echo 'Natrag';
unset($_SESSION['Username']);
unset($_SESSION['Password']);
die;
}
$row = mysql_fetch_row($result);
if($row !== $pass)
{
echo('Kriva lozinka!');
echo 'Natrag';
unset($_SESSION['Username']);
unset($_SESSION['Password']);
}
$str = ' Dobrodosli na UCP! ';
echo $str;
echo "";
echo "
Nick:
$row
";
echo "
Ubojstva:
$row
";
echo "
Smrti:
$row
";
echo "
Skor:
$row
";
echo "
Novac:
$$row
";
echo "
";
echo 'Promijena Lozinke';
echo ''
?>File: NewPassword.php
Info: Ovo je gdje igrac mjenja svoj PW.
File: Newpass.php
Info: Provijerava dal je sve uredu u newpassword-u.
session_start();
$pass1 = $_POST["P1"];
$pass2 = $_POST["P2"];
$pass3 = $_POST["P3"];
$user = $_SESSION['Username'];
if(!isset($_SESSION['Username']))
{
echo('Ulogirani ste!');
echo 'Natrag';
die;
}
include("database.php");
$query = "SELECT * FROM playerinfo WHERE user = '$user'";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
$username_exist = mysql_num_rows($result);
if($username_exist == 0)
{
echo('Nick ne postoji');
echo 'Natrag';
die;
}
if($pass1 !== $row)
{
echo("Pogresan stari PW!");
echo 'Natrag';
die;
}
if($pass2 !== $pass3)
{
echo("Nove lozinke vam se ne podudaraju!");
echo 'Natrag';
die;
}
$query = "UPDATE playerinfo SET password = '$pass3' WHERE user= '$user'";
$result = mysql_query($query);
echo 'Password Changed!';
$_SESSION['Password'] = $pass3;
echo 'Natrag';
?>File: Stats.php
Info: Statsi igraca
File: ShowStats.php
Info: Ubacuje ime igraca za stats
include("database.php");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
$user = $_POST["User"];
$query = "SELECT * FROM playerinfo WHERE user= '$user'";
$result = mysql_query($query);
$username_exist = mysql_num_rows($result);
if($username_exist == 0)
{
echo('Nick ne postoji');
echo('');
die;
}
$row = mysql_fetch_row($result);
$message = " Statsi od | $user";
echo $message;
echo "";
echo "
Nick:
$row
";
echo "
Ubojstva:
$row
";
echo "
Smrti:
$row
";
echo "
Skor:
$row
";
echo "
Novac:
$$row
";
echo "
";
echo'';
?>Nadam se da vam se tut svida, kao i moje prevodenje 😉..
original: http://forum.sa-mp.com/showthread.php?t=159785