Bannière Les GrosBilloux

GB-Signatures v1.2b

  1. I. Structure de la base de données
  2. 1. Table "guild_stat"
  3. 2. Table "utilisateurs"
  4. 3. Table "signatures" (optionnelle)
  5.  
  6. II. Créer une signature
  7. 1. Format du nom du background
  8. 2. La fonction CreateImage()
  9.  
  10. III. Formater correctement les données sortant d'un formulaire pour créer une signature
  11. 1. Structure du formulaire
  12. 2. Formater les données du formulaire
  13.  
  14. IV. Mettre à jour les signatures toutes les X minutes
  15. 1. Le script "refresh_sign.php"
  16. 2. Comment exécuter le script toutes les X minutes
  17.  
  18. V. Le fichier des constantes : "constantes.php"
  19. 1. Base de données
  20. 2. Signatures
  21. 3. "coeur du script", oui oui mes scripts ont un coeur :)))
  22.  
  23. VI. L'arboressence des dossiers
  24.  
  25. VII. Télécharger la source

I. Structure de la base de données

Pour fonctionner correctement le script a besoin d'avoir accès à une base de données de type MySQL pour stocker les informations des signatures.

1. Table "guild_stat"

La table "guild_stat" sert à stocker les informations qui ont été parsées sur la page du ladder de Guildwars pour ne pas avoir à parser la page à chaque fois que l'ont veut créer/raffraichir une signatures.

Structure de la table "guild_stat" :

id tinyit(1) unsigned auto_increment primary_key
ranking varchar(8)
rating smallint(1) unsigned
wins smallint(1) unsigned
looses smallint(1) unsigned
date varchar(19)

Cette table est faite assez bizarrement, en effet elle ne contient que 2 entrées (2 lignes) :
- Une ligne pour les informations sauvegardées une fois par jours pour effectuer des stats (+x)
- Une ligne pour les informations qui ont été parsées.

2. Table "utilisateurs"

La table "utilisateurs" sert à stocker les informations des signatures :
- Le nom du joueur.
- La date de son dernier changement de signature.
- Son adresse IP.
- Le nom du background qu'il a choisi.

Structure de la table "utilisateurs" :

id int(10) unsigned auto_increment primary_key
nom varchar(19)
date varchar(19)
ip varchar(15)
image varchar(255)

3. Table "signatures" (optionnelle)

La table "signatures" est utilisée pour l'interface d'administration, elle permet de stocker :
- Le nom du background de la signature.
- La classe à laquelle elle se réfère.

"La classe à laquelle..." ce champ est en réalité utilisé pour l'affichage sur la page web pour créer sa signature. Les signatures sont affichées sur la page dynamiquement et classées par classe (Guerrier, Envoûteur, etc.).

Cette table peut ne pas être utilisée, si vous ne comptez pas faire d'interface d'administration pour ajouter de nouvelles signatures et si vous ne comptez pas afficher les signatures sur une page web dynamiquement à partir de la base de données.

Structure de la table "signatures" :

id int(10) unsigned auto_increment primary_key
nom varchar(255)
classe tinyint(1) unsigned

Haut de page


II. Créer une signature

Pour créer une signature il n'y a besoin que d'une seule fonction : "CreateImage($nom,$img)"
Cette fonction prend en paramètre 2 chaînes de caractères :
- Un nom (le nom du joueur qui sera affiché sur la signature).
- Le nom du background qui sera utilisé pour créer la signature.

1. Format du nom du background

Dans mon cas, les backgrounds s'appelent : signature1, signature2, etc.

En réalité (dans le répertoire des backgrounds) ils s'appelent : signature1_jour.jpg, signature1_nuit.jpg, signature2_jour.jpg, signature_nuit.jpg, etc.

Le suffixe _jour.jpg et _nuit.jpg a été retiré lors de l'insertion dans la base car nous n'avons pas besoin de nous en occuper, le script choisira lui-même quelle version du background il veut utiliser (_jour.jpg, ou _nuit.jpg).

Ca peut paraître assez compliqué comme ça, mais tout ce qu'il faut retenir c'est que dans le répertoire des backgrounds il faut avoir des images nommées "signatureX_jour.jpg" et "signatureX_nuit.jpg" (X est le numéro de la signature) et dans le paramètre "$img" il faut avoir "signatureX" uniquement.

