From 29df6f1362745eabf4fbcaedf309eb63795152fa Mon Sep 17 00:00:00 2001 From: polo Date: Mon, 29 Nov 2021 03:25:19 +0100 Subject: discographie --- controller/admin.php | 92 ++++++++++++++++++++----------------------- controller/ckeditor.php | 63 +++++++++++++++-------------- controller/visitor.php | 55 ++++++++++---------------- index.php | 39 +++++++++--------- lisez-moi.txt | 11 +++--- model/Album.php | 73 +++++++++++++++++++++++++++++----- model/Image.php | 16 ++++---- model/Page.php | 15 +++++-- view/discographie.php | 48 +++++++++++----------- view/template-formulaires.php | 10 +++-- 10 files changed, 235 insertions(+), 187 deletions(-) diff --git a/controller/admin.php b/controller/admin.php index 90924e0..e319c80 100644 --- a/controller/admin.php +++ b/controller/admin.php @@ -1,15 +1,15 @@ findFileName($numArticle); - $_SESSION['nomFichier'] = $Article->fileName; + $_SESSION['target'] = $Article->fileName; // suppression if($suppression) @@ -42,10 +42,10 @@ function melaineEdit($numArticle, $suppression) $articles = array_reverse($Article->readAll()); // lourd // sécurisation du contenu pré-existant inséré dans l'éditeur - if($numArticle >= 0 && !$suppression) + if($numArticle > 0 && !$suppression) { require('controller/ckeditor.php'); - $texte = preparationCKeditor($numArticle, $texte); + $texte = preparationCKeditor($texte); } // NB: penser à ajouter au template la fonctionnalité "autosave" @@ -61,104 +61,96 @@ function melaineEdit($numArticle, $suppression) require('view/template.php'); } -function discoEdit($numArticle, $albumCode, $suppression) +function discoEdit($albumCode, $suppression) { $page_actuelle = "discographie"; $title = "Discographie"; // modèle - $Album = new Album($page_actuelle); - $Album->makeFileList(); + $Albums = new Album($page_actuelle); + $Albums->makeFileList(); // nouvel album - if($numArticle == 0) + if($albumCode == '') { + unset($_SESSION['target']); $title = "Ajouter un album"; + + // formulaires vides + $vignette = ['', '', '']; $texte = ''; } else { - // nom de l'article ciblé (objet et session) - $Album->findFileName($numArticle); - $_SESSION['nomFichier'] = $Album->fileName; + // album ciblé + $Albums->albumCode = $albumCode; // suppression if($suppression) { - $Album->delete(); + $Albums->delete(); header('Location: index.php?page=' . $page_actuelle); exit(); } // modification else { + $_SESSION['target'] = $Albums->albumCode; $title = "Modifier un album"; - $texte = $Album->readOneAlbum($albumCode); - $vignette = json_decode($Album->getVignette(), true); + $texte = $Albums->readOneHTML($albumCode); + $vignette = $Albums->getVignetteJSON(); } } // traitements PHP pour l'éditeur // sécurisation du contenu pré-existant inséré dans l'éditeur - if($numArticle >= 0 && !$suppression) + if(!empty($albumCode) && !$suppression && !empty($texte)) { require('controller/ckeditor.php'); - $texte = preparationCKeditor($numArticle, $texte); + $texte = preparationCKeditor($texte); } + // préremplir le champ + // c'est normallement impossible + // contenu de tous les fichiers JSON (= tableau de chaines) - $albumsJSON = $Album->readAll(); + $albumsJSON = $Albums->readAll(); // noms des fichiers JSON - $albumNamesJSON = $Album->fileList; + $albumNamesJSON = $Albums->fileList; - // changer les chaines JSON en tableaux: titre, année, pochette - $i = 0; - $annees = array(); - foreach($albumsJSON as $oneAlbum) + $annees = []; + for($i = 0; $i < count($albumsJSON); $i++) { - $albumsJSON[$i] = json_decode($oneAlbum, true); + // une case supplémentaire contient le "albumCode" + $albumsJSON[$i][3] = pathinfo($albumNamesJSON[$i])['filename']; - // ajout des noms des fichiers JSON - $albumsJSON[$i][3] = $albumNamesJSON[$i]; $annees[$i] = $albumsJSON[$i][1]; - $i++; } - print_r($albumsJSON); - //exit(); + // tri d'un tableau multidimensionnel array_multisort($annees, $albumsJSON); - // on passe maintenant au contenu HTML - $Album->format = 'html'; - $Album->makeFileList(); - $albumNamesHTML = $Album->fileList; - // lien vers le HTML ou ancre? - // pour chaque album, détecter le fichier html - // si non, ne fournir qu'un lien d'ancre pour la liste d'album - $i = 0; $avecLien = []; - foreach($albumsJSON as $oneAlbum) + $linkDiscoChrono = []; + for($i = 0; $i < count($albumsJSON); $i++) { - // nom sans extension - $chemin = pathinfo($oneAlbum[3]); - $nomJSONsansExt = $chemin['filename']; - - // au cas où la discographie ne contient aucun html - if(!empty($albumNamesHTML)) + // cas particulier où le dossier "html" est vide + if(!empty($Albums->fileList)) { - if(file_exists('data/discographie/html/' . $nomJSONsansExt . '.html')) + if(file_exists('data/discographie/html/' . $albumsJSON[$i][3] . '.html')) { - $lienAlbum[$i] = 'album&album_code=' . $nomJSONsansExt . '&album_name=' . $albumsJSON[$i][0]; - $lienBoutonModif[$i] = 'discographie&action=edition&album_code=' . $nomJSONsansExt; + $lienAlbum[$i] = 'page=album&album_name=' . $albumsJSON[$i][0] . '&album_code=' . $albumsJSON[$i][3]; $avecLien[$i] = true; + $linkDiscoChrono[$i] = 'linkChrono'; // css } else { - $lienAlbum[$i] = 'discographie#' . $albumsJSON[$i][0]; + $lienAlbum[$i] = 'page=discographie#' . $albumsJSON[$i][0]; $avecLien[$i] = false; + $linkDiscoChrono[$i] = 'noLinkChrono'; // css } - $i++; + $lienBoutonModif[$i] = 'page=discographie&action=edition&album_code=' . $albumsJSON[$i][3]; } } diff --git a/controller/ckeditor.php b/controller/ckeditor.php index 2b9f168..661e0e3 100644 --- a/controller/ckeditor.php +++ b/controller/ckeditor.php @@ -7,41 +7,33 @@ // il y a aussi un fichier CSS parce que le HTML créé par l'éditeur ne suffit pas à lui-même // avant de placer l'éditeur -function preparationCKeditor($numArticle, $texte) +function preparationCKeditor($html) { - // ici $numArticle sert uniquement à savoir si on crée ou modifie un article + // texte initial inséré avec setData() dans l'éditeur + // danger! + // setData() n'insère pas le texte si il ne respecte pas certains critères, l'utilisateur risque de perdre des données en validant un nouveau contenu sans avoir pu modifier l'ancien - // texte initial inséré avec setData() dans l'éditeur, - // on recherche ici les causes expliquant qu'il n'apparaisse pas à l'ouverture de l'éditeur, - // les données précédentes sont écrasées à la validation du nouveau texte - if ($numArticle > 0) + if(empty($html)) { - if(empty($texte)) - { - header('Location: index.php?erreur=empty_input'); - } + header('Location: index.php?erreur=empty_input'); + } - // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine - $texte = trim($texte); + // supprimer espaces, tabulations et sauts de ligne en début et fin de chaine + $html = trim($html); - // supprimer les sauts de ligne - $sautsDeLigne = array("\n", "\r", "\r\n"); - $texte = str_replace($sautsDeLigne, '', $texte); + // supprimer les sauts de ligne + $sautsDeLigne = array("\n", "\r", "\r\n"); + $html = str_replace($sautsDeLigne, '', $html); - // échapper tous les ', ", \ et caractère NULL - $texte = addslashes($texte); - } - else - { - $texte = ''; // nouveau contenu - } + // échapper tous les ', ", \ et caractère NULL + $html = addslashes($html); - return($texte); + return($html); } // réception du HTML créé par l'éditeur // le nom du fichier est celui dans $_SESSION['nomFichier'] -function submitCKeditor($nomFichier) +function submitCKeditor($target) { $page = $_GET['page']; @@ -79,10 +71,10 @@ function submitCKeditor($nomFichier) $Album = new Album($page); // enregistrement - if($_GET['article'] == 0) + if($target == '') { // page disco - $Album->createVignette($titre, $annee, $pochette); + $_SESSION['erreur'] = $Album->createVignette($titre, $annee, $pochette); // page de l'album if(!empty($_POST['contenu'])) @@ -92,28 +84,35 @@ function submitCKeditor($nomFichier) } else { + $Album->albumCode = $target; + // page disco - $Album->updateVignette($titre, $annee, $pochette); - + $_SESSION['erreur'] = $Album->updateVignetteJSON($titre, $annee, $pochette); + // page de l'album if(isset($_POST['contenu'])) { - $Album->update($content); + $Album->format = 'html'; + $Album->setFileName(); + if(!empty($Album->fileName)) + { + $Album->update($_POST['contenu']); + } } } } // autres pages else { - $Article = new Page($page, 'html'); + $Article = new Page($page); - if($_GET['article'] == 0) + if($target == '') { $Article->create($contenu); } else { - $Article->fileName = $nomFichier; + $Article->fileName = $target; $Article->update($contenu); } } diff --git a/controller/visitor.php b/controller/visitor.php index 0e79ee2..6c6146b 100644 --- a/controller/visitor.php +++ b/controller/visitor.php @@ -1,7 +1,7 @@ makeFileList(); + $Albums = new Album($page_actuelle); + $Albums->makeFileList(); // contenu de tous les fichiers JSON (= tableau de chaines) - $albumsJSON = array_reverse($AllAlbums->readAll()); + $albumsJSON = $Albums->readAll(); // noms des fichiers JSON - $albumNamesJSON = $AllAlbums->fileList; + $albumNamesJSON = $Albums->fileList; - // changer les chaines JSON en tableaux: titre, année, pochette - $i = 0; - $annees = array(); - foreach($albumsJSON as $oneAlbum) + $annees = []; + for($i = 0; $i < count($albumsJSON); $i++) { - $albumsJSON[$i] = json_decode($oneAlbum, true); - $annees[$i] = $albumsJSON[$i][1]; + // une case supplémentaire contient le "albumCode" + $albumsJSON[$i][3] = pathinfo($albumNamesJSON[$i])['filename']; - // ajout des noms des fichiers JSON - $albumsJSON[$i][3] = $albumNamesJSON[$i]; - - $i++; + $annees[$i] = $albumsJSON[$i][1]; } + // tri d'un tableau multidimensionnel array_multisort($annees, $albumsJSON); - // on passe maintenant au contenu HTML - $AllAlbums->format = 'html'; - $AllAlbums->makeFileList(); - $albumNamesHTML = $AllAlbums->fileList; - // lien vers le HTML ou ancre? - // pour chaque album, détecter le fichier html - // si non, ne fournir qu'un lien d'ancre pour la liste d'album - $i = 0; + $lienAlbum = []; $avecLien = []; $linkDiscoChrono = []; - foreach($albumsJSON as $oneAlbum) + for($i = 0; $i < count($albumsJSON); $i++) { - // nom sans extension - $chemin = pathinfo($oneAlbum[3]); - $nomJSONsansExt = $chemin['filename']; - - // au cas où la discographie ne contient aucun html - if(!empty($albumNamesHTML)) + // cas particulier où le dossier "html" est vide + if(!empty($Albums->fileList)) { - if(file_exists('data/discographie/html/' . $nomJSONsansExt . '.html')) + if(file_exists('data/discographie/html/' . $albumsJSON[$i][3] . '.html')) { - $lienAlbum[$i] = 'album&album_code=' . $nomJSONsansExt . '&album_name=' . $albumsJSON[$i][0]; + $lienAlbum[$i] = 'page=album&album_name=' . $albumsJSON[$i][0] . '&album_code=' . $albumsJSON[$i][3]; $avecLien[$i] = true; $linkDiscoChrono[$i] = 'linkChrono'; // css } else { - $lienAlbum[$i] = 'discographie#' . $albumsJSON[$i][0]; + $lienAlbum[$i] = 'page=discographie#' . $albumsJSON[$i][0]; $avecLien[$i] = false; $linkDiscoChrono[$i] = 'noLinkChrono'; // css } - $i++; + $lienBoutonModif[$i] = 'page=discographie&action=edition&album_code=' . $albumsJSON[$i][3]; } } @@ -122,7 +107,7 @@ function album($albumCode, $albumName) $page_actuelle = 'discographie'; $title = $albumName; - $album = Album::readOneAlbum($albumCode); // simple, efficace + $album = Album::readOneHTML($albumCode); // simple, efficace // variables $css, $header et $content require('view/album.php'); diff --git a/index.php b/index.php index a534ddf..a34a4be 100644 --- a/index.php +++ b/index.php @@ -47,6 +47,12 @@ // infos: https://fr.wikipedia.org/wiki/Cross-site_request_forgery session_start(); +if(!empty($_SESSION['erreur'])) +{ + echo(''); + unset($_SESSION['erreur']); +} + // au premier démarrage du site // l'explication des éventuels problèmes de droits en lecture/écriture est à chercher ici: require('controller/installation.php'); @@ -58,8 +64,10 @@ installation(); if(isset($_GET['action']) && isset($_GET['page']) && $_GET['action'] == 'upload_image') { // et une backdoor de fermée! - if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1 || !isset($_FILES['upload']) || empty($_FILES['upload'])) + if(!isset($_SESSION['admin']) || $_SESSION['admin'] != 1 + || !isset($_FILES['upload']) || empty($_FILES['upload'])) { + // sans effet? header('Location: index.php?erreur=image_ajax'); } else @@ -90,9 +98,9 @@ if(isset($_SESSION['admin']) && $_SESSION['admin'] == 1 } // modification - if(isset($_SESSION['nomFichier'])) + if(isset($_SESSION['target'])) { - submitCKeditor($_SESSION['nomFichier']); + submitCKeditor($_SESSION['target']); } // nouvel article else @@ -179,10 +187,8 @@ if(isset($_GET['page'])) else { // par sécurité - if(isset($_SESSION['nomFichier'])) - { - unset($_SESSION['nomFichier']); - } + unset($_SESSION['nomFichier']); + melaineEdit(0, 0); } } @@ -202,29 +208,24 @@ if(isset($_GET['page'])) if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'edition') { // modification - if(isset($_GET['album']) && is_numeric($_GET['album']) && $_GET['album'] > 0) + if(isset($_GET['album_code']) || !empty($_GET['album_code'])) { - if(!isset($_GET['album_code'])) - { - $_GET['album_code'] = ''; - } - discoEdit($_GET['album'], $_GET['album_code'], 0); + discoEdit($_GET['album_code'], 0); } // nouvel article else { // par sécurité - if(isset($_SESSION['nomFichier'])) - { - unset($_SESSION['nomFichier']); - } - discoEdit(0, '', 0); + $_GET['album_code'] = ''; + unset($_SESSION['nomFichier']); + + discoEdit('', 0); } } // suppression else if($_SESSION['admin'] == 1 && isset($_GET['action']) && $_GET['action'] == 'suppression') { - discoEdit($_GET['album'], '', 1); + discoEdit($_GET['album_code'], 1); } else { diff --git a/lisez-moi.txt b/lisez-moi.txt index f15c227..255b452 100644 --- a/lisez-moi.txt +++ b/lisez-moi.txt @@ -1,20 +1,20 @@ Pré-requis: -- Un serveur apache avec PHP. +- Un serveur apache exécutant PHP. - Le n'utilise pas de base de données mais un ensemble de fichiers HTML. -- Le module GD de PHP qui est une dépendance du "kcfinder" (bibliothèque nécessaire à l'upload d'image dans le ckeditor). +- Le module GD de PHP pour créer des miniatures des photos (bande passante). - La possibilité d'utiliser un fichier .htaccess pour la sécurité (du mot de passe admin en particulier). -- L'admin du site (Melaine lui-même à priori) ne doit pas utiliser un navigateur trop vieux (pour le code javascript du ckeditor). +- Le responsable du site (Melaine) ne doit pas utiliser un navigateur trop vieux (ckeditor). Informations: -Le site n'utilise pas de base de données mais à la place un ensemble de fichiers. Le dossier data contient des dossiers "html" et "images". +Le site n'utilise pas de base de données mais à la place un ensemble de fichiers. Le dossier data contient des dossiers "html" et "images", ainsi qu'un dossier 'json'. - Les premiers contiennent le texte sous forme de fichiers HTML. - Les seconds les images ainsi qu'un dossier "thumbnails" (chargement rapide des pages). Le code suit une architecture modèle-vue-contrôleur, il n'utilise pas de framework. - Il n'est pas possible pour l'instant d'uploader du multimedia (son et video). Peut-être plus tard. -- La fonctionnalité d'embarquer du multimedia (mettre une video youtube dans la page) n'est pas prévue. +- Il n'est pas possible non plus d'embarquer du multimedia (son et vidéo hébergé ailleurs). Peut-être plus tard. Installation: @@ -24,6 +24,7 @@ Installation: chmod -R 777 data Le php se chargera des ajustements (supprimer l'autorisation des fichiers en exécution, permettre à l'utilisateur de manipuler les nouveaux fichiers sans accès root, créer un backup des données). - Autoriser le .htaccess (normalement par une manipulation dans le fichier /etc/php/php.ini du serveur) +- Augmenter la taille maximale des fichiers (par défaut de 2Mo) pouvant être téléchargés dans le php.ini, ainsi que dans le fichier model/Image.php. Une taille max de 5Mo est très raisonnable. Redirections: diff --git a/model/Album.php b/model/Album.php index 2254c10..1631c46 100644 --- a/model/Album.php +++ b/model/Album.php @@ -6,6 +6,7 @@ class Album extends Page // classe "objet" public function __construct($page) { $this->page = $page; + $this->albumCode = ''; // désigne un fichier json et un html $this->format = 'json'; // vaut 'html' dans la classe mère $this->time = time(); } @@ -19,7 +20,7 @@ class Album extends Page // classe "objet" // create public function createVignette($titre, $annee, $pochette) { - $this->format = 'json'; + //$this->format = 'json'; if($pochette != '') { @@ -28,7 +29,7 @@ class Album extends Page // classe "objet" $Image = new Image(false); $Image->upload(); - /*$erreur = $Image->getError(); + /*$erreur = $Image->erreur; if(!empty($erreur)) {}*/ } @@ -41,18 +42,41 @@ class Album extends Page // classe "objet" fputs($fichier, $albumJSON); fclose($fichier); chmod($nom_fichier, 0666); + + return($Image->erreur); } // read - public function getVignette() + public function readAll() + { + // lecture des données + $albumsJSON = parent::readAll(); + + // conversion des chaines JSON en tableaux: titre, année, pochette + for($i = 0; $i < count($albumsJSON); $i++) + { + $albumsJSON[$i] = json_decode($albumsJSON[$i], true); + } + + return($albumsJSON); + } + + public function getVignetteJSON() { - return(file_get_contents($this->fileName)); + return(json_decode(file_get_contents('data/discographie/json/' . $this->albumCode . '.json'))); } // page de l'album - public static function readOneAlbum($albumCode) + public static function readOneHTML($albumCode) { - return(file_get_contents('data/discographie/html/' . $albumCode . '.html')); + if(file_exists('data/discographie/html/' . $albumCode . '.html')) + { + return(file_get_contents('data/discographie/html/' . $albumCode . '.html')); + } + else + { + return(''); + } } // pour afficher des dates @@ -64,12 +88,43 @@ class Album extends Page // classe "objet" }*/ // update - public function updateVignette() - {} + public function updateVignetteJSON($titre, $annee, $pochette) + { + // garder l'ancienne image + $albumJSON = self::getVignetteJSON(); + + if($pochette == '') + { + $pochette = $albumJSON[2]; + } + else + { + // télécharger la pochette + require('model/Image.php'); + $Image = new Image(false); + $Image->upload(); + } + + $albumJSON = json_encode([$titre, $annee, $pochette]); + + // écriture + $nom_fichier = 'data/discographie/json/' . $this->albumCode . '.json'; + $fichier = fopen($nom_fichier, 'w+'); // w pour créer ou écraser + fputs($fichier, $albumJSON); + fclose($fichier); + chmod($nom_fichier, 0666); + + return($Image->erreur); + } // delete public function delete() { - unlink($this->fileName); + unlink('data/' . $this->page . '/' . $this->format . '/' . $this->albumCode . '.json'); + + if(file_exists('data/' . $this->page . '/html/' . $this->albumCode . '.html')); + { + unlink('data/' . $this->page . '/html/' . $this->albumCode . '.html'); + } } } diff --git a/model/Image.php b/model/Image.php index efd75cc..51d2fa4 100644 --- a/model/Image.php +++ b/model/Image.php @@ -3,10 +3,10 @@ class Image { - private const MAX_WEIGHT = 2000000; // taille max des images (par défaut 2Mo dans php.ini) + private const MAX_WEIGHT = 2000000; // à adapter au php.ini private $page; - private $ajax = false; - public $erreur = ''; + private $ajax = false; // vaut true avec le ckeditor + public $erreur; public function __construct($ajax) { @@ -37,19 +37,21 @@ class Image } else{$this->erreur = 'mauvais format, veuillez utiliser une image comportant un de ces formats: jpg ou jpeg, png, gif, bmp, webp, tiff
le format svg n\'est pas supporté';} } - else{$this->erreur = 'fichier trop lourd';} + else + { + $this->erreur = 'erreur du serveur: le fichier téléchargé est trop lourd, poids max = ' . self::MAX_WEIGHT . ' octets'; + } } else { - $this->erreur = $_FILES['upload']['error']; + $this->erreur = 'erreur du serveur: le fichier téléchargé est trop lourd, poids max = ' . self::MAX_WEIGHT . ' octets'; } // retour des rêquetes AJAX - if($this->ajax) + if($this->ajax && empty($Image->erreur)) { // nouveau chemin à renvoyer en format json $chemin = '{"url": "data/' . $this->page . '/images/' . $_FILES['upload']['name'] . '"}'; - //echo json_encode($chemin); echo $chemin; } } diff --git a/model/Page.php b/model/Page.php index e03efe1..63730d8 100644 --- a/model/Page.php +++ b/model/Page.php @@ -13,10 +13,9 @@ class Page // classe "objet" public $fileName = ''; // correspond à $_SESSION['nomFichier'] protected $time; // timestamp pour noms des fichiers créés - public function __construct($page, $format) + public function __construct($page) { $this->page = $page; - $this->format = $format; $this->time = time(); $this->makeFileList(); } @@ -39,6 +38,14 @@ class Page // classe "objet" } } + public function setFileName() + { + if(file_exists('data/' . $this->page . '/' . $this->format . '/' . $this->albumCode . '.' . $this->format)) + { + $this->fileName = 'data/' . $this->page . '/' . $this->format . '/' . $this->albumCode . '.' . $this->format; + } + } + // GET // SET @@ -48,7 +55,7 @@ class Page // classe "objet" // create public function create($content) { - $format = 'html'; + //$format = 'html'; // nommer les fichiers avec le timestamp pour: // - les trier par ordre chronologique @@ -65,7 +72,7 @@ class Page // classe "objet" public function readAll() { $i = 0; - $articles = array(); + $articles = []; foreach ($this->fileList as $oneFile) { $articles[$i] = file_get_contents($oneFile); diff --git a/view/discographie.php b/view/discographie.php index 25b82e1..d9bc6be 100644 --- a/view/discographie.php +++ b/view/discographie.php @@ -49,16 +49,15 @@ ob_start();
= 0; $i--) +//for($i = 0; $i < count($albumsJSON); $i++) //foreach($albumsJSON as $oneAlbum) { - // mettre une adresse lorsqu'un fichier html existe - // si il n'existe pas, mettre une ancre vers l'endroit sur la page + // menu dessous la mouette + // comporte un lien si fichier html existe, sinon une ancre ?> -

