Jump to content

Am si eu problema am facut login si register pe baza de date de la edison (Register and Login System - #delazero (#01))


Vally

Recommended Posts

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By VenoMarius ERROR404
      Imi apare chestia aia cu (<< >> spawn) si nu stiu cum sa o scot...

    • By WiDuAlK
      Salutare, azi am sa va prezint cum sa faceti un tutorial register/login mysql R39.
      Mai intai o sa va trebuiasca pluginul si includeul mysql care ip puteti gasi AICI!
      Mai intai o sa punem la inceputul GM-ului include-ul mysql.
       
      #include <a_mysql>  
      Acum o sa definim datele de conectare
      #define mysql_host "localhost" // aici punem ip hostului. Daca folosim in PC GM lasam localhost #define mysql_db "bazadate"// aici punem numele bazei de date. #define mysql_user "root"// aici punem numele userului de la host. Daca folositi PC lasati root. #define mysql_pass ""//Aici puneti parola de la host(de la phpmyadmin al hostului). In caz de folositi PC lasati asa.  
      Vom crea 2 Enum-uri. Unul cu dialogurile de register/login si altul cu datele pe care le va avea playerul
      enum {     DIALOG_LOGIN, // dialogul de login     DIALOG_REGISTER// dialogul de register }; enum pInfo //numele enumului este pInfo. in el vom pune datele playerului gen Admin/Level/ Money/Experianta si altele. {     pParola,//cu pParola vom lua parola din baza de date a playerului     pID// cu pID vom lua ID-ul din baza de date a playerului }; new P_Data[MAX_PLAYERS][pInfo];// Aceasta variabila este array. cu ea vom verifica 2 lucruri. id playerului si datele lui gen P_Data[playerid][pID] == 1;  
      Vom crea acum un new care ne va ajuta sa conectam datele de conectarea cu baza de date
      new handle; // handle(mâner) este cea de care ne vom folosi sa facem lagatura intre baza de date si server Acum vom crea legatura intre baza de date si server.
       
      forward MySQLConnect();// se creaza un nou callback cu forward public MySQLConnect()// se face callback-ul {     handle = mysql_connect(mysql_host, mysql_user, mysql_db, mysql_pass);// definim handle(manerul) ca fiind conectarea mysql la host, baza de date, parola si user-ul     if(mysql_errno() != 0)// in caz ca aceasta va fi diferita de 0(0 inseamna ca e conectat, 1 inseamna ca nu e conectat , fiind un vector)     {         printf("Conexiunea la baza de date %s a esuat ---> Server Inchis ~~~", mysql_db);// va trimite un mesaj in consola         SendRconCommand("exit");// se inchide serverul     }     else// altfel daca este 0(daca se face legatura)     {         printf("Conexiunea la baza de date '%s' cu user-ul '%s' a reusit!!!", mysql_db, mysql_user);// ne va da acest mesaj in consola     }     return 1; }  
      Callback-ul MySQLConnect se va pune la OnGameModeInit pentru a fi finalizata conectarea la baza de date.
      public OnGameModeInit() {     MySQLConnect();     return 1; } Se va crea un stock simplu cu care vom selecta numele playerului
       
      stock GetName(playerid) { new Name[MAX_PLAYER_NAME]; GetPlayerName(playerid, Name, sizeof(Name)); return Name; }  
      Acum vom se va crea un nou callback , la care vom apela cand playerul se conecteaza. El va arata daca are cont sau nu.
       
      forward OnPlayerLogin(playerid);// se creaza callbac-ul public OnPlayerLogin(playerid)//Se creaza publicul {     new rows, fields;// definim rows(randurile)si fields(domeniile)     cache_get_data(rows, fields);//cache_get_data interogheaza date din baza de date. acele date sunt rows si fields     if(rows)// atunci cand playerul se inregistreaza i se va crea niste randuri. Daca i se gasesc atunci cand se va conecta ii va da:     {         ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logheaza-te!", "Te rog sa-ti introduci parola contuului mai jos!", "Logare", "Exit");// dialogul register     }     else// daca nu i se gasesc randuri, adica daca contul nu exista, atunci i se va da urmatorul dialog     {         ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Inregistrare", "Trebuie sa iti creezi un cont ca sa joci pe server. nTasteaza mai jos o parola, pentru a te inregistra!", "Inregistreaza", "Exit");// dialogul register     }     return 1; }  
      Acum ca am creat dialogul care ne ajuta sa verificam daca playerul are cont sau nu , mergem la OnPlayerConnect si punem urmatoarele:
       
      public OnPlayerConnect(playerid) {     new query[100];// definim query(interogare)     mysql_format(handle, query, sizeof(query), "SELECT * FROM conturi WHERE Nume = '%s'", GetName(playerid));// mysql format face interogarile/setarile/obtiunile/updateurile la baza de date     //handle reprezinta conectarea la mysql, query si sizeof(queri) reprezinta interogarea     //"SELECT * FROM conturi WHERE Nume = '%s'"- Selecteaza de la tabelul cu conturi, unde numele este %s(de exemplu eu am numele Widualk pe sa-mp. Mi se va extrage numele si     mysql_tquery(handle, query, "OnPlayerLogin", "i", playerid);// se va interoga OnPlayerLogin. Adica mai pe scurt , cand se conecteaza se va verifica daca are cont sau nu acel player.     return 1; }  
      Acum ca am terminat cu callback-urile de la conectare, vom crea dialogurile.
       
      public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {     new query[128], ip[25];// se creaza interogarea si ip.     switch(dialogid)// se va folosi switch pentru a selecta dialogul     {         case DIALOG_REGISTER:// daca se va selecta dialogul register         {             if(!response)                     return Kick(playerid);// daca se va apasa pe butonul Exit ii va da kick             if(response)// daca se apasa pe Butonul inregistrare se vor face urmatoarele verificari             {                 if(!strlen(inputtext))// daca nu e scris nimic la parola                         return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Introdu-ti o parola pentru a te inregistra pe server! n", "Inregistreaza", "Exit");// ii va da din nou dialogul register cu mesajul specific                 GetPlayerIp(playerid, ip, sizeof(ip));// definim ip-ul de mai sus                 mysql_format(handle, query, sizeof(query), "INSERT INTO conturi (Nume, Parola, IP) VALUES ('%s', '%e', '%s')", GetName(playerid), inputtext, ip);// se insereaza in tabelul cu conturi numele playerului, parola pe care a scris-o si ip pe care il are                 mysql_query(handle, query);// se va trimite setarile si se va interoga callback-ul OnRegistration                 SpawnPlayer(playerid); // ii da spawn             }             return 1;         }         case DIALOG_LOGIN:// daca se va selecta dialogul de login         {             if(!response) return Kick(playerid);// si se va apasa pe butonul exit ii va da kick             if(response)//daca se apasa pe butonul LOGARE se va face urmatoarele verificari             {                 if(!strlen(inputtext))// daca nu a scris nimic la parola                         return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Te rog sa iti introduci parola corecta, pentru a te loga pe server.", "Logare", "Exit");// ii va da dialogul cu login cu mesajul specific                 // daca se va trece peste aceasta verificare se vor face urmatoarele:                 mysql_format(handle, query, sizeof(query), "SELECT * FROM `conturi` WHERE `Nume`='%e' AND `Parola` = '%e'", GetName(playerid),inputtext);// va fi selectata parola de la tabelul cu conturi mysql_tquery(handle, query, "OnLogin", "i", playerid);// se va face apel la baza si se va interoga CallBackUl OnLogin (Tquery = take query sau ia interogare in romana)             }             return 1;         }     }     return 1; }  
      Acum , ca am facut dialogurile , vom crea calback-urile care se interogheaza la dialogurile de mai sus.
      Vom crea callback-ul pentrul dialogul de register.
       
      Acum , vom crea callback-ul la care apeleaza dialogul de login
       
      forward OnLogin(playerid);// definim callback ul public OnLogin(playerid)// facem publicul {     new rows, fields,temporar[200];// definim randurile si domeniile, iar temporar se va folosi la extragerea stringurilor     cache_get_data(rows, fields);// facem interogarea lor     if(rows)// daca playerul are randuri(adica daca are cont creat, odata cu contul se creeaza randurile)     {         //deci daca are randuri         cache_get_field_content(0, "Parola",temporar), format(P_Data[playerid][pParola], 25, temporar);// i se vaextrage parola si i se verifica daca coincide cu numele. Se foloseste new-ul temporar pentru extragerea parolei, ea retinandu-se temporar(pana cand se deconecteaza jucatorul)         P_Data[playerid][pID] = cache_get_field_content_int(0, "ID");// i se vaextrage ip-ul         //un exemplu ar fi , daca are Admin , va fi ceva de genu P_Data[playerid][pAdmin] = cache_get_field_content_int(0,"Admin)"; i se va extrage din baza de date levelul de admin si i se va returna pe server, mai precis, cand se conecteaza are levelul de admin , care i-a fost setat de owner         SpawnPlayer(playerid);// si se va da spawn     }     else// altfel , daca parola este gresita     {         ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Te rog sa iti introduci parola corecta, pentru a te loga pe server.", "Logare", "Exit");// ii va da dialogul cu mesajul specific.     }     return 1; } Iar la final punem la OnGameModeExit();
      public OnGameModeExit() {     mysql_close( handle ) ;// deconectam serverul de la baza de date, daca se inchide     return 1; } Acum , o sa recapitulam.
      Playerul are nevoie de ID, Nume, Parola si IP, deci 4 coloane in tabel.
      Tabelul se numeste "conturi", deoarece interogarea se face acolo "mysql_format(handle, query, sizeof(query), "SELECT * FROM conturi"-conturi este tabelul unde vor aparea ID ,Nume, Parola, IP
      Baza de date se numeste "bazadate" din: #define mysql_db "bazadate"
       
      O sa va arat acum cum se creaza tabelul.
      Pasul 1. Definim baza de date cu numele "basedate":

      Pasul 2: Se selecteaza noua baza:

      Pasul 3: Se creaza tabelul cu cele 4 coloane:

      Pasul 4: Se definesc coloanele , cu fiecare setare

      La tip    INT = intenger= numar de cifre.
                   Varchar = string = sir de caractere(litere)
      la Lungimea / setare se selecteaza cat spatiu se acorda, adica cate caractere incap maxim in acel tabel
       la id va fi maxim 9999999999(sun 10 cifre consecutive de "9", adica acel numar va fi maximul de playeri care pot avea cont)
       la nume, se va putea salva doar numele care contine doar 25 de caractere(adica daca numele depaseste 25 litere, doar primele 25 se vor salva)
      la interclasare la Varchar , mereu sa puneti latin1_sweadich_ci, de ce, asta nu pot spune nici eu , dar , stiu ca asa trebuie
      La ID tot timpul sa bifati casuta "A_I(auto Increment)" care va genera singur id-ul, altfel nu va merge tabelul conturi
       
      Asa ar trebui sa va arata , atunci cand va inregistrati:

       
      Atentie tutorial creat 100% de Widualk. Nerespectarea creditelor va duce la sanctiuni!
    • By BigZell
      mbunatatita protectia serverului, acum serverul nu mai are vulnerabilitati.
      -Acum nu poti seta mai mult de 50$ la intrarea in biz.
      -Acum suma maxima care poate fi setata la house rent este de 50$.
      -Acum cand te aresteaza politia si ai: ~ wanted 1 vei pierde 50$.
                                             ~ wanted 2 vei pierde 60$.
                                             ~ wanted 3 vei pierde 70$.
                                             ~ wanted 4 vei pierde 80$.
                                             ~ wanted 5 vei pierde 90$.
                                             ~ wanted 6 vei pierde 100$.
      -Acum poti pune maxim fare 15$.
      -Refacut timerul in care creste suma de bani incasata de taximetrist.
      -Acum la spawnarea masinii pe server nu vei mai pierde nici o suma de bani.
      -Acum politistii pot acorda amenzi pana in 100$.
      -Limita pentru comanda [/dice] este acum 100$.
      -Acum cand cumperi o parasuta iti va lua 50$.
      -Adaugat un nou job (Courier). (inca mai avem putin treaba la el)
      -Optimizat gm-ul, acum nu va mai fi lag pe server.
      -Trecute job-urile pe timere separate
      -Rezolvat un bug la comanda /paint (daca intrau 5 playeri pica serverul)
      -Adaugat sistem de raport automat la factiuni. (cel existent nu era functional)
      -Refacut sistemul de live.
      -Refacut sistemul de factiuni, acum se omptimizeaza mai bine.
      -Refacut timerul la job-ul fisherman.
      -Acum la job-ul fisherman nu mai ramai in animatie cand termini de pescuit.
      -Modificata economia job-ului fisherman.
      -modificata economia job-ului Car jacker
      -Modificata economia job-ului Trucker.
      -Modificata economia job-ului Mechanic.
      -aici scrii tot ceea ce faci tu
      -Am adaugat comanda /updates
      -Am rezolvat comanda /ban
      -Am rezolvat comanda /unban
      -Am rezolvat comanda /banip
      -Am rezolvat comanda /unbanip
      Tin sa precizez ca aceste comenzi erau buguite.
      Majoritatea buguri-lor au fost rezolvate.
      Au fost strese niste comenzi ascunse cum ar fii:
      Acestea sunt comenzile ascunse pe care eu le-am gasit.
      GameMode-ul va fii adus la o stare mai buna decat cea actuala.
      Am scos /bonuslevel pentru ca, cauza foarte mult lag.
      Am adaugat comanda /gmx o comanda pentru a da restart la server direct din joc.
      Aceasta comanda poate fii folosita de admini nivel 5+.
      Am adaugat comanda /getgift.
      Am adaugat comanda /giftbox cu care poti activa/dezactiva giftbox-ul.
      Am adaugat comanda /giftpremium cu care iti poti da puncte pentru gift.
      Am adaugat comanda /resetgift cu care poti reseta giftbox-ul.
      Toate aceste comenzi pot fii folosite doar de admini nivel 6+.
      Am adaugat un sistem pentru vip car.
      Am adaugat comanda /updaterestart
      Am adaugat comanda /afk pentru playeri care vor sa se puna afk fara sa ia kick
      Am adaugat comanda /back pentru a iesi din modul afk.
      In aces update am incput sa adaug un sistem vip
      Sunt comenzi vip cum ar fii.
      -/vip
      -/vips
      -/vipweels
      -/vipcolor
      Aceasta obtiune o pueteti cumpara din shop.
      Momentan sistem-ul vip este in teste.
      Am inceput si un sistem de Survival arena(Inca nu e terminat)
      Am inceput sa fac si un sistem de BackPack doar ca trebuie optimizat
      Am scos lag-ul de pe server cauzat de comenzile si sistemele adaugate noi
      Adaugat level progres bar.
      Refacuta comanda /admins.
      -Adaugate grade name la fiecare adminm level in parte.
      -Acum vor aparea si adminii level 6+ in lista /admins.
      Refacuta comanda /helpers.
      -Adaugate name grade la helperi.
      -Acum sunt 2 grade de helper pe server, inainte erau 3.
      Refacuta economia pentru job-ul Garbage Man.
      Adaugat sistem de personal drone.
      -/help -Drone pentru a vedea comenzile
      -/shop Drone pentru a o cumpara, este nevoie de 100 pp (o sa fac sa se salveze in baza de date cand o punem ca acum u are rost.)
      Scoasa factiunea paramedic lv
      Adaugata factiunea paramedic ls
      Comanda /factions este acum pe baza unui stock.
      modificat stockul de la chat-ul factiunilor
      Am schimbat culoarea de la level bar.
      Inceput un nou sistem de payday (va fi gata curand).
      Adaugata comanda /kickall pentru administratorii level 7+.
      Adaugata comanda /skick pentru administratorii level 1+.
      Adaugata comanda /helperwarn pentru adminstratorii level 5+.
      Adaugata comanda /adminwarn pentru administratorii level 7+.
      Modificata comanda /a.
         -Acum apare si admin name-ul pe care il are nivelul de administrator respectiv.
         -Acum sunt 8 grade care apar in /a.
      Modificat aspectul comenzii /shop.
      Optimizat gm-ul, trecute functiile pe stock-uri si timere diferite.
      Refacuta comanda /serverpassword, astfel acum cand dai /serverpassword 0 se scoate parola de la server.
      Acum la comanda /contract se poate pune minim 100 si maxim 900$, iar pe politisti 1000$.
      Scos sistemul de /duty la factiunea paramedic.
      Adaugata comanda /re ca o scurtatura a comenzii /reply.
      Rezolvat un bug vizual la comanda /members.
      Inceput un sistem de daily quest
      Rezolvat bug-ul de la comanda /gps -los santos
      Adaugat DMV in /gps
      Rezolvat bug-ul care iti scria pizza livrata cand intrai in CP
      Scos job-ul pizza boy.
      Scos job-ul busdriver.
      Adaugat job-ul courier.
      Acum cand iei CP de la DMC nu mai zice ca ai livrat coletul.
      Rezolvat bug-ul la /jobs-localiza job-urile gresit.
      Rezolvat bug-ul la job-ul garbage, nu primesai banii la intrarea in cp.
      Adaugat job-ul air transporter.
      Trecut job-ul air transporter pe /work.
      Acum cand nu esti la locatie  si dai /work, serverul iti va seta automat cp.
      Acum la job-ul Air Tranporter poti duce maxim 3 coleta pe fiecare tura.
      Refacuta comanda /ah, acum este pe grade.
      Refacuta comanda /vre, acum o poti folosi cand esti in masina fara sa scrii si id.
      Adaugata comanda /vreid prin care poti respawna o masina dupa id.
      Rezolvat bugul de la comanda /rac.
      Adaugata comanda /slapcar
      Adaugata comanda /givepp
      A fost rescrisa comanda [/ah]
          A fost inbunatatit anti-cheatul
          S-a adaugat un nou sistem de helperi
          Acum te poti opri din comanda /flymode sau /spec din tasta ALT ]
          Rezolvate toate bugurile raportate
          Inbunatatita performanta serverului
          Adaugat sistem de ninsoare
          Adaugat un sistem de Personal Drone, acesta se poate achizitiona din /shop cu 100pp.
          S-au imbunatatit comenzile la helperi.
          S-au adaugat inca 10 case noi in Los Santos.
          Inbunatatita comanda [/spawncar]
          S-a rezolvat un mic bug la /fvr.
          Acum la achizitionarea unui cont premium vei primi 30 de puncte premium inapoi
          S-au mai adaugat 3 case in LS
          De acum nu se vor mai putea pune contracte pe Admini & Helper lv 3
          S-a rezolvat bugul de la [/fil].
          Protectie la speed hack imbunatatita.
          De acum nu se va mai putea face DM la spawn.
          Protectie la troll car hack imbunatatita.
          Adaugate niste comenzi de admini
          Timerul de la chat-ul newbie a fost modificat
          Comanda [/factions] a fost modificata, acum poti vedea starea aplicatiilor, liderii, si numarul de membri
          Acum nu mai poti cumpara masini daca nu ai sloturi libere( in unele cazuri se puteau cumpara)
          Acum playeri nu vor mai putea sa dea /find pe un hitman undercover.
          Am intarit securitatea la admini (daca faci reclama, injuri pe /anno, /o primesti remove)
          Imbunatatit anti-cheatul pentru vehicle teleport
          Adaugat sistem de radar pentru departamente
          Implementat un sistem prin care un administrator 7+ poate adauga atm-uri pe server
          De acum nu se vor mai putea pune contracte pe Admini & Helper lv 3
          S-a rezolvat bugul de la [/fil].
          Adaugate niste comenzi de admini
           Jo-bul Trcuker a fost rescris,s-au adaugat si alte locatii, apare distannta pana la CP si detalii despre job in josul ecranului.
            Adaugat job-ul Courier
             Adaugat Job-ul Air Transporter.
          Scoasa factiunea Paramedic LV
          Adaugata factiunea paramedic LS.
          Refacuta economia job-ului trucker.
          Refacuta economia job-ului Courier
          Refacuta economia job-ului Air Transporter
          Acum se poate pune maxim /fare 20$.
          Refacut timerul in care creste suma de bani incasata de taximetrist.
          Trecute job-urile pe timere separate pentru optimizare
          Acum la job-ul fisherman nu mai ramai in animatie cand termini de pescuit.
          Refacut timerul la job-ul fisherman.
          Refacut sistemul de factiuni, acum se omptimizeaza mai bine.
          Refacut sistemul de live.
          Adaugat level progres bar.
          Refacuta comanda /ah, acum este pe grade.
          Refacuta comanda /vre, acum o poti folosi cand esti in masina fara sa scrii si id.
          Adaugata comanda /vreid prin care poti respawna o masina dupa id.
          Rezolvat bugul de la comanda /rac.
          Adaugata comanda /slapcar
          Adaugata comanda /givepp
          Trecut job-ul Courier pe /work
          Trecut job-ul Air Transporter pe /work
          Trecut job-ul Trucker pe /work.
          Scos sistemul de /duty la factiunea paramedic.
          Refacuta comanda /serverpassword, astfel acum cand dai /serverpassword 0 se scoate parola de la server.
          Modificat aspectul comenzii /shop.
          Optimizat gm-ul, trecute functiile pe stock-uri si timere diferite.
      Credite:MrRedBul Jizzblack
      Link:http://www119.zippyshare.com/v/gU85luqp/file.html
      PS:GM NU ESTE FACUT/EDITAT DE MIN EU DOAR AM PUS UN LINK FARA VIRUSII.
      +!
    • By Emanuel
      D:\Server\Gaemode 0\gamemodes\GMMINCEPUT.pwn(73) : error 017: undefined symbol "pSQLID"
      D:\Server\Gaemode 0\gamemodes\GMMINCEPUT.pwn(74) : error 017: undefined symbol "pSQLID"
      Acesta sunt erorile care mile ofera.
      Va rog ajutor
       
    • By Liviu Adrian
      Salut, am facut ca in tutorial lui 
       nu am avut nicio eroare, am rezolvat erorile sau warning-urile care erau legat ca uitasem ; sa dau o acolada sau etc. Cand intru pe server din localhost, nu apare nimic, doar sa dau spawn. Mai ziceau unii sa fac update la include, dar nu inteleg ce si cum. Daca ma puteti ajuta pls.
      EDIT: Dupaia cand las sscanf2 in gamemode si la plugins in server.cfg apare asta pe samp-server    
         Error: Function not registered: 'SSCANF_Init'
         Error: Function not registered: 'SSCANF_IsConnected'
         Error: Function not registered: 'SSCANF_Join'
         Error: Function not registered: 'SSCANF_Leave'
      Conexiunea la baza de date gamemode a esuat ---> Server Inchis ~~~
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.