From dab366607aa2c760177de95a05bc396e19342657 Mon Sep 17 00:00:00 2001 From: doucoure Date: Fri, 5 Jun 2026 23:56:12 +0200 Subject: [PATCH 1/3] =?UTF-8?q?ajout=20gestion=20des=20jeux=20(ajout,=20mo?= =?UTF-8?q?dif,=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 -- 2.54.0 From 181b16c3dffeeb0e19d78ec547a19ac0cbf528ca Mon Sep 17 00:00:00 2001 From: doucoure Date: Sat, 6 Jun 2026 00:05:54 +0200 Subject: [PATCH 2/3] correction affichage du journal --- JOURNAL.md | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/JOURNAL.md b/JOURNAL.md index 1a27be9..49d319f 100644 --- a/JOURNAL.md +++ b/JOURNAL.md @@ -18,23 +18,23 @@ **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. -"#" 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 -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. -"*" 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 (deux de chaque côté) : Met le mot en gras (très pratique pour faire ressortir les mots-clés). +**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. +> "#" 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 +> 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. +> "*" 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 (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. @@ -81,12 +81,8 @@ 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. +* 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() ? - - - - +En utilisant la syntaxe $this->load->..., comment écrirais-tu ces deux lignes complètes à l'intérieur de ta fonction ajouter() ? \ No newline at end of file -- 2.54.0 From 523d84db06841456891139f244e04550cdf7b5be Mon Sep 17 00:00:00 2001 From: doucoure Date: Sat, 6 Jun 2026 00:09:18 +0200 Subject: [PATCH 3/3] correction affichage du journal --- JOURNAL.md | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/JOURNAL.md b/JOURNAL.md index 49d319f..6f61072 100644 --- a/JOURNAL.md +++ b/JOURNAL.md @@ -1,40 +1,37 @@ # Journal de Bord - SAE S2.02 ## Séance 1 -**Objectif de la séance :** Mettre en place le projet . +**Objectif de la séance :** Mettre en place le projet. **Travail réalisé :** * Création du dépôt sur Grond et ajout des collaborateurs (Ulysse Jarnouen, Denis Monnerat). * Création du fichier "README.md". * Création du fichier "JOURNAL.md". -**Difficultés rencontrées :** Nous avons des tp de retard donc on ne vas pas commecer le projet dans cette séance mais la prochaine. +**Difficultés rencontrées :** Nous avons des TP de retard donc on ne va pas commencer le projet dans cette séance mais la prochaine. **Décisions prises :** Mise en place du workflow Git avec une branche dédiée par séance. -**Travail de chacun :** Pour cette séance on est ensemble et on configuration le Git et dépôt. +**Travail de chacun :** Pour cette séance on est ensemble et on configure le Git et le dépôt. -**Points à reprendre à la séance suivante :** Commencer réellement le projet +**Points à reprendre à la séance suivante :** Commencer réellement le projet. **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. +**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. > "#" 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 > 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. -> "*" 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) : +> 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. +> 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 (deux de chaque côté) : Met le mot en gras (très pratique pour faire ressortir les mots-clés). +> '**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. -- 2.54.0