Système d'articles en PHP - #1 Rédaction et Affichage

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

On revoit un peu les bases du PHP en s'attaquant à un petit système d'articles avant de passer à du plus lourd (utilisation de slugs, expressions régulières, URL Rewriting, etc.) !

  • 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'] ?>"><?= $a['titre'] ?></a></li>
      <?php } ?>
   <ul>
</body>
</html>
  • redaction.php
<?php
$bdd = new PDO("mysql:host=127.0.0.1;dbname=articles;charset=utf8", "root", "");
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']);
      $ins = $bdd->prepare('INSERT INTO articles (titre, contenu, date_time_publication) VALUES (?, ?, NOW())');
      $ins->execute(array($article_titre, $article_contenu));
      $message = 'Votre article a bien été posté';
   } else {
      $message = 'Veuillez remplir tous les champs';
   }
}
?>
<!DOCTYPE html>
<html>
<head>
   <title>Rédaction</title>
   <meta charset="utf-8">
</head>
<body>
   <form method="POST">
      <input type="text" name="article_titre" placeholder="Titre" /><br />
      <textarea name="article_contenu" placeholder="Contenu de l'article"></textarea><br />
      <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();
      $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>
   <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 20

  • miam Le 19 juillet, à 23:54 (Édité le 19 juillet 2022 à 23:54) | Répondre

    Super bien fait ton tuto.

  • POL1 Le 11 mars, à 16:46 (Édité le 11 mars 2020 à 16:48) | Répondre

    Salut @Kocra !
    Il est bien entendu possible de styliser du contenu issu d'une base de données.
    Exemple :
    [div class="ma-classe"][?= $contenu ?][/div]
    [ et ] à remplacer par des chevrons.
    Va écrire le contenu de la variable $contenu dans la div avec comme classe "ma-classe". Dans le CSS, plus qu'à rajouter :
    .ma-classe {
    /* Style ici */
    }

  • Kocra Le 9 mars, à 18:57 | Répondre

    Je suis vraiment ravi de ce tuo , simple et claire. Mais j'aimerais savoir s'il est possible de styliser un contenu issus d'un base de données. Je suis un débutant!!!

  • kenn Le 19 novembre, à 10:34 | Répondre

    salut Prime Fx...
    mon systeme d'article fonctionne tres bien mais quand je rafraichi la page de la redaction l'article s'incremente en fonction du rafraichissement. que dois je faire?????

  • EnderMC Le 20 août, à 19:09 | Répondre

    Moi, ça ne marche ! J'utilise XAMPP. Et il y a beaucoup d'erreurs !

  • bisprotais2000 Le 19 mai, à 16:03 | Répondre

    bonjour je suis avec attention vos tutos c'est cool.j'ai cependant un gros problem: j'ai deja cree mon eespace membre , je sais creer l'espace commentaire ,mais comment autoriser seulement les membres connectes a poster des commentaires? aidez-moi je suis bloque

  • MrLiamsi Le 8 octobre, à 21:09 | Répondre

    @Balatharas Il m'a aussi déçu :D

  • christophe88 Le 15 mars, à 20:47 | Répondre

    Bonjour,
    J'ai suivi le tuto sur la création d'un article (n°1) ainsi que celui sur la réalisation de commentaires mais je n'arrive pas à insérer des commentaires dans mon article.

  • seboons Le 24 février, à 21:45 | Répondre

    Salut PrimFx, merci pour tes tutos ils sont bien sympa.

    J'essaie de traduire les requêtes préparées en requêtes sql plus classiques mais j'ai un peu de mal, j'apprends tout doucement, possible de m'aider ?

    Notamment pour ce bout de code
    Merci à toi et continue ce bon boulot !
    [code]$article = $bdd->prepare('SELECT * FROM articles WHERE id = ?');
    $article->execute(array($get_id));

    if($article->rowCount() == 1) {
    $article = $article->fetch();
    $titre = $article['titre'];
    $contenu = $article['contenu'];

    } else

    { die('Cet article n\'existe pas !'); }
    } else

    { die('Erreur');}
    ?>
    [/code]

  • patrick Le 11 octobre, à 23:55 | Répondre

    salut Boris flesch je suis vraiment ravie de ce que tu fait pour nous.mais moi je suis un peu débutant et je décide de créer mon site web peux tu m'aidé a créer ce site stp m'aidé jai acheté déjà le nom du domaine mais jais pas encore écrire le site

  • hughes Le 6 septembre, à 09:09 | Répondre

    Merci bcoups premfx je suis telement comter des ton travail

  • Cosmico Le 22 août, à 16:18 | Répondre

    Salut Beignet
    imaginons que j'ai un site avec une barre de navigation comportant 3 menus et chaque menu est lié à
    une table dans la base de donnée.
    -je voudrais créer un back office pour alimenter chacune de ces tables pour ensuite afficher le contenu dans mes menus.
    -Dans le formulaire d'insertion du back office je veux avoir un champ select pour selectionner la table vers laquelle j’envoie mon post.
    -comment gérer ce formulaire en php/mysql.
    J’espère que je me suis bien expliqué.
    Salut à tous......

  • Balatharas Le 21 août, à 12:20 | Répondre

    @Cosmico je n'ai pas compris ton problème, tu devrais créer un nouveau topic dans la section programmation/php

  • PaulLavieille Le 19 août, à 19:14 | Répondre

    @Beignet Je suis d'accord avec toi^^

  • Cosmico Le 19 août, à 19:11 | Répondre

    Salut PrimFx
    Je te suis depuis le Togo en Afrique de l'ouest
    Le système d'articles en PHP m'intéresse particulièrement
    Mais je suis débutant et j'ai un problème : lorsque le site à un menu composé de plusieurs éléments je veux faire un formulaire d'insertion d'articles où je veux sélectionner l'élément du menu et par conséquent la table liée à ce menu. Ainsi depuis le formulaire d'insertion d'articles je cible directement les les éléments de mon menu. Exemple un menu composé comme suit: accueil -articles - informations - publications.
    Je veux pouvoir un formulaire d'insertion dans lequel je choisis le menu vers lequel envoyer mon INSERT par exemple menu publications
    Si tu peux associer ce système dans la nouvelle série en cours ça me rendra un grand service
    Merci pour tout ce que tu fais... tu es bon

  • Balatharas Le 18 août, à 13:53 | Répondre

    Ok PrimFX ta besoin d'argent pour du matériel ou autre, mais de la a limiter a TROIS le nombre de fois ou on peux voir le code c'est très exagéré. Je te suis depuis toujours vraiment, depuis tes tutos cinema 4D mais la tu me déçoit..

  • lordmagikal Le 14 août, à 22:34 | Répondre

    @matteocharton Soit c'est une blague et j'ai pas compris :D soit tu n'eest pas doué car chez moi ça fonctionne très bien D

  • matteocharton Le 14 août, à 18:19 | Répondre

    cela ne marche pas du tout sur mon site ... dislike - 1 abo dsl

  • matteocharton Le 14 août, à 17:42 | Répondre

    Très bon tutoriel ! Que je vais modifier de ce pas pour mon site :D

  • lordmagikal Le 14 août, à 17:39 | Répondre

    Je me désabonne, à cause de ton maillot #TeamInstinct #Yellow. Tu croyais passé inaperçu en faisant passer ta propagande de #teamMystic DEMON ! Bouhhh :'D Sinon bonne vidéo, vivement la suite. J'espere y voir l'affichage plus complet (image de couverture, auteur+bio de celui-ci), pouvoir modifier l'article, integrer un module tinymce ou autres dans un cas concret :), et comme tu l'a dit pouvoir programmer la publication, mettre en attente. Enfin pour moi ce sera qu'une modification de celui que j'ai deja et ça me permettra de voir si j'ai bien codé par rapport à ce que tu fais comme boulot :) GL pour la suite, ça risque d'être long comme série si elle est bien complète :). Je la suivrai avec grand plaisir !