From dab366607aa2c760177de95a05bc396e19342657 Mon Sep 17 00:00:00 2001 From: doucoure Date: Fri, 5 Jun 2026 23:56:12 +0200 Subject: [PATCH] =?UTF-8?q?ajout=20gestion=20des=20jeux=20(ajout,=20modif,?= =?UTF-8?q?=20suppr)=20et=20maj=20journal=20s=C3=A9ance=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- JOURNAL.md | 67 +++++++++++++++-- README.md | 2 +- .../application/config/autoload.php | 2 +- .../application/config/config.php | 2 +- .../application/controllers/Jeux.php | 75 +++++++++++++++++++ .../application/models/Game_model.php | 33 ++++++++ .../application/views/formulaire_ajout.php | 37 +++++++++ 7 files changed, 209 insertions(+), 9 deletions(-) create mode 100644 codeigniter-develop/application/controllers/Jeux.php create mode 100644 codeigniter-develop/application/views/formulaire_ajout.php diff --git a/JOURNAL.md b/JOURNAL.md index 1eeabdb..1a27be9 100644 --- a/JOURNAL.md +++ b/JOURNAL.md @@ -19,19 +19,74 @@ **Usage de l'IA (Séance 1) :** **Prompts utilisés :** Demandes d'aide sur la configuration initiale de Git, le fonctionnement des branches, et la syntaxe pour bien rédiger les fichiers `.md` (README et JOURNAL). **Extraits de réponse jugés utiles :** Les explications claires sur le workflow Git (pourquoi on ne travaille pas sur le main, l'utilité de git checkout -b`) et le rôle d'une -Pull Request. Les symboles # et ## : Les Titres -Le nombre de # détermine l'importance et la taille du titre. C’est l’équivalent des balises

et

en HTML. +Pull Request.Les symboles '#' et '##' : Les Titres +Le nombre de '#' détermine l'importance et la taille du titre. C’est l’équivalent des balises '

' et '

' en HTML. "#" Titre Principal : Crée un titre de niveau 1 (très grand, utilisé pour le nom du projet). "##" Sous-Titre : Crée un titre de niveau 2 (taille moyenne, parfait pour séparer tes sections comme "Membres du binôme" ou "Séance 1"). "###" Titre de niveau 3 : Pour des sous-sections encore plus petites. -Règle d'or : Il faut toujours mettre un espace entre les # et le premier mot (écris ## Séance 1 et non ##Séance 1). -2. Le symbole * : Les listes et le style +Règle d'or : Il faut toujours mettre un espace entre les '#' et le premier mot (écris '##' Séance 1 et non '##Séance 1'). +2. Le symbole '*' : Les listes et le style L'astérisque change de rôle selon la façon dont tu l'utilises : Pour faire des listes à puces -Si tu places un * au tout début d'une ligne, suivi d'un espace, cela génère une liste propre. +Si tu places un '*' au tout début d'une ligne, suivi d'un espace, cela génère une liste propre. "*" Ibrahim devient une puce avec "Ibrahim". "*" Tajeddine devient une puce avec "Tajeddine". Pour modifier le style du texte Si tu colles les astérisques autour d'un mot ou d'une phrase (sans espace cette fois) : -*texte* (un seul de chaque côté) : Met le mot en italique. +'*texte*' (un seul de chaque côté) : Met le mot en italique. texte (deux de chaque côté) : Met le mot en gras (très pratique pour faire ressortir les mots-clés). + +## Séance 2 +**Objectif de la séance :** Avancer sur le projet. + +**Travail réalisé :** +* Aucun, Tajeddine et moi étions absents. + +**Difficultés rencontrées :** Absence du binôme. + +**Décisions prises :** Rattraper le travail pendant la séance 3. + +**Travail de chacun :** Rien pour cette séance. + +**Points à reprendre à la séance suivante :** Rattraper le retard et commencer à coder. + +**Usage de l'IA (Séance 2) :** Aucun. + + +## Séance 3 +**Objectif de la séance :** Rattraper la séance 2, définir la répartition des rôles, réparer les problèmes de Git et avancer sur la gestion des jeux. + +**Répartition des tâches décidée :** +* **Tajeddine :** S'occupe de l'interface utilisateur (Accueil, listes des jeux par catégories, fiche détaillée d'un jeu, et barre de recherche). +* **Ibrahim :** S'occupe de l'administration des données (Formulaires d'ajout et de modification, suppression des jeux, et filtres de tri). + +**Travail réalisé :** +* Création de la vue `formulaire_ajout.php` ( pour l'ajout et la modification). +* Création du contrôleur `Jeux.php` et mise à jour de `Game_model.php` pour gérer l'insertion, la mise à jour et la suppression. +* Configuration de `base_url` dans `config.php` et ajout de `url` et `form` dans `autoload.php`. + +**Difficultés rencontrées :** * Conflits sur Git en voulant fusionner les branches. +* La base de données bloquait l'ajout en silence car on avait oublié le champ `description` qui est obligatoire (`NOT NULL` dans la table). + +**Travail de chacun :** * Ibrahim : Réparation du dépôt Git, configuration du projet, et code complet des fonctionnalités "Créer", "Modifier" et "Supprimer" un jeu. + +**Points à reprendre à la séance suivante (Séance 4) :** * Ibrahim : Faire la Mission 4 (Ajouter les filtres de tri par titre/année sur les listes). +* Tajeddine : Avancer sur l'affichage visuel des listes de jeux pour qu'on puisse y intégrer les boutons de modification/suppression et les filtres. + +**Usage de l'IA (Séance 3) :** +**Prompts utilisés :** Demande de commandes pour nettoyer Git après un conflit, aide pour comprendre une erreur de "fonction non définie", et aide pour trouver l'erreur d'insertion MariaDB. +**Extraits de réponse jugés utiles :** +* L'armoire Jeux est parfaitement déclarée ! Il faut maintenant y ajouter notre tiroir, c'est-à-dire la méthode ajouter(). À l'intérieur de cette méthode, nous avons besoin de deux instructions que tu as déjà utilisées tout à l'heure : +L'instruction pour charger l'outil natif des URL (le helper). +L'instruction pour charger et afficher la vue qui s'appellera formulaire_ajout_vue. +Comment vas-tu écrire cette fonction public function ajouter() avec ces deux lignes à l'intérieur de ta classe ? + +*Ton début de code pour la classe Jeux est parfait. Dans CodeIgniter, la commande $this->load fonctionne comme un couteau suisse. Pour l'utiliser, on lui ajoute une flèche -> suivie de l'action que l'on veut faire. +Dans notre fonction ajouter(), nous avons besoin de faire deux actions : +Charger un outil (helper) pour gérer les liens web. L'outil s'appelle 'url' et la commande à utiliser est helper(). +Charger l'interface visuelle (vue) qui contiendra le formulaire. Nous allons l'appeler 'formulaire_ajout_vue' et la commande est view(). +En utilisant la syntaxe $this->load->..., comment écrirais-tu ces deux lignes complètes à l'intérieur de ta fonction ajouter() ? + + + + diff --git a/README.md b/README.md index 409b542..fc67103 100644 --- a/README.md +++ b/README.md @@ -9,5 +9,5 @@ Ce projet a pour but de créer une application web en PHP avec CodeIgniter 3 pou ## Accès à l'application L'application est déployée et consultable à l'adresse suivante : -https://dwarves.iut-fbleau.fr/~doucoure/sae_r301_gr12/ +https://dwarves.iut-fbleau.fr/~doucoure/sae_r301_g12/codeigniter-develop/index.php/ SAE S2.02 \ No newline at end of file diff --git a/codeigniter-develop/application/config/autoload.php b/codeigniter-develop/application/config/autoload.php index 7cdc901..6f31b14 100644 --- a/codeigniter-develop/application/config/autoload.php +++ b/codeigniter-develop/application/config/autoload.php @@ -89,7 +89,7 @@ $autoload['drivers'] = array(); | | $autoload['helper'] = array('url', 'file'); */ -$autoload['helper'] = array(); +$autoload['helper'] = array('url','form'); /* | ------------------------------------------------------------------- diff --git a/codeigniter-develop/application/config/config.php b/codeigniter-develop/application/config/config.php index 11d76cf..bea9f18 100644 --- a/codeigniter-develop/application/config/config.php +++ b/codeigniter-develop/application/config/config.php @@ -23,7 +23,7 @@ defined('BASEPATH') OR exit('No direct script access allowed'); | a PHP script and you can easily do that on your own. | */ -$config['base_url'] = 'https://dwarves.iut-fbleau.fr/~doucoure/sae_r301_gr12/codeigniter-develop/'; +$config['base_url'] = 'https://dwarves.iut-fbleau.fr/~doucoure/sae_r301_g12/codeigniter-develop/'; /* |-------------------------------------------------------------------------- diff --git a/codeigniter-develop/application/controllers/Jeux.php b/codeigniter-develop/application/controllers/Jeux.php new file mode 100644 index 0000000..bbd2b1f --- /dev/null +++ b/codeigniter-develop/application/controllers/Jeux.php @@ -0,0 +1,75 @@ +load->helper('url'); + $this->load->helper('form'); + $this->load->view("formulaire_ajout"); + } + + public function sauvegarder() { + $this->load->helper('url'); + $titre = $this->input->post('titre'); + $annee = $this->input->post('annee'); + $description = $this->input->post('description'); + $prix = $this->input->post('prix'); + + $this->load->model('Game_model'); + + $insertion_reussie = $this->Game_model->ajouter_jeu($titre, $annee, $description, $prix); + if ($insertion_reussie) { + echo "

Le jeu " . $titre . " a bien été ajouté à la base de données.

"; + echo "Ajouter un autre jeu"; + } else { + echo "

Erreur de la base de données :

"; + print_r($this->db->error()); + } + } + + public function supprimer($id) { + $this->load->model('Game_model'); + + $supr = $this->Game_model->supprimer_jeu($id); + + if ($supr) { + echo "

Le jeu numéro " . $id . " a bien été supprimé de la base de données !

"; + } else { + echo "

impossible de supprimer le jeu.

"; + } + } + + // 1. Affiche le formulaire pré-rempli + public function modifier($id) { + $this->load->model('Game_model'); + + // On récupère les infos du jeu + $donnees['jeu'] = $this->Game_model->get_jeu($id); + + // Si le jeu n'existe pas, on arrête tout + if (empty($donnees['jeu'])) { + show_404(); // Affiche la page d'erreur 404 de CodeIgniter + } + + // On charge la vue en lui passant les infos du jeu + $this->load->view('formulaire_ajout', $donnees); + } + + public function mettre_a_jour($id) { + $titre = $this->input->post('titre'); + $annee = $this->input->post('annee'); + $description = $this->input->post('description'); + $prix = $this->input->post('prix'); + + $this->load->model('Game_model'); + $maj = $this->Game_model->modifier_jeu($id, $titre, $annee, $description, $prix); + + if ($maj) { + echo "

Le jeu " . html_escape($titre) . " a bien été modifié.

"; + echo "Retour à l'ajout"; + } else { + echo "

Erreur lors de la modification.

"; + } + } +} diff --git a/codeigniter-develop/application/models/Game_model.php b/codeigniter-develop/application/models/Game_model.php index 13b9ec9..41b626b 100644 --- a/codeigniter-develop/application/models/Game_model.php +++ b/codeigniter-develop/application/models/Game_model.php @@ -56,6 +56,39 @@ class Game_model extends CI_Model { return $query->row_array(); } + + public function ajouter_jeu($titre, $annee, $description, $prix) { + $donnees = array( + 'name' => $titre, + 'releaseYear' => $annee, + 'shortDescription' => $description, + 'price' => empty($prix) ? NULL : $prix + ); + return $this->db->insert('game', $donnees); + } + + public function supprimer_jeu($id) { + return $this->db->delete('game', array('id' => $id)); + } + + public function get_jeu($id) { + $leJeu = $this->db->get_where('game', array('id' => $id)); + return $leJeu->row_array(); + } + + public function modifier_jeu($id, $titre, $annee, $description, $prix) { + $donnees = array( + 'name' => $titre, + 'releaseYear' => $annee, + 'shortDescription' => $description, + 'price' => empty($prix) ? NULL : $prix + ); + + $this->db->where('id', $id); + return $this->db->update('game', $donnees); + } + + } diff --git a/codeigniter-develop/application/views/formulaire_ajout.php b/codeigniter-develop/application/views/formulaire_ajout.php new file mode 100644 index 0000000..35187e5 --- /dev/null +++ b/codeigniter-develop/application/views/formulaire_ajout.php @@ -0,0 +1,37 @@ +

+ + + +

+ + +

+ +

+ + +

+ +

+
+ +

+ +

+ + +

+ +

+ +

+ + \ No newline at end of file