Szerző Téma: mysql tut  (Megtekintve 1208 alkalommal)

Nem elérhető Game94

  • 405
    • Profil megtekintése
mysql tut
« Dátum: 2010. december 19. - 15:13:21 »
0 Show voters
Valaki tudna írni nekem egy tutorialt arról hogy hogyan kell felállítani egy mysql reg rendszert ?
És pls a sorok mellé írjátok oda h mire használjuk azt a sort ...
Nagyon hasznos lenne , mert még egy fórumon sem találtam mysql-rõl leírást :)

Nem elérhető DaVe

  • 149
    • Profil megtekintése
mysql tut
« Válasz #1 Dátum: 2010. december 19. - 16:00:17 »
0 Show voters
Hali,
Megírtam és a lehetõ legtöbb helyen kommenteltem.Ha nem érted akkor írj és elmagyarázom részletesebben :)
 
#include <a_samp>
#include <mysql>
#include <zcmd>
#include <sscanf>
//regisztracio,bejelentkezes
#define MAX_PROBAK 3 //maximum ennyiszer próbálkozhat a bejelentkezéssel
#define JELSZO_MAX_HOSSZ 64
//mysql kapcsolat adatai
#define HOST \"127.0.0.1\" //mysql szerver ip
#define FELHASZNALO \"root\" //felhasználónév mysql-en
#define JELSZO \"\" //jelszó mysql-en
#define ADATBAZIS \"samp\" //adatbázis név
#define COLOR_RED 0xFF0000AA
new MySQL:kapcsolat;
//jatekos adatai
enum info
{
      belepve
}
new pinfo[MAX_PLAYERS][info];
forward bejelentkezes(playerid);
public OnFilterScriptInit()
{
kapcsolat = mysql_init(LOG_ONLY_ERRORS, 1); //a hibák logolásának beállítása
mysql_connect(HOST, FELHASZNALO, JELSZO, ADATBAZIS, kapcsolat); //lapcsolat létesítése
 
//mysql tábla létrehozása, ha nem létezik
mysql_query(\"CREATE TABLE IF NOT EXISTS jatekosok (id TINYINT(1) NOT NULL AUTO_INCREMENT primary key,nev varchar(30),jelszo varchar(32));\",-1,-1,kapcsolat);
return 1;
}
CMD:reg(playerid,params[])
{
//ezt a 3-at gondolom érted...
    if(pinfo[playerid][belepve] == 1) return SendClientMessage(playerid,COLOR_RED,\"Már be vagy jelentkezve.\");
if(!strlen(params)) return SendClientMessage(playerid,COLOR_RED,\"/reg [jelszó]\");
if(strlen(params) > JELSZO_MAX_HOSSZ) return SendClientMessage(playerid,COLOR_RED,\"A jelszó túl hosszú!\");
new nev[MAX_PLAYER_NAME],str[128],esc[2][128];
GetPlayerName(playerid,nev,sizeof(nev));
//a beírt jelszót és a nevét a biztonság kedvéért áthelyezzük egy tömbbe (nem kötelezõ, de ezzel meg lehet akadályozni a mysql injection-t)
mysql_real_escape_string(nev,esc[0],kapcsolat);
mysql_real_escape_string(params,esc[1],kapcsolat);
 
//kiválasztjuk azt a cellát a \"nev\" sorból, ahol a cella tartalma egyenlõ a játékos nevével
format(str,sizeof(str),\"SELECT nev FROM jatekosok WHERE nev = \'%s\'\",esc[0]);
mysql_query(str,-1,-1,kapcsolat);
//eltároljuk az eredményt
mysql_store_result();
//ha nem talált ilyen cellát
if(mysql_num_rows() == 0)
{
    //beillesztjük a táblába a játékos adatait
   format(str,sizeof(str),\"INSERT INTO jatekosok (nev,jelszo) VALUES(\'%s\',\'%s\');\",esc[0],esc[1]);
    mysql_query(str,-1,-1,kapcsolat);
    SendClientMessage(playerid,COLOR_RED,\"Sikeres regisztráció. Automatikusan be lettél léptetve.\");
    bejelentkezes(playerid); //bejelentkeztetjük
}
else //ha viszint talált
{
    SendClientMessage(playerid,COLOR_RED,\"Ez a név már regisztrálva van!\");
}
mysql_free_result(); //töröljük az eltárolt eredményt
return 1;
}
CMD:login(playerid,params[])
{
//ez a 2 érthetõ gondolom
if(pinfo[playerid][belepve] == 1) return SendClientMessage(playerid,COLOR_RED,\"Már be vagy jelentkezve.\");
if(!strlen(params)) return SendClientMessage(playerid,COLOR_RED,\"/login [jelszó]\");
new nev[MAX_PLAYER_NAME],str[128],esc[2][128]; //esc[0] = név, esc[1] = jelszó
GetPlayerName(playerid,nev,sizeof(nev));
//mint a regisztrációnál...
mysql_real_escape_string(nev,esc[0],kapcsolat);
mysql_real_escape_string(params,esc[1],kapcsolat);
//ez is ugyan úgy
format(str,sizeof(str),\"SELECT nev FROM jatekosok WHERE nev = \'%s\'\",esc[0]);
mysql_query(str,-1,-1,kapcsolat);
mysql_store_result(); //még mindig
//ha talált ilyen cellát
if(mysql_num_rows() != 0)
{
    mysql_free_result();
   
    //kijelölünk egy cellát a \"jelszo\" sorból ahol a jelszó megegyezik a beírttal, és a név is
format(str,sizeof(str),\"SELECT jelszo FROM jatekosok WHERE jelszo = \'%s\' AND nev = \'%s\'\",esc[1],esc[0]);
mysql_query(str,-1,-1,kapcsolat);
mysql_store_result();
//ha talált ilyen cellát
if(mysql_num_rows() != 0)
{
   
    SendClientMessage(playerid,COLOR_RED,\"Sikeres bejelentkezes\");
    bejelentkezes(playerid);
   
}
        else //ha nemt alált (tehát rossz a jelszó)
        {
            SendClientMessage(playerid,COLOR_RED,\"Hibás jelszó\");
            SetPVarInt(playerid,\"probak\",GetPVarInt(playerid,\"probak\") + 1);
            if(GetPVarInt(playerid,\"probak\") == MAX_PROBAK)
            {
                Kick(playerid);
   }
        }
}
else
{
    SendClientMessage(playerid,COLOR_RED,\"Nincs ilyen név regisztrálva\");
}
mysql_free_result();
return 1;
}
public bejelentkezes(playerid)
{
   //ide jöhetnek a cuccok amit bejelentkezésnél akarsz (adminszint kiolvasás stb...)
            pinfo[playerid][belepve] = 1;
           
            return 1;
}
public OnPlayerDisconnect(playerid)
{
pinfo[playerid][belepve] = 0;
}

Nem elérhető Game94

  • 405
    • Profil megtekintése
mysql tut
« Válasz #2 Dátum: 2010. december 19. - 18:22:01 »
0 Show voters
Köszi , ez nagyon hasznos , de még annyit meg tudnál csinálni hogy amikor belép akkor betöltse az adatait és amikor kilép akkor meg mentse az adatait :)
Adatok :
enum info
{
      halalok,
        olesek
}
new pinfo[MAX_PLAYERS][info];
Amikor kilép akkor mentse az adatot és amikor belép akkor a mysql táblákból olvassa ki és adja át ezeknek a tömböknek :)
Elõre is köszi  :shy:

Nem elérhető Game94

  • 405
    • Profil megtekintése
mysql tut
« Válasz #3 Dátum: 2010. december 21. - 12:45:54 »
0 Show voters
Bocs a dupla postér , de lecsúszott a téma ..
Valaki akkor tud segíteni :) ?

Nem elérhető DaVe

  • 149
    • Profil megtekintése
mysql tut
« Válasz #4 Dátum: 2010. december 21. - 13:50:54 »
0 Show voters
Bocs, hogy nem válaszoltam csak közbe elkezdtem belõle Controll Panelt csinálni és nem néztem fórumot :D
De tessék megcsináltam:
 
#include <a_samp>
#include <mysql>
#include <zcmd>
#include <sscanf>
//regisztracio,bejelentkezes
#define MAX_PROBAK 3 //maximum ennyiszer próbálkozhat a bejelentkezéssel
#define JELSZO_MAX_HOSSZ 64
//mysql kapcsolat adatai
#define HOST \"127.0.0.1\"
#define FELHASZNALO \"root\"
#define JELSZO \"\"
#define ADATBAZIS \"samp\"
#define COLOR_RED 0xFF0000AA
new MySQL:kapcsolat;
new str[128];
//jatekos adatai
enum info
{
      belepve,
      alvl,
      halalok,
      olesek
}
new pinfo[MAX_PLAYERS][info];
forward bejelentkezes(playerid,nev[]);
public OnFilterScriptInit()
{
print(\"\\n----------------------------------\");
print(\" MySQL teszt by DaVe\");
print(\"----------------------------------\\n\");
kapcsolat = mysql_init(LOG_ONLY_ERRORS, 1);
mysql_connect(HOST, FELHASZNALO, JELSZO, ADATBAZIS, kapcsolat);
 
mysql_query(\"CREATE TABLE IF NOT EXISTS jatekosok (id TINYINT(1) NOT NULL AUTO_INCREMENT primary key,nev varchar(30),jelszo varchar(32),alvl TINYINT(1),penz MEDIUMINT(1),halalok TINYINT(1), olesek TINYINT(1));\",-1,-1,kapcsolat);
return 1;
}
CMD:reg(playerid,params[])
{
    if(pinfo[playerid][belepve] == 1) return SendClientMessage(playerid,COLOR_RED,\"Már be vagy jelentkezve.\");
if(!strlen(params)) return SendClientMessage(playerid,COLOR_RED,\"/reg [jelszó]\");
if(strlen(params) > JELSZO_MAX_HOSSZ) return SendClientMessage(playerid,COLOR_RED,\"A jelszó túl hosszú!\");
new nev[MAX_PLAYER_NAME],esc[2][128];
GetPlayerName(playerid,nev,sizeof(nev));
mysql_real_escape_string(nev,esc[0],kapcsolat);
mysql_real_escape_string(params,esc[1],kapcsolat);
format(str,sizeof(str),\"SELECT nev FROM jatekosok WHERE nev = \'%s\'\",esc[0]);
mysql_query(str,-1,-1,kapcsolat);
mysql_store_result();
if(mysql_num_rows() == 0)
{
   format(str,sizeof(str),\"INSERT INTO jatekosok (nev,jelszo,alvl,penz) VALUES(\'%s\',\'%s\',1,%d);\",esc[0],esc[1],GetPlayerMoney(playerid));
        mysql_query(str,-1,-1,kapcsolat);
    SendClientMessage(playerid,COLOR_RED,\"Sikeres regisztráció. Automatikusan be lettél léptetve.\");
    bejelentkezes(playerid,nev);
}
else
{
    SendClientMessage(playerid,COLOR_RED,\"Ez a név már regisztrálva van!\");
}
mysql_free_result();
return 1;
}
CMD:login(playerid,params[])
{
if(pinfo[playerid][belepve] == 1) return SendClientMessage(playerid,COLOR_RED,\"Már be vagy jelentkezve.\");
if(!strlen(params)) return SendClientMessage(playerid,COLOR_RED,\"/login [jelszó]\");
new nev[MAX_PLAYER_NAME],esc[2][128]; //esc[0] = név, esc[1] = jelszó
GetPlayerName(playerid,nev,sizeof(nev));
mysql_real_escape_string(nev,esc[0],kapcsolat);
mysql_real_escape_string(params,esc[1],kapcsolat);
format(str,sizeof(str),\"SELECT nev FROM jatekosok WHERE nev = \'%s\'\",esc[0]);
mysql_query(str,-1,-1,kapcsolat);
mysql_store_result();
if(mysql_num_rows() != 0)
{
    mysql_free_result();
format(str,sizeof(str),\"SELECT jelszo FROM jatekosok WHERE jelszo = \'%s\'\",esc[1]);
mysql_query(str,-1,-1,kapcsolat);
mysql_store_result();
if(mysql_num_rows() != 0)
{
   
    SendClientMessage(playerid,COLOR_RED,\"Sikeres bejelentkezes\");
    bejelentkezes(playerid,nev);
   
}
        else
        {
            SendClientMessage(playerid,COLOR_RED,\"Hibás jelszó\");
            SetPVarInt(playerid,\"probak\",GetPVarInt(playerid,\"probak\") + 1);
            if(GetPVarInt(playerid,\"probak\") == MAX_PROBAK)
            {
                Kick(playerid);
   }
        }
}
else
{
    SendClientMessage(playerid,COLOR_RED,\"Nincs ilyen név regisztrálva\");
}
mysql_free_result();
return 1;
}
public bejelentkezes(playerid,nev[])
{
   format(str,sizeof(str),\"SELECT alvl FROM jatekosok WHERE nev = \'%s\'\",nev);
   mysql_query(str,-1,-1,kapcsolat);
   mysql_store_result();
            pinfo[playerid][alvl] = mysql_fetch_int(kapcsolat);
   mysql_free_result();
            
   format(str,sizeof(str),\"SELECT penz FROM jatekosok WHERE nev = \'%s\'\",nev);
   mysql_query(str,-1,-1,kapcsolat);
   mysql_store_result();
            SetPlayerMoney(playerid,mysql_fetch_int(kapcsolat));
            mysql_free_result();
            
            
            
   format(str,sizeof(str),\"SELECT olesek FROM jatekosok WHERE nev = \'%s\'\",nev);
   mysql_query(str,-1,-1,kapcsolat);
   mysql_store_result();
            pinfo[playerid][olesek] = mysql_fetch_int(kapcsolat);
   mysql_free_result();
   format(str,sizeof(str),\"SELECT halalok FROM jatekosok WHERE nev = \'%s\'\",nev);
   mysql_query(str,-1,-1,kapcsolat);
   mysql_store_result();
            pinfo[playerid][halalok] = mysql_fetch_int(kapcsolat);
   mysql_free_result();
            
            
            
            pinfo[playerid][belepve] = 1;
           
            return 1;
}
public OnPlayerDeath(playerid,killerid,reason)
{
pinfo[playerid][halalok]++;
pinfo[killerid][olesek]++;
}
 
public OnPlayerDisconnect(playerid)
{
if(pinfo[playerid][belepve] == 1)
{
new nev[MAX_PLAYER_NAME];
GetPlayerName(playerid,nev,sizeof(nev));
format(str,sizeof(str),\"UPDATE jatekosok SET penz=%d WHERE nev=\'%s\'\",GetPlayerMoney(playerid),nev);
mysql_query(str,-1,-1,kapcsolat);
format(str,sizeof(str),\"UPDATE jatekosok SET olesek=%d WHERE nev=\'%s\'\",pinfo[playerid][olesek],nev);
mysql_query(str,-1,-1,kapcsolat);
format(str,sizeof(str),\"UPDATE jatekosok SET halalok=%d WHERE nev=\'%s\'\",pinfo[playerid][halalok],nev);
mysql_query(str,-1,-1,kapcsolat);
pinfo[playerid][belepve] = 0;
}
}
stock SetPlayerMoney(playerid, money)
{
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, money);
}

Nem elérhető Game94

  • 405
    • Profil megtekintése
mysql tut
« Válasz #5 Dátum: 2010. december 22. - 10:45:57 »
0 Show voters
Okés köszi , így már nagyjából értem :D

Nem elérhető Game94

  • 405
    • Profil megtekintése
mysql tut
« Válasz #6 Dátum: 2010. december 22. - 15:10:12 »
0 Show voters
Na de most emg akadt még egy gondom :)
Én nem ezt a mysql plugint használom -,-
Szóval be tudnád linkelni nekem ezt :) ?

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
mysql tut
« Válasz #7 Dátum: 2010. december 22. - 15:14:08 »
0 Show voters
Szerintem az a plugin, amire írta az elég szar.
http://forum.sa-mp.com/showthread.php?t=122983

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal