Système d'articles en PHP - #3 Miniatures

PrimFX Boris ('PrimFX') Le 29 août 2016

On continue à améliorer notre système d'articles en y ajoutant cette fois-ci la possibilité d'ajouter des miniatures !

Fonctions PHP utilisées :
Code du tuto :

  • index.php
<?php
$bdd = new PDO("mysql:host=127.0.0.1;dbname=articles;charset=utf8", "root", "");
$articles = $bdd->query('SELECT * FROM articles ORDER BY date_time_publication DESC');
?>
<!DOCTYPE html>
<html>
<head>
   <title>Accueil</title>
   <meta charset="utf-8">
</head>
<body>
   <ul>
      <?php while($a = $articles->fetch()) { ?>
      <li>
         <a href="article.php?id=<?= $a['id'] ?>">
            <img src="miniatures/<?= $a['id'] ?>.jpg" width="100" /><br />
            <?= $a['titre'] ?>
         </a>
          | <a href="redaction.php?edit=<?= $a['id'] ?>">Modifier</a> | <a href="supprimer.php?id=<?= $a['id'] ?>">Supprimer</a>
      </li>
      <?php } ?>
   <ul>
</body>
</html>
  • redaction.php
<?php
$bdd = new PDO("mysql:host=127.0.0.1;dbname=articles;charset=utf8", "root", "");
$mode_edition = 0;
if(isset($_GET['edit']) AND !empty($_GET['edit'])) {
   $mode_edition = 1;
   $edit_id = htmlspecialchars($_GET['edit']);
   $edit_article = $bdd->prepare('SELECT * FROM articles WHERE id = ?');
   $edit_article->execute(array($edit_id));
   if($edit_article->rowCount() == 1) {
      $edit_article = $edit_article->fetch();
   } else {
      die('Erreur : l\'article n\'existe pas...');
   }
}
if(isset($_POST['article_titre'], $_POST['article_contenu'])) {
   if(!empty($_POST['article_titre']) AND !empty($_POST['article_contenu'])) {
      
      $article_titre = htmlspecialchars($_POST['article_titre']);
      $article_contenu = htmlspecialchars($_POST['article_contenu']);
      if($mode_edition == 0) {
         // var_dump($_FILES);
         // var_dump(exif_imagetype($_FILES['miniature']['tmp_name']));
         $ins = $bdd->prepare('INSERT INTO articles (titre, contenu, date_time_publication) VALUES (?, ?, NOW())');
         $ins->execute(array($article_titre, $article_contenu));
         $lastid = $bdd->lastInsertId();
         
         if(isset($_FILES['miniature']) AND !empty($_FILES['miniature']['name'])) {
            if(exif_imagetype($_FILES['miniature']['tmp_name']) == 2) {
               $chemin = 'miniatures/'.$lastid.'.jpg';
               move_uploaded_file($_FILES['miniature']['tmp_name'], $chemin);
            } else {
               $message = 'Votre image doit être au format jpg';
            }
         }
         $message = 'Votre article a bien été posté';
      } else {
         $update = $bdd->prepare('UPDATE articles SET titre = ?, contenu = ?, date_time_edition = NOW() WHERE id = ?');
         $update->execute(array($article_titre, $article_contenu, $edit_id));
         header('Location: http://127.0.0.1/Tutos_PHP/Articles/article.php?id='.$edit_id);
         $message = 'Votre article a bien été mis à jour !';
      }
   } else {
      $message = 'Veuillez remplir tous les champs';
   }
}
?>
<!DOCTYPE html>
<html>
<head>
   <title>Rédaction / Edition</title>
   <meta charset="utf-8">