+

-

@@ -66,9 +65,10 @@ for($i = count($albumsJSON) - 1; $i >= 0; $i--)

Ajouter un album

@@ -88,31 +88,36 @@ if($_SESSION['admin'] == 1) } // tableau des albums -//$i = count($albumsJSON); -$i = 0; -//for($i = count($albumsJSON) - 1; $i >= 0; $i--) -foreach($albumsJSON as $oneAlbum) +for($i = count($albumsJSON) - 1; $i >= 0; $i--) +//for($i = 0; $i < count($albumsJSON); $i++) { - //$i--; - // modification - if(false) - {} + // formulaires et éditeur + // comparer le GET avec $albumsJSON[3] + if(isset($_GET['action']) && $_GET['action'] == 'edition' + && $albumsJSON[$i][3] == $_GET['album_code']) + { + ?> +

Modifier un album

+ + -
diff --git a/view/template-formulaires.php b/view/template-formulaires.php index 391f729..e864719 100644 --- a/view/template-formulaires.php +++ b/view/template-formulaires.php @@ -18,14 +18,16 @@ // variable $inputsAlbum (page discographie uniquement) +// note: on ne peut préremplir le champ input texte +// solution: on affiche le nom du fichier, si l'utilisateur en télécharge un autre, on le remplace ob_start(); ?>

Infos qui seront affichées sur cette page:

-
+
-
- +
+


-
+