setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Activer les clés étrangères $db->exec('PRAGMA foreign_keys = ON;'); return $db; } catch (PDOException $e) { die("Erreur de connexion à la base de données: " . $e->getMessage()); } } // Vérifier si un paramètre de confirmation est présent $confirmed = isset($_GET['confirm']) && $_GET['confirm'] === 'yes'; // Vérifier si un paramètre d'authentification est présent $auth_key = isset($_GET['key']) ? $_GET['key'] : ''; $valid_auth = $auth_key === 'mhwilds2025'; if (!$valid_auth) { die('Accès non autorisé. Veuillez fournir une clé d\'authentification valide.'); } // Liste des 29 monstres de Monster Hunter Wilds $monsters = [ ['id' => 1, 'name' => 'Chatacabra', 'image' => 'assets/img/Chatacabra.jpg'], ['id' => 2, 'name' => 'Quematrice', 'image' => 'assets/img/Quematrice.jpg'], ['id' => 3, 'name' => 'Lala Barina', 'image' => 'assets/img/Lala_Barina.jpg'], ['id' => 4, 'name' => 'Congalala', 'image' => 'assets/img/Congalala.jpg'], ['id' => 5, 'name' => 'Balahara', 'image' => 'assets/img/Balahara.jpg'], ['id' => 6, 'name' => 'Doshaguma', 'image' => 'assets/img/Doshaguma.jpg'], ['id' => 7, 'name' => 'Uth Duna', 'image' => 'assets/img/Uth_Duna.jpg'], ['id' => 8, 'name' => 'Rompopolo', 'image' => 'assets/img/Rompopolo.jpg'], ['id' => 9, 'name' => 'Rey Dau', 'image' => 'assets/img/Rey_Dau.jpg'], ['id' => 10, 'name' => 'Nerscylla', 'image' => 'assets/img/Nerscylla.jpg'], ['id' => 11, 'name' => 'Hirabami', 'image' => 'assets/img/Hirabami.jpg'], ['id' => 12, 'name' => 'Ajarakan', 'image' => 'assets/img/Ajarakan.jpg'], ['id' => 13, 'name' => 'Nu Udra', 'image' => 'assets/img/Nu_Udra.jpg'], ['id' => 14, 'name' => 'Doshaguma Gardien', 'image' => 'assets/img/Doshaguma_Gardien.jpg'], ['id' => 15, 'name' => 'Rathalos Gardien', 'image' => 'assets/img/Rathalos_Gardien.jpg'], ['id' => 16, 'name' => 'Jin Dahaad', 'image' => 'assets/img/Jin_Dahaad.jpg'], ['id' => 17, 'name' => 'Odogaron Désastre Gardien', 'image' => 'assets/img/Odogaron_Desastre_Gardien.jpg'], ['id' => 18, 'name' => 'Xu Wu', 'image' => 'assets/img/Xu_Wu.jpg'], ['id' => 19, 'name' => 'Arkveld Gardien', 'image' => 'assets/img/Arkveld_Gardien.jpg'], ['id' => 20, 'name' => 'Zoh Shia', 'image' => 'assets/img/Zoh_Shia.jpg'], ['id' => 21, 'name' => 'Yian Kut-Ku', 'image' => 'assets/img/Yian_Kut-Ku.jpg'], ['id' => 22, 'name' => 'Gypceros', 'image' => 'assets/img/Gypceros.jpg'], ['id' => 23, 'name' => 'Rathian', 'image' => 'assets/img/Rathian.jpg'], ['id' => 24, 'name' => 'Anjanath Tonnerre Gardien', 'image' => 'assets/img/Anjanath_Tonnerre_Gardien.jpg'], ['id' => 25, 'name' => 'Rathalos', 'image' => 'assets/img/Rathalos.jpg'], ['id' => 26, 'name' => 'Gravios', 'image' => 'assets/img/Gravios.jpg'], ['id' => 27, 'name' => 'Blangonga', 'image' => 'assets/img/Blangonga.jpg'], ['id' => 28, 'name' => 'Gore Malaga', 'image' => 'assets/img/Gore_Malaga.jpg'], ['id' => 29, 'name' => 'Arkveld', 'image' => 'assets/img/Arkveld.jpg'] ]; // Récupérer les données exemple pour les quêtes et annonces $sample_quests = [ ['monster_id' => 1, 'crown_type' => 'small', 'player_name' => 'Hunter123', 'player_id' => 'MHW-1234'], ['monster_id' => 1, 'crown_type' => 'large', 'player_name' => 'DragonSlayer', 'player_id' => 'MHW-5678'], ['monster_id' => 2, 'crown_type' => 'small', 'player_name' => 'ThunderLord', 'player_id' => 'MHW-9012'] ]; $sample_announcements = [ ['text' => 'Bienvenue sur le site de partage de quêtes à couronnes pour Monster Hunter Wilds !', 'active' => 1] ]; // Si la confirmation n'est pas donnée, afficher une page d'information if (!$confirmed) { header('Content-Type: text/html; charset=utf-8'); echo ' Initialisation de la base de données - MH Wilds