</head>
<body>
   <form method="POST" enctype="multipart/form-data">
      <input type="text" name="article_titre" placeholder="Titre"<?php if($mode_edition == 1) { ?> value="<?= 
      $edit_article['titre'] ?>"<?php } ?> /><br />
      <textarea name="article_contenu" placeholder="Contenu de l'article"><?php if($mode_edition == 1) { ?><?= 
      $edit_article['contenu'] ?><?php } ?></textarea><br />
      <?php if($mode_edition == 0) { ?>
      <input type="file" name="miniature" /><br />
      <?php } ?>
      <input type="submit" value="Envoyer l'article" />
   </form>
   <br />
   <?php if(isset($message)) { echo $message; } ?>
</body>
</html>
  • article.php
<?php
$bdd = new PDO("mysql:host=127.0.0.1;dbname=articles;charset=utf8", "root", "");
if(isset($_GET['id']) AND !empty($_GET['id'])) {
   $get_id = htmlspecialchars($_GET['id']);
   $article = $bdd->prepare('SELECT * FROM articles WHERE id = ?');
   $article->execute(array($get_id));
   if($article->rowCount() == 1) {
      $article = $article->fetch();
      $id = $article['id'];
      $titre = $article['titre'];
      $contenu = $article['contenu'];
   } else {
      die('Cet article n\'existe pas !');
   }
} else {
   die('Erreur');
}
?>
<!DOCTYPE html>
<html>
<head>
   <title>Accueil</title>
   <meta charset="utf-8">
</head>
<body>
   <img src="miniatures/<?= $id ?>.jpg" width="400" />
   <h1><?= $titre ?></h1>
   <p><?= $contenu ?></p>
</body>
</html>

A propos de l'auteur

PrimFX
Boris ('PrimFX')

Je m'appelle Boris, j'ai 22 ans et je suis passionné d'informatique. Suite à mes études (Licence Informatique puis MSc Computer Science au Trinity College Dublin), je gère l'entreprise Single Quote co-fondée en 2019 et je profite de mon temps libre pour partager ma passion à travers des vidéos & articles 😃

Votre commentaire

Vous devez être connecté pour poster un commentaire. Se connecter ou Créer un compte

Commentaires 17

  • Malcolm0609 Le 16 mars, à 16:27 | Répondre

    Salut super vidéos !
    Petite question, j'ai essayé d'associer des catégories à mes articles. Pour se faire j'ai créé une colonne dans ma base de donnée article. Le problème, c'est que je n'arrive pas à créer un page par catégorie, comment faut-il faire ? J'ai essayé d'utiliser les méthodes de ta série forum, mais impossible.

  • Loprima Le 6 février, à 13:11 | Répondre

    Je n'arrive pas a envoyer d'images ni a modifier les articles j'ai déja vérif que bdd été bon ):

  • Le_dev Le 29 juillet, à 15:07 | Répondre

    @Konaneddie si tu veut upload plusieurs image c simple fait un nouveau champ dans ta table image 2
    modifie le fichier redaction . php de sorte que il ya deux champ d'ajout de fichier et que chaque champ et connecté a un fichier de type miniatures/ et miniatures2/ etc ... voila et modifie index.php pour que chaque image apparaisse mais on ne peut pas du moins je ne sais pas comment mettre le nombre d'images que l'on souhaite

  • Konaneddie Le 13 avril, à 21:37 | Répondre

    Salut s'il vous plait si je veux upload plusieurs image comment je fais. Merci d'avance

  • Konaneddie Le 13 avril, à 21:37 | Répondre

    Salut s'il vous plait si je veux upload plusieurs image comment je fais. Merci d'avance

  • pauclair Le 3 décembre, à 20:56 | Répondre

    très bons TUTO comme d'habitude! je te remercie primfx mais si tu pouvais y faire un système de panier sa serrai peut-être plus complet... Non?

  • victan78 Le 24 février, à 15:21 | Répondre

    merci pour cette video :-)

  • DJOEL Le 19 février, à 20:51 | Répondre

    Malheuresement chez moi ça ne marche pas quoi faire ! Aider Moi

  • Kam3leoN Le 31 décembre, à 17:30 | Répondre

    Bonjour serait-il possible de rajouter les fonctions suivantes ?
    - Tags
    - Catégories
    - Une miniature par défaut

  • ets_raphael Le 19 mai, à 03:49 | Répondre

    Salut!!!!! J'aimerais bien un tuto qui intègre ton article a ton espace membre :')

  • dayve Le 20 avril, à 21:55 | Répondre

    pas mal ^^ ce tuto ma très bien aider ^^

  • Sheyla Le 3 février, à 23:45 | Répondre

    Sympas le tuto

  • Dinars Le 25 janvier, à 09:48 | Répondre

    Bonjour et merci pour ce tuto très instructif sur l'ajout de miniature. Dans la description de l'article (page index.php) peut-on faire un dégradé? C'est-à-dire de faire apparaître les deux ou trois premières lignes de l'article avec un jeu entre net et flou du haut vers le bas?

  • Blast0Kd Le 7 septembre, à 16:54 | Répondre

    [u]Bonjour à tous ![/u]
    [code]Vous allez bien ?[/code]

  • Balatharas Le 30 août, à 22:29 | Répondre

    Tiens tiens tu serais pas un peu en retard ?

  • Blast0Kd Le 30 août, à 19:38 | Répondre

    [code]Je suis d'accord ;)[/code]

  • samgaze Le 30 août, à 14:31 | Répondre

    Bonne vidéo :)