👀 D&D: Phase 2 > Viewer de personnages (PHP)

Voici un cahier des charges complet et structuré pour la réalisation du visualisateur de personnages Donjons & Dragons en PHP.

🎯 Objectif

Développer une petite application web avec PHP permettant de visualiser des personnages de type Donjons & Dragons (version simplifiée basée sur la 5e édition).

Utilise Bootstrap et ses composants pour améliorer le rendu visuel de ton application.

đŸ§± Structure gĂ©nĂ©rale de l’application

L’application est constituĂ©e de 2 pages PHP avec un menu de navigation accessible en permanence.

đŸ”č Pages attendues

Page URL Description
Accueil / Tableau affichant tous les personnages enregistrés
Fiche personnages /perso?id=xxx Fiche affichant les informations sur un personnage

🧭 Navigation

Un menu fixe ou en haut de page permet d'accéder facilement aux sections:

  • Accueil
  • Personnages

✍ Liste des personnages

  • Affiche tous les personnages de la base dans un tableau lisible. Utilise les classes Bootstrap adĂ©quates.

liste flask

  • Chaque ligne doit contenir :

    • Nom
    • Race
    • Classe
    • Niveau
    • Un bouton de visualisation

Le bouton de visualisation doit contenir un lien qui pointe vers la page de... visualisation (perso.php). D'oĂč son nom 😉

đŸ”č Visualisation – Fiche personnage complĂšte

La fiche devrait ressembler à ceci (éventuellement à adapter en fonction des consignes):

view

BONUS: Affiche la liste des tests réalisés ainsi que leurs résultats

Si tu as réussi à enregistrer les tests de caractéristiques dans la version Python du Créateur de personnages, tu peux les afficher ici.

Comment lire les fiches personnages ?

Voici des fonctions prĂȘtes Ă  l'emploi qui te permettront de lister et lire les fiches personnages créées par ton autre programme.

IdĂ©alement, tu devrais les placer dans leur propre fichier PHP et les inclure dans tes pageÀ l'aide de require_once.

/**
 * Fonction qui charge toutes les fiches personnage d’un dossier donnĂ©.
 *
 * Elle renvoie un tableau associatif :
 *    - la clé est le nom du fichier (ex : "actions.json")
 *    - la valeur est le contenu du fichier transformé en tableau PHP
 *
 * @param string $dossier Chemin vers le dossier (ex : "./data")
 * @return array Tableau contenant les contenus de chaque fichier JSON
 */
function chargerTousLesPersonnages(string $dossier): array {
    $resultat = []; // On prépare un tableau vide pour stocker les résultats

    // Vérifie si le dossier existe vraiment
    if (!is_dir($dossier)) {
        return []; // Si ce n’est pas un dossier valide, on renvoie un tableau vide
    }

    // Recherche tous les fichiers qui se terminent par ".json" dans ce dossier
    $fichiers = glob($dossier . DIRECTORY_SEPARATOR . '*.json');

    // Pour chaque fichier trouvé...
    foreach ($fichiers as $cheminFichier) {
        // On récupÚre le nom du fichier sans le chemin (ex : "mon_fichier.json")
        $nomFichier = basename($cheminFichier);

        // On utilise la fonction ci-dessous pour lire le contenu du fichier
        $donnees = chargerFichePersonnage($cheminFichier);

        // Si la lecture du fichier a rĂ©ussi (pas null), on l’ajoute au tableau
        if ($donnees !== null) {
            $resultat[$nomFichier] = $donnees;
        }
    }

    return $resultat; // On renvoie toutes les données chargées
}
/**
 * Fonction qui lit un fichier JSON précis et transforme son contenu en tableau PHP.
 *
 * @param string $chemin Chemin complet vers le fichier (ex : "./data/mon_fichier.json")
 * @return array|null Un tableau si tout s’est bien passĂ©, sinon null
 */
function chargerFichePersonnage(string $chemin): ?array {
    // VĂ©rifie que le fichier existe et qu’il est lisible
    if (!file_exists($chemin) || !is_readable($chemin)) {
        return null;
    }

    // Lit tout le contenu du fichier dans une chaĂźne de caractĂšres
    $contenu = file_get_contents($chemin);

    // Transforme le texte JSON en tableau PHP (le "true" signifie : tableau associatif)
    $donnees = json_decode($contenu, true);

    // VĂ©rifie si le dĂ©codage s’est bien passĂ© (sinon il y a une erreur)
    if (json_last_error() !== JSON_ERROR_NONE) {
        return null; // Erreur de format JSON → on ne garde pas ce fichier
    }

    return $donnees; // On renvoie les données correctement lues
}
// ======= EXEMPLES D’UTILISATION (à activer si besoin) =======

// Charger tous les fichiers JSON d’un dossier "data"
$liste = chargerTousLesFichiersJson(__DIR__ . '/data');
print_r($liste);

// Charger un seul fichier JSON
$unFichier = chargerFichierJson(__DIR__ . '/data/mon_fichier.json');
print_r($unFichier);

Pour aller plus loin