Search the Community

Showing results for tags 'mt2 fr web'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Register & Login
    • Register
    • Login
  • Espace Communautaire
    • Funky Emulation
    • Présentations
    • Services
    • Discussions Générales
    • Bureau de la Communauté
    • Espace Premium
  • Emulation & Co
    • Rewrite a Release / Tutorial
    • Suggest a Release / Tutorial
    • The Ideas Box
  • Emulation de jeux
    • RaiderZ
    • Aura Kingdom
    • Metin2
    • Dofus
    • World of Warcraft
    • Minecraft
    • Aion
    • Habbo
    • Voir plus...
  • Espace Divers
  • Internationnal Forum
  • PassionDev's Forum
  • M2Project - Metin2's M2SF
  • M2Project - Metin2's Aide / Questions / Support
  • M2Project - Metin2's Tutoriels & Partages
  • M2Project - Metin2's Suggestions
  • M2Project - Metin2's Report de Bugs

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Nationality


Sexe


Discord


Skype


Biographie


Site


Nombre

 
or  

Found 11 results

  1. Bonjour, Vous allez ici apprendre à installer un système de news complet pour MT2-CMS. 1. Les fonctionnalités 2. Installation Vous pouvez copier/coller ce tutoriel mais vous avez l'obligation de citer l'auteur de manière visible.
  2. Bonsoir, Dans ce tutoriel, vous apprendrez comment installer une page de vote rémunéré sur votre site MT2-CMS. Certains fichiers sont déjà présents sur le forum mais ils sont incomplets et en manque de certaines fonctionnalités intéressantes. Je prends pour base le CMS de Jigsaw (il est donc fait pour être utilisé avec ce dernier). Fonctionnalités: Tutoriel: Merci de ne pas copier ce tutoriel sans mon autorisation. Tous les codes ont été rédigés par moi même. Ils ne sont pas parfaitement optimisés mais fonctionnels et pratiques. Attention ! Je n'ai pas pu tester entièrement le tutoriel ! Si vous constatez des problèmes, merci de me le faire savoir pour que le les corrige au plus rapidement ! Cordialement
  3. Bonjour all, Aujourd'hui je vous propose un tutoriel pour rajouter un top classement sur votre MT2-CMS. Ce tutoriel est très simple si vous suivez bien toutes les étapes que je vous indique. Première partie : Top joueurs I - Les fichiers à modifier Comme vous vous en doutez, il y a des fichiers à modifier. Commencez par ouvrir index.php et rajoutez ce script : // Classement // $i = 0; $requette = ("SELECT name,level FROM player.player WHERE name NOT IN(SELECT mName FROM common.gmlist) ORDER BY level DESC, exp DESC LIMIT 0,10"); $sql = mysql_query($requette) or die(mysql_error()); while(($data = mysql_fetch_array($sql))) { $i++; $tpl->assign_array('top5', array( 'name' => $data['name'], 'lvl' => $data['level'], 'i' => $i )); } Ce bout de code sert à choisir le nombre de joueurs à afficher : exp DESC LIMIT 0,10"); Vous remplacez 0,10 par 0,5 si vous voulez qu'il y ait 5 joueurs d'affiché. Maintenant il faut aller dans templates/default/fr/includes/ et vous ouvrez sidebar.tpl Si vous avez toujours la publicité, vous rajoutez ce bout de code en dessous. Si vous ne l'avez plus, il suffit de rajouter le script en bas : Top classement #Joueurlvl{top[i]}{top[name]}{top[lvl]} Deuxième partie : Top guilde Vous devez suivre le même tutoriel, mais avec ces script la : Dans l'index.php : // Classement ( GUILDE) // $i = 0; $requette = ("SELECT name,level,sp FROM player.guild WHERE name NOT IN(SELECT mName FROM common.gmlist) ORDER BY level DESC, exp DESC LIMIT 0,10"); $sql = mysql_query($requette) or die(mysql_error()); while(($data = mysql_fetch_array($sql))) { $i++; $tpl->assign_array('top5g', array( 'name' => $data['name'], 'lvl' => $data['level'], 'pts' => $data['sp'], 'i' => $i )); } et dans templates/default/fr/sidebar.tpl : Top classement guilde #GuildelvlPoints{top[i]}{top[name]}{top[lvl]}{top[pts]} Cordialement, Awesome PS : Contactez-moi sur skype si vous avez des problèmes pour l'installer : awesome.fr Source : Cms de roxas
  4. Salut ! Comme les tutoriels de @Takuma on été (si j'ai compris) totalement détruit par le changement de moteur forum, je vais essayer de reprendre ses tutoriels avec plus de détails, et en publiant du contenue régulièrement. J'espère faire au moins aussi bien qu'il l'a fait. Voilà pourquoi j'ai repris son nom de poste, et que je vais partir sur la même branche que lui. Introduction : Vous voulez apprendre à créer votre CMS metin2 ? Mais vous ne vous pensez pas capable d'apprendre tant de langage de programmation ? Pas d'inquiétude. Je vais vous guider pas à pas (dans l'élimination des pages de publicité... Ah non désolé ça c'est une pub !) pour vous familiariser avec l'HTML et le CSS. Je vous donnerais également quelques astuces en JavaScript, chose que il me semble @Takuma n'avait pas fait. Puis dans le même temps, nous allons parler de PHP, et même l'utiliser. HTML : L'HTML est un langage de balisage. Il permet de donner une structure à votre code. Tout seul, il ne rend rien de beau. la mise en page s'effectue avec un autre langage. CSS : Nous parlions de mise en page ? La voici. Le CSS est un lagage de style, il permet de mettre en page votre site web. Vous pouvez déjà commencer rien qu'avec ses connaissances basiques à créer un site web. Cependant, il sera nommé site statique. Pour la simple raison que aucune interaction ne sera possible avec votre site. Ces deux langages permettent une création de page de présentation par exemple. Impossible de faire un espace membre digne de ce nom ou autre. JavaScript/JS : C'est un langage de script. Il permet de faire des pages webs interactives. Malheureusement, nous ne pouvons nous contenter de celui-ci. Il est accessible au client, c'est à dire qu'il peut le modifier, et faire ce qu'il veut de son côté. PHP : Le PHP ! Mon petit chouchou. Le PHP lui, par rapport aux trois aux langages ci-dessus, est exclusivement interprété par le serveur, le client ne recevra jamais aucune ligne de PHP. Votre PHP est traduit dans les trois langages ci-dessus avant d'être envoyer au client. Cela vous permet des opérations sécurisées et efficaces. Ne négligez cependant pas la sécurité de votre site web, elle est primordiale. PHP est très pratique, mais s'il n'est pas maîtrisé, en mettre sur votre site peut-être comme vous tirez une balle dans le pied. Notre site web, se devra d'être complet. Comme je n'ai pas le temps de créer à la main un design, je ne l'évoquerai pas. Vous pouvez cependant utiliser vous des designs déjà partagés. Ou même créer le votre, vous trouvez tout ce dont vous avez besoin sur internet en vous renseignant sur l'HTML et le CSS. Avant de vous dire ce que contiendra notre site web, je dois vous parler de la canon, la belle, la jolie, la sacrée, la légendaire, la divine et céleste documentation PHP ! Elle est complète, claire, disponible en français, courte et efficace. Ce sera pour mes tutoriels votre bible. Oubliez vos religions elle, vous prierez elle, et seulement elle. Bien ! Que va contenir notre futur site web alors ? Un système de news, vous pourrez les gérer entièrement sans aucune manipulation technique grâce à son panneau d'administration qui vous permettra : Ajouter une news, Supprimer une news, Modifier une news, Épingler des news afin qu'elles soient visibles en priorité par rapport aux autres. Un espace membre complet : Inscriptions : Nom de compte, Mot de passe crypté Mot de passe clair si l'utilisateur le désire en cas de perte de mot de passe pour ne pas avoir à remettre à 0 son mot de passe : Panneau de prévention en quoi cette option est déconseillée. Mail valide. Acceptation des règles. Connexion, Gestion du compte : Suppression du compte, Modification du mot de passe, Gestion du mot de passe entrepôt si celui-ci est ouvert IG (activé), Changer son adresse mail. Inscription avec validation par mail. Un système de vote : Vérification du vote : Si le joueur a bien voté Si le temps entre les vote est respecté Accréditation des crédits si le vote est validé. Classements : Classement joueurs complet : Top 10 en page d'accueil, Classement habituel avec les pages. Classement de guilde complet : Top 10 en page d'accueil en fonction du niveau et des victoires. Classement habituel avec les pages. Option permettant de trier le classement par ordre décroissant/croissant. Option permettant de chosire le facteur pris en compte pour la classement : Niveau Nom (A->Z ou inversement) Nom du chef (A->Z ou inversement) Energie etc... Un ItemShop complet et opérationnel : Gestion des catégories : Ajout, Suppression, Modifications (ordre, nom, etc...). Gestion des items : Ajout, Suppression, Modifications (ordre, prix, nom, etc..). Les icons seront placés automatiquement grâce au pack icon qui sera uplodad dans une destination bien spéciale. Système de langue : Un fichier spécifique par langue, Modifiable sur le site, Choix pour chaque personne la langue désirée qui sera stockée grâce à un système de cookies s'ils sont acceptés par le client. Système de support : Comptes : Super-Administrateur (compte d'ID 1) : Ajout de Super Administrateur, Suppression, Tous les droits. Administrateurs (Implementor) : Toute la modérations et l'administration nécessaire. Modérateur (GM) : Toute la modération permettant de répondre au sujet sans avoir tous les droits d'un administrateur. Système d'installation : Configuration générale du site : Nom, Date, Copyrtight, etc... Configuration des base de données : Base de données du site : Nom de la base de données. Base de données du jeu : Nom des bases de données : Player, Account, Common. Adresse IP, Utilisateur, Mot de passe, Port, Administration : Configuration générale du site, Gestion des GM, Configuration des langues Gestion du jeu. J'oublie beaucoup de paramètre. Mais quand nous aurons déjà fait tout ça, nous aurons déjà travailler un petit bout de temps ! Vous êtes prêts ? Démarrage du tutoriel... Les pré-requis: Pour suivre ce tutoriel, vous n'aurez pas besoin de beaucoup de chose, mais elles seront toutes obligatoires. Un éditeur de texte adapté. Je ne compte pas vous faire un cours sur l'édition du code avec un bloc note, foncez prendre un éditeur adapté tel que : Sublime texte NotePad++ Atome DreamWeaver Un serveur WEB : Distant : Hebergement mutualisé VPS, dédié avec Apache Locale : EasyPHP, WAMP, XAMP. Des bases de données : Player Common Account Website Si vous avez besoin d'aide pour ceci, je vous aiderais en pv. Où non demandez à @Takuma ça l'occupera, d'après ce qu'il m'a dit il n'a rien à faire de ces vacances d'étudiant. Fainéant. L'arborescence : Mon arborescence est beaucoup utilisée, mais est des fois assez bizarre. Je vais m'adapter à une arborescence plus connu, cela donne : assets css js img pages db.php functions.php admin capatcha index.php Nous ajouterons plus tard des dossiers comme celui de l'installateur par exemple, mais celui-ci se fera à la fin. En attendant pour conclure cette première partie au même point que @Takuma l'avait fait, je vais vous faire créer une connexion PDO. La connexion à la base de données principale : Bien, pour ceci, nous allons nous rendre dans notre fichier index.php : Nous allons tout d'abord dire au site : "Je veux écrire du PHP", pour cela il n'existe qu'un moyen (enfin deux... mais utilisez celui là) : <?php //J'écris ici mon code PHP ?> Notez que tout le contenue précédé de // dans sa ligne est nommé commentaire. C'est à dire qu'il ne sera pas interprété par PHP, vous pouvez mette ce que vous voulez. Ce code ne sera pas visible pas le client non plus. Ici, à la différence de @Takuma Je vais directement inclure mon fichier nommé functions.php dans mon index. Ce fichier va contenir toutes les fonctions PHP, mais aussi la connexion à la base de données, vous verrez. <?php require_once('assets/functions.php'); ?> Il existe trois façon d'inclure du code d'un fichier dans un autre : require_once include require Ces méthodes ont toutes les trois le même but, mais elles ont des subtilités : include : Vous pouvez importez autant de fois que vous voulez le fichier. Si le fichier n'est pas trouvé le code ne s'arrête pas, et continue quand même. require : Vous pouvez inclure autant de fois que nécessaire le fichier dans un autre. Cependant, si une seule fois le fichier n'est pas trouvé, le code s'arrête net, puis affiche une erreur. require_once : Vous pouvez inclure seulement une seule fois un fichier dans un autre, et celui-ci doit obligatoirement être là, sinon erreur et arrêt immédiat du code. Bien, une fois ceci tapez, ouvrons notre fichier functions.php (assets/functions.php), puis tapez : <?php require('db.php'); ?> Ici, nous donnons cette instruction au fichier : Tu importes le fichier db.php qui se trouve dans la même destination que toi, si tu ne le trouves pas, tu coupes tout Franky ! Pourquoi ne pas avoir faire un require_once ? Vous comprendrez plus tard, nous allons importer souvent ce fichier. Passons pour finir à l'édition de notre fichier db.php : Nous allons créer quatre variables : IP : Elle contiendra l'adresse d'accès à nos base de données USER : Elle contiendra l'utilisateur PASS : Elle contiendra le mot de passe WEBDBNAME : Elle contiendra le nom de la base de données du site. Nous allons comme @Takuma créer une variable (un peu spécial) qui va contenir notre connexion PDO. Créons déjà nos variables, en PHP pour créer une variable nous utilisons : $ puis le nom de la variable (ne doit pas commencer par _ car c'est le prefix des super variables, nous verrons ça plus tard). Cela donne : <?php $IP = "192.168.1.29"; $USER = "root"; $PASS = "pF5tfiUH3f7KDyT49rQu52Hu88"; $WEBDBNAME = "website" ; ?> Adaptez selon vos identifiants. Nous allons par contre rajouter un petit code qui vous nous permettre d'afficher absolument tous les warnings/errors possibles et imaginables dès qu'il y en aura en ajoutant ces deux lignes avant la déclaration de notre variable IP : <?php ini_set('display-errors', true); error_reporting(E_ALL); ?> (Je n'ajoute les balises PHP que pour que vous puissiez profiter de la coloration syntaxique). Bien créons maintenant notre connexion dans un bloc try cela donne en théorie : Essaye de : Te connecter Si cela echoue : Tu coupes le code Tu affiches l'erreur Bien, je vous donne le code, vous ne pouvez pas le devinez de toute façon, en tout cela donne : <?php ini_set('display-errors', true); error_reporting(E_ALL); $IP = "192.168.1.29"; $USER = "root"; $PASS = "pF5tfiUH3f7KDyT49rQu52Hu88"; $WEBDBNAME = "website" ; try { $db = new PDO('mysql:host='.$IP.';dbname='.$WEBDBNAME, $USER, $PASS,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); } catch (PDOException $e) { print "DATABASE ERROR : " . $e->getMessage() . "<br/>"; die; } ?> Et voilà, vous avez crée votre variable $db qui contient les informations nécessaires à l'utilisation complète de PDO. J'espère avoir été claire, désolé j'ai pas vraiment l'habitude de faire des tutoriels. D'habitude je reste un peu inactive, en ninja sur les autres forums. Bonne lecture !
  5. Salut ! Avant de suivre cette partie, je vous invite à lire la précédente : Je vais ici essayer de vous faire découvrir HTML, CSS, JS et PHP. Voici les différents objectives de cette partie : Découvrir les éléments basiques de l'HTML tels que : La doctype Différents balises : Les principales balises telles que le p,h1,ul,td... Les principales balises orphelines telles que le hr, br... Les formulaires qui seront très utiles pour la suite, Les tableaux, Les liaisons : CSS, JS. PHP : Découverte de PDO : Créer sa requête : Préparation, Insertion de données, Exécution, Traiter les données : Nombre de ligne affectée, Colonne affectée, Ligne des colonnes affectées. Divers. Nous avons un emploi du temps assez chargé, nous ferions mieux de nous y mettre maintenant ! HTML: HTML est un langage de balisage. Il dispose de balise. Je vous propose une petite liste, qui résume les principales balises. @ASIKOO Il faudrait un système pour faire des cartes mentales ! ! (Je sais pas si c'est toi que je devais taguer, mais tu m'as l'air d'être le seul actif...). Sauf si je précise que les balises sont orphelines, elles devront être ouvertes puis fermées. Utilisez pour les fermer la même balise que pour les ouvrir, mais ajoutez un "/" exemple : <p>Message</p> Des balises assez spéciales : <!DOCTYPE html> Elle au dessus de tout votre code HTML. Elle est obligatoire, même si le code marche sans, pas de question, c'est obligatoire. Balise orpheline. <head>.. </head> Se place après la balise de doctype. Elle contient les informations complémentaires de la pages telles que : Le titre, Les mots clés, Les importations de : CSS, JS. Toutes les méta-informations. <body> .. </body> Se place après la balise de fermeture </head> Contient littéralement le corps de la page. C'est tout ce qui sera affiché au client. Les balises principales : Texte brut : <p> : Permet de rédiger un paragraphe. <h1>,<h2>... <h6> Permet d'écrire un titre plus ou moins important. L'évolution de l'importance est décroissante par rapport à la valeur associée à h. Les tableaux, un tableau ce compose de ces balises : <table> : Désigne le début et la fin du tableau, <tr> : Désigne une ligne du tableau, <td> : Désigne une cellule du tableau. On va donc créer un tableau comme ceci : <table> --> On crée le tableau <tr> --> On crée une nouvelle ligne <td>.. </td> --> On crée les colonnes en désignant les cellules </tr> --> On marque la fin de la ligne <tr> --> On crée une nouvelle ligne <td>.. </td> --> On crée les colonnes en désignant les cellules </tr> --> On marque la fin de la ligne </table> --> On marque la fin du tableau Il existe aussi (mais nous en reparlerons si nécessaire) : <thead> <tfoot> <tbody> Liste dite ordonnée : <ol> <li> élément </li> </ol> Liste dite non ordonnée : <ul> <li> élément </li> </ul> Je n'ai pas d'autre balise en tête dans l'instant présent. Si une balise que l'on va utiliser n'est pas présente dans ce petit regroupement, je vous l'expliquerais le moment venu. Je vais maintenant vous parlez des liaisons. Si vous ne le savez pas encore l'html, le css, et le javascript ne se mettent pas dans le même fichier pour des raisons évidentes de : Propretés, Efficacités Facilités. Il y a deux types de lignes différents qui se mettent tous les deux dans l'entête (head) du fichier html : <link href="assets/css/style.css" rel="stylesheet"> Ici, nous importons, créons un lien entre les deux fichiers. Notez que la seule valeur à changer est celle du href="" (Qui désigne une destination) vers la destination du fichier voulu. <script src="assets/js/modernizr.js"></script> Cette balise est assez bizarre je sais. Vous n'avez qu'à changer la destination nécessaire dans la valeur de l'attribue src. Je vous propose d'entamer maintenant PHP, PDO : PHP --> PDO: Bien, je vous rappelle que nous avons déjà crée notre connexion PDO stockée dans la variable db. Je vous propose pour commencer de déjà vous apprendre à créer une fonction en php. Une fonction vous permet d'effectuer un protocole plus ou moins long sans devoir le retaper entièrement. C'est le même principe que les fonctions en mathématiques, sauf qu'ici, nous ne faisons pas qu'ajouter des nombres, multiplier, etc... La structure d'une fonction est assez simple : <?php function GetUserIP(){ } ?> Ici, nous avons crée notre fonction nommée GetuserIP. Si votre fonction prends en compte des paramètres, (comme un x en mathématiques par exemple), vous les ajouterez entre les parenthèses, sous forme de variable, et séparés par des virgules. Ici, je vous montre une fonction assez technique, ça va peut-être, être même la fonction la plus compliquée que nous allons faire avec ce CMS. Car clairement... Il n'y a rien de compliqué sur un CMS Metin2. Bien, avant de commencer à écrire notre code, il sera préférable de savoir exactement ce que va faire la fonction. Pour des raisons de sécurités, nous allons vérifier que l'utilisateur dispose bien d'une IP valide, et que le serveur peut "capter". On ne sera pas à l'abri des VPNs, mais c'est déjà mieux que rien. Nous allons définir pour commencer trois variables qui contiendront : client L'ip de la personne enregistrée si possible forward L'ip malgré un proxy remote L'ip du client qui demande la page courante Pour cela nous allons utiliser une super variable. Si vous avez lu l'autre tutoriel, vous savez que les supers variables commencent toutes pas : $_ ici, nous allons utiliser la super variable server, donc : $_SERVEUR. Pour client et forward, nous allons mettre un arobase devant le dollars. Pour un soucis de type, je m'attarde pas là dessus, nous ne l'utiliserons plus de toute façon... Vous ne pouvez pas deviner le code, sauf si vous chercher des heures sur la doc, cela donne : <?php $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; ?> Bien, nous allons maintenant vérifier si au moins client ou forward à le format d'une IP, sinon, nous utiliserons remote. Nous allons pour ça faire un bloc de condition facilement représentable grâce à ce schéma : On définie la variable client On définie la variable forward On définie la variable remote Si client ressemble à une IP valide, si oui : On assimile sa valeur à une autre variable nommée IP Si client n'a pas l'air d'être une IP valide : On vérifie si forwad là, si oui : On assimile sa valeur à une autre variable nommée IP Sinon : On assimile la valeur de remote à la variable nommée IP. Pour vérifier son format, on va utiliser une filtre, pas d'expression régulière c'est démodée. Vous ne pouvez pas le deviner, cela donne : <?php $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)){ $ip = $client; }elseif(filter_var($forward, FILTER_VALIDATE_IP)){ $ip = $forward; }else{ $ip = $remote; } ?> On utilise donc les outils if --> Il veut dire "Si", soit : Si ce que je te dis dans la parenthèse est vrai (=true) alors : Il fait ce qu'il y a entre les accolades. Si la condition est respectée, on sort de la boucle. elseif marche comme le if à une différence près : Il ne peut être placé qu'après un if Ne s'exécutera que si le if n'est pas respecté Si la condition est respectée, on sort de la boucle. else --> Si aucune des conditions n'est respectées, le code fait ce qui se trouve dans le else. Sachez que additionner des if à la suite, et mettre des elseif n'a pas le même effet. Si vous enchainez des if, le code va tous les essayer un par un. Si vous mettez des elseif, il va tous les vérifier dans l'ordre, mais dès qu'il aura trouvé une solution, il ne va plus suivre les autres elseif de ce bloc. Il ne nous reste plus qu'une chose à faire : Vérifier si la variable IP est définie Si non : On sort de la condition en affichant une erreur Si oui : On retourne l'IP en sortit de variable Je vous montre une autre façon de faire un if (pas de panique, il n'en n'existe que deux) je vous explique après, notre fonction donne : <?php function GetUserIp(){ $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = $_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)){ $ip = $client; }elseif(filter_var($forward, FILTER_VALIDATE_IP)){ $ip = $forward; }else{ $ip = $remote; } if(!isset($ip)) exit("ERREUR"); return $ip; } ?> Quelques petites précisions : La méthode exit permet de retourner une erreur et d'arrêter le script actuel, il va bloquer l'utilisateur. La méthode return permet de sortir de la fonction en retournant une valeur, ici l'ip. La méthode isset() permet de vérifier si une valeur est définie ou non. Ajouter un ! devant des méthodes telles que isset inverse leur fonctionnement. En quelque sorte nous faisons ici : Si l'ip n'est pas définie : Tu dégages le mec avec un bon coup de pied au cul Sinon, tu le laisse passer ! Et voilà vous avez fait votre première fonction ! Et pas des plus facile en plus. S'il y a du code que vous ne comprenez pas. La divine bible est là pour vous. Bien, allons enfin au vif du sujet : PDO. Pour envoyer une query au serveur, nous allons : Stocker notre requête dans une variable Lui attribuer des paramètres si nécessaires Exécuter la requête. Pour cela nous allons stocker notre requête dans une variable en utilisant un facteur d'affectation. Nous allons pour ça nous servir de la variable DB de la dernière fois. Si vous utilisez la variable $db dans une fonction, il faudrait que vous refassiez un include dans cette même fonction. Bien, on va préparer une query, on va utiliser : db->prepare(query); On va assigner ça à la variable $Akihira par exemple, tapons : <?php $Akihira = $db->prepare(); ?> Bien, nous allons taper une query au hasard, par exemple une assez simple : <?php $Akihira = $db->prepare("SELECT * FROM account.account"); ?> Bien, ici pas besoin d'attribuer des paramètres, vous pouvez exécuter votre fonction comme ceci : <?php $Akihira = $db->prepare("SELECT * FROM account.accoun"); $Akihira->execute(); ?> Maintenant, nous avons trois façon de récupérer des informations sur ce que nous avons fait : Savoir combien de ligne ont été affectée, ici cela nous renvoie le nombre de compte crée en réalité? rowCount(); Sélectionner les lignes affectées avec les colonnes indiqués fetch(); Sélectionner toutes les les colonnes de toutes les lignes affectées. fetchAll(); Bien, pour le rowCount(); c'est le plus simple, tapez : <?php $Akihira = $db->prepare("SELECT * FROM account.accoun"); $Akihira->execute(); $Akihira = $Akihira->rowCount(); ?> Ici, comme nous avons tout sélectionner ("*"), au niveau où vous êtes pour l'instant, il n'y a pas de différence, mais ne vous habituez pas à ça, il y en aura bientôt ! Pour le fetch, il va vous créer un tableau, il va falloir utiliser une méthode spécial pour obtenir les résultats. Mais on va voir ça dans un prochaine tutoriel où je vous parlerais plus en détails des tableaux, et on verra aussi la boucle foreach je pense pour pouvoir parler plus en détail du fetchAll. En attendant je vous dis merci d'avoir lu, et référé vous à la doc en attendant Salut !
  6. Bonjour à tous, Aujourd'hui on va apprendre à installer un reCaptcha sur son site CMS de JigSaw. reCaptcha c'est quoi ? C'est un système mis au point par Google qui permet d'empêcher des chieurs de l'informatique de vous faire pulluler des millions de comptes par minute dans votre base de données à l'aide d'un programme. Comment faire ? Google reCaptcha <= Vous serez bien guidé par google pour créer votre compte et créer un site Ouvrez votre site cms de JigSaw et rendez-vous dans le dossier ./templates/default/fr/includes/ et ouvrez header.tpl avec Notepad++ Ouvrez ./templates/default/fr/public/inscription.tpl avec Notepad++ (Dans le menu language, vous pouvez sélectionner HTML) Ouvrez à présent ./include-public/inscription.php et après $mail=mysql_real_escape_string($_POST['mail']); ajoutez (remplacez XXXXXXXXXXXXX par votre clé secrète reCaptcha Puis, après if (strlen(trim($mdp)) > 4 && strlen(trim($mdp)) < 17) { ajoutez if ($decode['success'] == true) { Après else { $errors =5; }//5: Ce pseudo est déjà utilisé. Ajoutez }else { $errors =6; }//6: Mauvaise réponse au reCaptcha Enregistrez et normalement, tout fonctionne parfaitement ! J'espère que cela va vous aider pour débuter dans l'émulation, Cordialement,
  7. Bonjour à toutes et à tous, I. Présentation J'ai créé un script de parrainage. Il permet aux joueurs d'inscrire un parrain lors de leur inscription et quand un joueur ayant un parrain rechargera son compte en MD, le parrain recevra la moitié des MD qu'aura reçu le filleul. Mon script bloque l'ajout de MD pour le parrain au premier rechargement mais cela est modifiable.Dans l'exemple ci-dessous je suis le filleul, et Lambda mon parrain. II. Mise en place II.1. Navicat: Tout d'abord il vous faudra exécuter ces queries dans Navicat : ALTER TABLE account.account ADD `parrain` VARCHAR(30) NULL AFTER `rang`; ALTER TABLE account.account ADD `first_buy` INT(1) DEFAULT 0 AFTER `parrain`; II.2. Inscription: inscription.tpl : inscription.php : II.3. Rechargement: payement.php : III. Personnalisation III.1. Retirer la limitation du premier rechargement : Vous pouvez choisir si le script ajoutera des monnaies dès le premier rechargement ou pas, pour ce faire il faudra ouvrir le fichier payement.php et enlever ceci : and $first_buy == "0" Ce qui donnera : if($nom_parrain != "") { mysql_query("UPDATE account.account SET first_buy = '1' WHERE `id`='$id_membre'"); mysql_query("UPDATE account.account SET cash = cash + '$cash_parrain' WHERE `login`='$nom_parrain'"); } Cela aura donc pour effet de donner la moitié de ce qu'achète un filleul à son parrain en permanence et non pas uniquement lors du premier rechargement de compte. III.2. Modifier le gain du parrain : Toujours dans le fichier payement.php vous pouvez choisir combien gagnera le parrain, je l'ai mis sur la moitié du gain du filleul mais c'est modifiable en changeant la valeur de cette variable : $cash_parrain Si vous voulez lui donner autant que le filleul il suffira de mettre : $cash_parrain=$cash; Si vous voulez lui faire gagner que 3 MD il suffira de mettre : $cash_parrain=3; Et ainsi de suite, la valeur vous est libre. III.3. Consulter son parrain, ses filleuls et s'ils ont effectué un rechargement : Afin de voir votre parrain ainsi que vos filleuls et savoir lesquels ont rechargé leur compte au moins une fois et donc vous on fait gagné des MD il vous faudra ouvrir le fichier compte.tpl et ajouter à la ligne 177 : Aux alentours de la ligne 210 ajoutez ceci : <li><a href="index.php?p=compte&c=parrainage">Parrainage</a></li> Afin d'avoir : <ul> <li><a href="index.php?p=payement">Recharger mon compte</a></li> <li><a href="index.php?p=compte&c=mdp">Modifier le mot de passe</a></li> <li><a href="index.php?p=compte&c=mail">Modifier l'email</a></li> <li><a href="index.php?p=compte&c=code">Modifier le code d'effacement</a></li> <li><a href="index.php?p=compte&c=del_compte">Supprimer le compte</a></li> <li><a href="index.php?p=compte&c=parrainage">Parrainage</a></li> </ul> Pour terminer cette personnalisation, allez à la fin du fichier et ajouter après le </if> ceci : <?php } ?> Pour obtenir: </if> <?php } ?> IV. Mot de la fin Voila, le tutoriel est terminé, pour tout problème je serai disponible dans la section A/Q/S. Le tutoriel est susceptible d'être modifié à tout moment.Pour tout souci de compréhension, ou point qui vous semble trop flou, dites le moi et j'arrangerai ça Satir à votre service
  8. Bonsoir, Ancien metinien et gérant de serveur privé, j'ai voulu voir comment à évoluer metin2 depuis ses 5 dernières années et surtout niveau des site web étant spécialisé dans la création de site web. Alors j'ai voulu faire un script pour que vous puissiez afficher les informations que vous voulez sur votre site de manière simplifié. Avec ce code vous pourrez afficher les nombre de compte et joueurs créés mais aussi les nombre de compte par empire, de joueurs par empire, de joueurs homme et femme et nombre de race de personnage créés. Passons au vif du sujet, vous aurez besoin: - Créez un fichier du nom de Class.information.php (ou vous voulez, il faudra juste modifier dans l'autoloader si vous le mettez dans un dossier) - Créez un fichier du nom de autoloader.php (ou vous voulez...) dans le Class.information.php copier/coller mon code: <?php class Information{ private $_db; public function __construct($db){ $this->setDb($db); } public function setDb(PDO $db){ $this->_db = $db; } public function nombreDeCompte(){ return $this->_db->query("SELECT COUNT(id) FROM account.account WHERE id")->fetchColumn(); } public function nombreDeJoeurs(){ return $this->_db->query("SELECT COUNT(id) FROM player.player WHERE id")->fetchColumn(); } public function nombreDeGuerrier(){ $req = $this->_db->prepare("SELECT COUNT(id) FROM player.player WHERE job = :job0 OR job = :job4"); $req->execute([":job0" => 0, ":job4" => 4]); return $req->fetchColumn(); } public function nombreDeSura(){ $req = $this->_db->prepare("SELECT COUNT(id) FROM player.player WHERE job = :job2 OR job = :job6"); $req->execute([":job2" => 2, ":job6" => 6]); return $req->fetchColumn(); } public function nombreDeNinja(){ $req = $this->_db->prepare("SELECT COUNT(id) FROM player.player WHERE job = :job1 OR job = :job5"); $req->execute([":job1" => 1, ":job5" => 5]); return $req->fetchColumn(); } public function nombreDeChaman(){ $req = $this->_db->prepare("SELECT COUNT(id) FROM player.player WHERE job = :job3 OR job = :job7"); $req->execute([":job3" => 3, ":job7" => 7]); return $req->fetchColumn(); } public function nombreDePersoHomme(){ $req = $this->_db->prepare("SELECT COUNT(id) FROM player.player WHERE job = :job0 OR job = :job2 OR job = :job5 OR job = :job7"); $req->execute([":job0" => 0, ":job2" => 2, ":job5" => 5, ":job7" => 7]); return $req->fetchColumn(); } public function nombreDePersoFemme(){ $req = $this->_db->prepare("SELECT COUNT(id) FROM player.player WHERE job = :job1 OR job = :job3 OR job = :job4 OR job = :job6"); $req->execute([":job1" => 1, ":job3" => 3, ":job4" => 4, ":job6" => 6]); return $req->fetchColumn(); } public function nombreDeCompteRouge(){ $req = $this->_db->prepare("SELECT COUNT(id) FROM account.account WHERE empire = :empire"); $req->execute([":empire" => 1]); return $req->fetchColumn(); } public function nombreDeCompteJaune(){ $req = $this->_db->prepare("SELECT COUNT(id) FROM account.account WHERE empire = :empire"); $req->execute([":empire" => 2]); return $req->fetchColumn(); } public function nombreDeCompteBleu(){ $req = $this->_db->prepare("SELECT COUNT(id) FROM account.account WHERE empire = :empire"); $req->execute([":empire" => 3]); return $req->fetchColumn(); } public function nombreDeJoueursRouge(){ $req = $this->_db->prepare("SELECT COUNT(player.id) FROM player.player, account.account WHERE account_id = account.id AND account.empire = :empire"); $req->execute([":empire" => 1]); return $req->fetchColumn(); } public function nombreDeJoueursJaune(){ $req = $this->_db->prepare("SELECT COUNT(player.id) FROM player.player, account.account WHERE account_id = account.id AND account.empire = :empire"); $req->execute([":empire" => 2]); return $req->fetchColumn(); } public function nombreDeJoueursBleu(){ $req = $this->_db->prepare("SELECT COUNT(player.id) FROM player.player, account.account WHERE account_id = account.id AND account.empire = :empire"); $req->execute([":empire" => 3]); return $req->fetchColumn(); } } et dans autoloader.php: function Autoload($class){ require "Class.". strtolower($class) .".php"; } c'est bien beau tout ça mais comment ça marche ? - Déjà on va appeler autoload.php Il est important qu'il soit appelé en 1ère ligne avant votre entrez ce code: require_once "autoloader.php"; spl_autoload_register("Autoload"); ensuite il vous faut une connexion serveur de type PDO vous pouvez le mettre à la suite, vous pouvez aussi utilisez la votre tant que c'est sous ce format sinon ajoutez. try { $db = new PDO("mysql:host=localhost;charset=utf8", "root", ""); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); }catch (Exception $e){ die($e->getMessage()); } Voilà le gros du travail est fait maintenant comment appeler les fonctions ? Alors déjà on doit instancier la variable $db, pour cela rien de plus simple on a besoin de le faire une seule fois: $infoServeur = new Information($db); je vous conseille de le mettre à la suite de la connexion PDO. Maintenant il ne vous reste qu'à appeler les méthodes. Quand vous voulez afficher le nombre de compte par exemple faite: echo $infoServeur->nombreDeCompte(); Et voilà le tour est joué. nombreDeCompte() -> affiche le nombre de compte créer nombreDeJoeurs() -> affiche le nombre de joueurs nombreDeGuerrier() -> affiche le nombre de guerrier nombreDeSura() -> affiche le nombre de sura nombreDeNinja() -> affiche le nombre de ninja nombreDeChaman() -> affiche le nombre de chaman nombreDePersoHomme() -> affiche le nombre d'homme nombreDePersoFemme() -> affiche le nombre de femme nombreDeCompteRouge() -> affiche le nombre de compte Rouge nombreDeCompteJaune() -> affiche le nombre de compte Jaune nombreDeCompteBleu() -> affiche le nombre de compte Bleu nombreDeJoueursRouge() -> affiche le nombre de joueurs rouge nombreDeJoueursJaune() -> affiche le nombre de joueurs jaune nombreDeJoueursBleu() -> affiche le nombre de joueurs bleu
  9. Bonjour, Je vous propose ce mini-tuto car je trouve encore beaucoup de site ayant cette petite faille sur le classement de leur mt2-cms. Il est très simple de régler cette faille : Il suffit de modifier cette ligne (Ligne 124) : if(isset($_GET['r']) and $_GET['r']>0){$rang=$_GET['r'];} else {$rang=0;} Par celle-ci : if(isset($_GET['r']) and $_GET['r']>0 and is_numeric($_GET['r']) and $_GET['r'] < 1000){$rang=$_GET['r'];} else {$rang=0;} Ce changement fait que la valeur entrée pour la variable r doit être numérique, si elle ne l'est pas (donc soit un texte, soit un caractère interdit) le script retournera la première page du classement. En espérant voir moins souvent cette petite faille
  10. Bonjour, Je me suis affairé à développer un système de récupération de mot de passe sous mt2-cms. Principe : Le joueur clique sur "MDP oublié", ça l'envoi sur une page et sur cette page le joueur entre son nom de compte et son e-mail, par la suite il reçoit un mail comprenant un url UNIQUE contenant un guid ("Globally Unique Identifier"), ce guid est en fait le MD5 de l'heure/minutes/secondes d'envoi du mail, en cliquant sur l'url reçu par mail il arrivera sur une autre page ou on lui demandera un nouveau mot de passe.Alors ce système utilise une table à créer à la main, dans cette table il y aura l'e-mail, le nom de compte, le guid et la date de création de la ligne.Je commenterai les grandes lignes des codes PHP. Tuto :1) Faire 4 fichiers, qu'il faudra appeler mdp_oublie.tpl , mdp_oublie.php, reset_mdp.tpl, reset_mdp.php. 2)Mettre les fichiers PHP dans le dossier "includes-public" et les fichiers tpl dans "templates/default/fr/public". 3)Dans les fichiers PHP il faut mettre le code : -Pour reset_mdp.php : <?php /** * MT2-CMS * @author JigSaw <[email protected]> * @license [Hidden Content] * @version b1.002 24/04/2010 * @link [Hidden Content] * * **/ $tpl->parse('public/reset_mdp.tpl'); ?> -Pour mdp_oublie.php : <?php /** * MT2-CMS * @author JigSaw <[email protected]> * @license [Hidden Content] * @version b1.002 24/04/2010 * @link [Hidden Content] * * **/ $tpl->parse('public/mdp_oublie.tpl'); ?> 4)Dans les fichiers TPL il faudra mettre : mdp_oublie.tpl : reset_mdp.tpl : 5)Ajouter au fichier index.php les lignes suivantes : "mdp_oublie" => "includes-public/mdp_oublie.php", "reset_mdp" => "includes-public/reset_mdp.php", (Lignes à ajouter entre les lignes déjà présentes de 144 à 158 (environ)) 6) Il faut maintenant créer la table qui comprendra le mail du joueur, son nom de compte et le guid (et la date, j'expliquerai plus tard pourquoi on récupère et stocke la date) Donc pour se faire, il faut aller dans la DB "site" et créer une nouvelle table : Après avoir cliqué sur "New Table" , il faudra faire 4 champs (pour ajouter un champ cliquez sur "Add Field") et compléter comme ceci : /!\METTEZ BIEN GUID EN PRIMARY KEY/!\ Pour mettre guid en primary key, il suffit de faire clic droit sur le champ "guid" et de cliquer ensuite sur "Set as primary key". 7)Sauvegardez la table, et donnez lui comme nom reset_mdp ! 8)Ajoutez où vous voulez que votre lien vers ce script apparaisse ceci : <a href="index.php?p=mdp_oublie">Mot de passe oublié</a> Voilà, si tout est fait comme il faut au niveau de la table, votre système de changement de mot de passe oublié est fonctionnel ! Source : Moi EDIT : Pensez à modifier les endroits indiqués dans mdp_oublie.tpl
  11. Bonjour, Je trouve ça plutôt utile, et c'est absent dans le MT2-CMS à la base, donc je vais vous montrer comment ajouter ces deux petites choses : 1)Création du code d'effacement à l'inscription : -Dans le fichier "inscription.php" il faut ajouter ceci : //Si le code fait 7 caractères if (strlen(trim($code)) == 7) { [...] } else { $errors =6; }//6: code d'effacement ne fait pas 7 caractères Ceci est donc la partie qui vérifie si le code d'effacement fait bien 7 caractères. Il suffit de l'intégrer dans le fichier comme ceci (intégration dans inscription.php): Notez qu'il faut aussi modifier le "INSERT INTO [...]" , il suffit de lui dire que le code d'effacement entré par le joueur sera le social_id du compte. -Dans le fichier inscription.tpl : Il faut rajouter une ligne dans le "<div class="error">", comme cela : <if cond="$valid_form == 6"><font color="red">Le code d'effacement ne fait pas 7 caract&egrave;res.</font></if> Et ajouter dans le "<form method="post" action="index.php?p=inscription">[/php] Le input prenant le code d'effacement comme ceci : <label>Code d'effacement (7 caractères)</label><br /> <input name="code" type="text" size="30" /><br /> 2) Ajouter la checkbox qui fait accepter les règles du serveur aux joueurs : -Dans le fichier inscription.tpl (tant qu'on y est ) : Il faut ajouter une autre ligne au même endroit : <if cond="$valid_form == 7"><font color="red">Les règles du serveur n'ont pas été acceptées.</font></if> Ici aussi il faut ajouter un input comme cela : <input type="checkbox" name="CGI" id="CGI"/><label for="cgi"> <b><font color="white">J'accepte les <a href="index.php?p=regles"><font color="red"><u>règles</u></a></font> du serveur!</b></label><br/> -Dans le fichier inscription.php : On ajoute ce bout de code : //Si les CGI sont acceptés if (isset($_POST['CGI']) == 1) { [...] } else { $errors =7; }//7: CGI non acceptées À intégrer de cette façon (Intégration finale dans inscription.php) : NB : Prenez ce dernier bout de code pour intégrer les deux input facilement. Voilà, c'est tout