ajout gestion des jeux (ajout, modif, suppr) et maj journal séance 3 #4
+68
-20
@@ -8,30 +8,78 @@
|
|||||||
* Création du fichier "README.md".
|
* Création du fichier "README.md".
|
||||||
* Création du fichier "JOURNAL.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.
|
**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) :**
|
**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).
|
**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
|
**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.
|
||||||
Pull Request. Les symboles # et ## : Les Titres
|
> Les symboles '#' et '##' : Les Titres
|
||||||
Le nombre de # détermine l'importance et la taille du titre. C’est l’équivalent des balises <h1> et <h2> en HTML.
|
> Le nombre de '#' détermine l'importance et la taille du titre. C’est l’équivalent des balises '<h1>' et '<h2>' en HTML.
|
||||||
"#" Titre Principal : Crée un titre de niveau 1 (très grand, utilisé pour le nom du projet).
|
> "#" 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").
|
> "##" 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.
|
> "###" 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).
|
> 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 :
|
> 2. Le symbole '*' : Les listes et le style
|
||||||
Pour faire des listes à puces
|
> L'astérisque change de rôle selon la façon dont tu l'utilises :
|
||||||
Si tu places un * au tout début d'une ligne, suivi d'un espace, cela génère une liste propre.
|
> 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".
|
> Pour modifier le style du texte : Si tu colles les astérisques autour d'un mot ou d'une phrase (sans espace cette fois) :
|
||||||
"*" Tajeddine devient une puce avec "Tajeddine".
|
> '*texte*' (un seul de chaque côté) : Met le mot en italique.
|
||||||
Pour modifier le style du texte
|
> '**texte**' (deux de chaque côté) : Met le mot en gras (très pratique pour faire ressortir les mots-clés).
|
||||||
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.
|
## Séance 2
|
||||||
texte (deux de chaque côté) : Met le mot en gras (très pratique pour faire ressortir les mots-clés).
|
**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() ?
|
||||||
@@ -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
|
## Accès à l'application
|
||||||
L'application est déployée et consultable à l'adresse suivante :
|
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
|
SAE S2.02
|
||||||
@@ -89,7 +89,7 @@ $autoload['drivers'] = array();
|
|||||||
|
|
|
|
||||||
| $autoload['helper'] = array('url', 'file');
|
| $autoload['helper'] = array('url', 'file');
|
||||||
*/
|
*/
|
||||||
$autoload['helper'] = array();
|
$autoload['helper'] = array('url','form');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
| -------------------------------------------------------------------
|
| -------------------------------------------------------------------
|
||||||
|
|||||||
@@ -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.
|
| 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/';
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
||||||
|
|
||||||
|
class Jeux extends CI_Controller {
|
||||||
|
|
||||||
|
public function ajouter(){
|
||||||
|
$this->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 "<h2>Le jeu " . $titre . " a bien été ajouté à la base de données.</h2>";
|
||||||
|
echo "<a href='" . site_url('jeux/ajouter') . "'>Ajouter un autre jeu</a>";
|
||||||
|
} else {
|
||||||
|
echo "<h2>Erreur de la base de données :</h2>";
|
||||||
|
print_r($this->db->error());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function supprimer($id) {
|
||||||
|
$this->load->model('Game_model');
|
||||||
|
|
||||||
|
$supr = $this->Game_model->supprimer_jeu($id);
|
||||||
|
|
||||||
|
if ($supr) {
|
||||||
|
echo "<h2>Le jeu numéro " . $id . " a bien été supprimé de la base de données !</h2>";
|
||||||
|
} else {
|
||||||
|
echo "<h2>impossible de supprimer le jeu.</h2>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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 "<h2>Le jeu " . html_escape($titre) . " a bien été modifié.</h2>";
|
||||||
|
echo "<a href='" . site_url('jeux/ajouter') . "'>Retour à l'ajout</a>";
|
||||||
|
} else {
|
||||||
|
echo "<h2>Erreur lors de la modification.</h2>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -57,5 +57,38 @@ class Game_model extends CI_Model {
|
|||||||
return $query->row_array();
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<h2><?php echo isset($jeu) ? "Modifier le jeu" : "Ajouter un nouveau jeu"; ?></h2>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
if (isset($jeu)) {
|
||||||
|
// Si modification, on envoie vers la fonction de mise à jour avec l'ID
|
||||||
|
echo form_open('jeux/mettre_a_jour/' . $jeu['id']);
|
||||||
|
} else {
|
||||||
|
// Si ajout, on garde l'ancienne action
|
||||||
|
echo form_open('jeux/sauvegarder');
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<label for="titre">Titre du jeu :</label>
|
||||||
|
<input type="text" name="titre" id="titre" value="<?php echo isset($jeu) ? html_escape($jeu['name']) : ''; ?>" required>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<label for="annee">Année de sortie :</label>
|
||||||
|
<input type="number" name="annee" id="annee" value="<?php echo isset($jeu) ? html_escape($jeu['releaseYear']) : ''; ?>" required>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<label for="description">Description courte :</label><br>
|
||||||
|
<textarea name="description" id="description" rows="4" cols="50" required><?php echo isset($jeu) ? html_escape($jeu['shortDescription']) : ''; ?></textarea>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<label for="prix">Prix (en centimes) :</label>
|
||||||
|
<input type="number" name="prix" id="prix" value="<?php echo isset($jeu) ? html_escape($jeu['price']) : ''; ?>">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<button type="submit"><?php echo isset($jeu) ? "Mettre à jour" : "Enregistrer"; ?></button>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</form>
|
||||||
Reference in New Issue
Block a user