2. La fonction CreateImage

Déjà elle vérifie quelle heure il est et formate le nom du background qui sera utilisé :
- Après 20h elle ajoutera "_nuit.jpg" au nom de la signature passé en paramètre ("signature1" pour l'exemple) qui deviendra donc "signature1_nuit.jpg" !
- Après 8h elle ajoutera "_jour.jpg" au nom de la signature passé en paramètre ("signature1" pour l'exemple) qui deviendra donc "signature1_jour.jpg" !

Ensuite elle va appeler la fonction "GetGuildInfoFromDB()" qui va renvoyer un tableau contenant les informations stockées dans la base de données (rang, classement, victoires, défaites). (Ces informations sont par défaut mises-à-jour toutes les 10 minutes dans la base).

Après avoir récupéré les informations courantes dans la base de données elle va appeler la fonction "GetGuildStatsFromDB()" qui elle va renvoyer le même tableau que la fonction précédente, sauf que celui-ci contiendra les informations antérieurs, stockées dans la base (ces infos sont mises à jour une fois par jours à 20h, par défaut).

-> GetGuildInfoFromDB() correspond à la seconde ligne dans la table "guild_stat" (id=2 donc).
-> GetGuildStatsFromDB() correspond à la première ligne dans la table "guild_stat" (id=1 donc).

Notre petite fonction va ensuite fait un tas de petits calculs pour générer et formater le texte de sortie et fini par enregistrer la signature avec le background choisi, le nom du joueur, le nom de sa guilde ainsi que les informations du ladder la concernant sous le nom de : "$nom.jpg" tout simplement.
Comme il y a obligatoirement un espace au minimum dans le nom du joueur, tout les espaces sont remplacés par des underscores "_". Ce qui donne pour moi "Bisous_Partout.jpg".

Haut de page


III. Formater correctement les données sortant d'un formulaire pour créer une signature

1. Structure du formulaire

Le formulaire doit contenir au minimum 2 champs :
- Un champ contenant le nom du joueur (en général un <input type="text" ... />)
- Un groupe de champ contenant le numéro de chaque signature (en général un
<input type="radio" ... />)
Dans mon cas le groupe de champ des signatures a comme valeur : value="X" (X désignant le numéro de la signature). Exemple : "signature1" aura comme numéro "1".

2. Formater les données du formulaire

Tout en haut de votre page PHP il faut ajouter ce code :

<?php
require("Includes/constantes.php");
require("Includes/MySQL_Class.php");
require("Includes/fonctions.php");

$bdd=new MySQL_Class(DATABASE,DOMAINE,IDENTIFIANT,MDP);
$msg_type=0;

if(isset($_POST['i_str_nom'])){
    $nom=$_POST['i_str_nom'];
    if($nom!=""){
        if(preg_match("!^[A-Z]{1}[a-z]* [A-Z]{1}[a-z]*!",$nom)){
            $img="signature".$_POST['i_radio_sign'];
            CreateImage($nom,$img);
            AddToDB($nom,$img);
            $nom=preg_replace('! !','_',$nom);
            $msg_type=1;
        }else {
            $msg="Vous devez entrer un nom valide (majuscule à la première [...]).";
            $msg_type=2;
        }
    }else{ //Si le nom est vide
        $msg="Vous devez entrer un nom.";
        $msg_type=2;
    }
}
?>

(J'ai volontairement retiré les commentaires, néanmoins ils sont présent dans la source)

La variable $msg contient le message qui va être affiché sur la page.
La variable $msg_type indique quel type de message on va devoir afficher :
0 = pas de message à afficher.
1 = message de réussite (dans ma page ça affiche un lien vers la signature du joueur).
2 = message d'erreur.

Pour adapter ce script à votre page il suffit de renommer $_POST['i_str_nom'] par le nom du champ contenant le nom du joueur dans votre formulaire,
et $_POST['i_radio_sign'] par le nom du champ contenant le numéro de la signature choisie.
Vous pouvez aussi changer le prefixe des signatures à la ligne : $img="signature".$_POST['i_radio_sign'];
si vous ne comptez pas nommer vos signatures "signatureX_jour.jpg", "signatureX_nuit.jpg", etc.

Haut de page


IV. Mettre à jour les signatures toutes les X minutes

Pour mettre à jour toutes les signatures toutes les X minutes (pour avoir des signatures à jour au niveau des info) il faut exécuter le script "refresh_sign.php" à chaque mise à jour.
Avant de vous expliquer comment lancer le script toutes les X minutes, je vais vous décrire ce que fait ce script.

1. Le script "refresh_sign.php"

Quand le script est exécuté, il fait dans l'ordre :
- Mise à jour des info guilde dans la base de données.
- Mise à jour des stats guilde dans la base de données SI c'est l'heure de le faire (configurable dans le fichier des constantes).
- Mise à jour de toutes les signatures existantes avec la fonction "CreateImage($nom,$img)".

2. Comment exécuter le script toutes les X minutes

Voici un vrai problème, exécuter le script toutes les X minutes est, je pense, le problème le plus bloquant des signatures.
Il y a différentes façons de le faire, mais aucune d'entre elles (à moins que je me trompe) sont réalisables sur un hébergement gratuit (type Free), ou alors il faudra lancer le script toutes les X minutes à la main... (hors de question pour ma part).
En cherchant un petit peu j'ai trouvé ce site : http://www.webcron.org qui se propose d'exécuter des scripts tout les X temps pour vous.

Personnellement j'utilise "Cronjob" présent sur mon espace d'hébergement pro (http://www.hosteur.com) pour exécuter le script toutes les 10 minutes.
Vous pouvez aussi demander autour de vous si quelqu'un possède un espace d'hébergement pro et s'il veut bien configurer l'exécution du script pour vous (en théorie ça consomme très très peu de bande passante et le script n'a pas besoin d'être stocké sur son serveur).

Syntaxe CRON : */10 * * * * GET http://lurikuny.free.fr/xxx/xxx/xxx/refresh_sign.php
"Exécute le script http://lurikuny.free.fr/xxx/xxx/xxx/refresh_sign.php toutes les 10 minutes".

Pour plus d'informations sur la syntaxe de CRON : http://www.commentcamarche.net/tutlinux/lincron.php3

Haut de page


V. Le fichier des constantes : "constantes.php"

Ce fichier contient toute la partie configuration du script, je vais ségmenter ces constantes en 3 parties.

1. Base de données

DOMAINE = Adresse de la base de données MySQL ("localhost" dans 99% des cas).
IDENTIFIANT = Votre login à la base...
MDP = Le mot de passe...
DATABASE = Le nom de la base (en général c'est le même nom que l'identifiant chez les hébergeurs gratuits).

2. Signatures

NOM_GUILD = Le nom de la guilde à chercher dans le ladder (remplacer les espaces par des "+").
TAG_GUILD = Pas encore implanté, peut-être plus tard.
H_SOIR = L'heure après laquelle la signature passe en mode "nuit".
H_MATIN = L'heure après laquelle la signature passe en mode "jour".
H_MAJ = L'heure à laquelle la mise à jour journalière est effectuée.
QUALITE_JPEG = La qualité des JPEG de sortie, de 0 à 100.

3. "coeur du script", oui oui mes scripts ont un coeur :)))

URL_LADDER = L'URL de la page du ladder Guildwars.
DEBUT = Balise de début pour le parsing.
FIN = Balise de fin pour le parsing.
SEP = Balise de séparation pour le parsing.
ID_GUILD_STATS = Id de la ligne où sont stockées les stats dans la base de données.
ID_GUILD_INFO = Id de la ligne où sont stockées les info dans la base de données.

Haut de page


VI. L'arboressence des dossiers

Pour que le script fonctionne correctement il est important de respecter une arboressence fichier prédéfinie :
Dossier du script : "./Includes"
Dossier des backgrounds : "./Images"
Dossier des signatures : "./Images/Signatures"

Haut de page


VII. Télécharger la source

Vous pouvez utiliser les sources pour créer vos propres signatures de guilde, il n'y a aucun soucis de ce côté là.

GB-Signatures v1.2b (24/03/06).

Haut de page