Initialisation de la base de données

Attention : Ce script va initialiser la base de données avec les 29 monstres de Monster Hunter Wilds.

Si une base de données existe déjà, les données existantes seront conservées mais les monstres manquants seront ajoutés.

Liste des monstres à initialiser :

    '; foreach ($monsters as $monster) { echo '
  • ' . htmlspecialchars($monster['name']) . '
  • '; } echo '

Ce script va également créer les tables nécessaires si elles n\'existent pas déjà.

'; exit; } // Si on arrive ici, c'est que la confirmation a été donnée try { // Obtenir une connexion à la base de données $db = get_db_connection(); // Démarrer une transaction $db->beginTransaction(); // Créer les tables si elles n'existent pas déjà // Table des monstres $db->exec("CREATE TABLE IF NOT EXISTS monsters ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, image TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )"); // Table des quêtes $db->exec("CREATE TABLE IF NOT EXISTS quests ( id INTEGER PRIMARY KEY AUTOINCREMENT, monster_id INTEGER NOT NULL, crown_type TEXT NOT NULL CHECK(crown_type IN ('small', 'large')), player_name TEXT NOT NULL, player_id TEXT NOT NULL, date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (monster_id) REFERENCES monsters(id) ON DELETE CASCADE )"); // Table des annonces $db->exec("CREATE TABLE IF NOT EXISTS announcements ( id INTEGER PRIMARY KEY AUTOINCREMENT, text TEXT NOT NULL, active INTEGER DEFAULT 1, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )"); // Table des utilisateurs admin $db->exec("CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )"); // Insérer l'utilisateur admin par défaut s'il n'existe pas $stmt = $db->prepare("INSERT OR IGNORE INTO users (username, password) VALUES (?, ?)"); $stmt->execute(['admin', '$2y$10$JhrzSCmNKJ9ZethKestSxO76uvauWB4SnUj.QJzpHrbJ3enCNzkhe']); // Insérer les monstres $stmt = $db->prepare("INSERT OR IGNORE INTO monsters (id, name, image) VALUES (?, ?, ?)"); $total_monsters = 0; foreach ($monsters as $monster) { $stmt->execute([$monster['id'], $monster['name'], $monster['image']]); if ($stmt->rowCount() > 0) { $total_monsters++; } } // Insérer les quêtes et annonces d'exemple seulement s'il n'y a pas déjà des données $quests_count = $db->query("SELECT COUNT(*) FROM quests")->fetchColumn(); $announcements_count = $db->query("SELECT COUNT(*) FROM announcements")->fetchColumn(); $sample_data_added = false; if ($quests_count == 0) { $stmt = $db->prepare("INSERT INTO quests (monster_id, crown_type, player_name, player_id) VALUES (?, ?, ?, ?)"); foreach ($sample_quests as $quest) { $stmt->execute([$quest['monster_id'], $quest['crown_type'], $quest['player_name'], $quest['player_id']]); } $sample_data_added = true; } if ($announcements_count == 0) { $stmt = $db->prepare("INSERT INTO announcements (text, active) VALUES (?, ?)"); foreach ($sample_announcements as $announcement) { $stmt->execute([$announcement['text'], $announcement['active']]); } $sample_data_added = true; } // Valider la transaction $db->commit(); // Afficher le résultat header('Content-Type: text/html; charset=utf-8'); echo ' Initialisation réussie - MH Wilds

Initialisation réussie

Succès : La base de données a été initialisée avec succès !

Résultats :

  • ' . $total_monsters . ' monstres ont été ajoutés (les monstres existants ont été ignorés)
  • '; if ($sample_data_added) { echo '
  • Les données d\'exemple (quêtes et annonces) ont été ajoutées
  • '; } else { echo '
  • Les données d\'exemple n\'ont pas été ajoutées car il existe déjà des données
  • '; } echo '
'; } catch (Exception $e) { // En cas d'erreur, annuler la transaction if (isset($db) && $db->inTransaction()) { $db->rollBack(); } // Afficher l'erreur header('Content-Type: text/html; charset=utf-8'); echo ' Erreur d\'initialisation - MH Wilds

Erreur d\'initialisation

Erreur : Une erreur s\'est produite lors de l\'initialisation de la base de données.

Veuillez vérifier que le dossier "data" est accessible en écriture et que SQLite est activé sur votre serveur.

Détails de l\'erreur :

' . htmlspecialchars($e->getMessage()) . '
'; }