TUTORIELS 
PHP : Construire un weblog

Page 1 | 2 | 3 | 4

Une application complète, bâtie pas à pas, à mi-chemin entre le livre d'or et le gestionnaire de contenu.
 (30 janvier 2004)
 
Forums
* Discutez en sur les forums
Les weblogs ou "blogs" prolifèrent à l'heure actuelle, y compris en entreprise, et avec eux une véritable communauté se créé autour de centres d'intérêts tout aussi divers que potentiellement passionnants.
Nous vous proposons ici de construire le vôtre, à l'aide de PHP4 et de MySQL. Certes, il existe sur le "marché" une poignée d'excellentes solutions gratuites (dont Dotclear ou b2evolution par exemple), mais le but est ici d'apprendre, non de disposer d'un "tout en un".
Notez bien que, pour des questions de simplicité, de nombreux tests de sécurité ont été omis. Ce code ne peut pas et ne doit pas servir pour un weblog réel, il ne peut servir que de "première marche".

Objectif

Le weblog que nous vous proposons de construire ici est des plus simples - il s'agira plus d'un squelette que d'une solution complète.
Vu de loin, un weblog peut passer pour une sorte de Livre d'Or, sauf que seul le possesseur du site peut y faire des entrées (ou "notes"). Qui plus est, le weblog dispose d'une section administration qui permet de modifier et effacer ces notes... Nous allons stipuler de suite les caractéristiques de notre application :
- Les 10 dernières notes sont affichées au visiteur à l'arrivée sur le site, par ordre décroissant de date de création (les plus récentes en premier) : /index.php.
- Chaque note dispose d'un permalien : nous utiliserons ici le numéro d'ID d'une note. Le permalien prendra cette forme : /index.php?id=15.
- La page d'administration listera toutes les notes, et permettra de créer, modifier ou supprimer une note : /admin/index.php.
- Chaque note peut être rendue invisible (état "fermé") jusqu'à ce que l'auteur décide de la publier (état "ouvert").

Définition de la base
Voici à quoi ressemblent les champs de notre base :
CREATE TABLE `jlog_note`
  (
  `note_id` int(4) unsigned NOT NULL auto_increment,
  `note_titre` varchar(255) NOT NULL default '',
  `note_texte` text NOT NULL,
  `note_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `note_etat` enum('ouvert','fermé') NOT NULL default 'ouvert',
  UNIQUE KEY `note_id` (`note_id`),
  FULLTEXT KEY `note_titre` (`note_titre`,`note_texte`)
  )

Accueil général
Concentrons-nous pour commencer sur la page d'accueil : nous avons besoin de deux choses : une fonction pour afficher les dernières notes, et une pour afficher la note en cours.
Nous allons en profiter pour dépoussiérer un peu nos connaissances en Objet, mais sans plonger trop loin...

[fichier globals.inc.php]
<?php

// GESTION DE LA BASE DE DONNEES
$db_host = "localhost";
$db_user = "root";
$db_name = "test";
$db_pass = "";

$connexion = mysql_connect($db_host, $db_user, $db_pass);
$db = mysql_select_db($db_name, $connexion);


class Note
  {
  var $note_id, $note_titre, $note_texte, $note_date, $note_etat;

  function Note()
    {
    $this->id = -1;
    }

  function get_note($id)
    {
    $sql = "SELECT note_id, note_titre, note_texte, note_date, note_etat ";
    $sql.= "FROM jlog_note ";
    $sql.= "WHERE note_id = '$id';";

    $res = mysql_query($sql);

    if (mysql_num_rows($res) == 0)
      {
      $this->id = -1;
      }
    else
      {
      $this->id = mysql_result($res, 0, "note_id");
      $this->titre = mysql_result($res, 0, "note_titre");
      $this->texte = mysql_result($res, 0, "note_texte");
      $this->date = mysql_result($res, 0, "note_date");
      $this->etat = mysql_result($res, 0, "note_etat");
      }
    }

  function get_note_last10()
    {
    $sql = "SELECT note_id, note_titre, note_texte, note_date ";
    $sql.= "FROM jlog_note ";
    $sql.= "WHERE note_etat = 'ouvert' ";
    $sql.= "ORDER BY note_date DESC ";
    $sql.= "LIMIT 10;";

    $res = mysql_query($sql);

    if (mysql_num_rows($res) == 0)
      {
      $this->id = -1;
      }
    else
      {
      while ($note = mysql_fetch_object($res))
        {
?>
<h3><?=$note->note_titre;?></h3>
<?=$note->note_texte;?><br>
<h6>Posté le <a href="<?=$_SERVER['PHP_SELF'];?>
?id=<?=$note->note_id;?>">
<?=$note->note_date;?></a></h6>
<hr>
<?
        }
      }
    }
[...]

Au début de notre fichier globals.inc.php, nous définissons sommairement l'accès à la base de données, puis créons une classe Note(), qui nous donnera un objet utilisable tout du long de notre code. Nous définissons en premier lieu deux méthodes : get_note_by_id() qui renvoie notre note sous forme d'objet, et get_note_last10() qui renvoie, moins proprement, directement le code HTML générant la page d'accueil. Ce n'est pas idéal, mais cette méthode n'étant utilisée qu'en un seul endroit, nous nous en contenterons pour le moment.
Un second fichier, fonctions.inc.php, offrira les fonctions nécessaires à la bonne marche du weblog.

Page 1 | 2 | 3 | 4

 
[ Xavier BorderieJDNet
 
Accueil | Haut de page