TUTORIELS 
Utiliser l'Objet de PHP pour gérer sa base de données

Page 1 | 2

L'Objet permet de définir des méthodes une fois pour toutes et de les utiliser n'importe où. Une solution idéale pour les sites dont plusieurs pages font appel à une base de données.
 (31 janvier 2003)
 

[correction du code le 16 mars 2003]

Ajoutons-nous une méthode pour insérer un nouveau contenu:

(fichier global.inc.php, suite)
...

  function insert_article()
    {
    $sql = "INSERT INTO articles (titre, contenu, auteur) ";
    $sql .= "VALUES ('$this->titre', '$this->contenu', '$this->auteur');";

    if (mysql_query($sql))
      {
      $this->id = mysql_insert_id();
      }
    else
      {
      $this->id = -1;
      }
}

Cette fois, notre test de réussite porte directement sur la valeur renvoyée par mysql_query() (TRUE ou FALSE). En fonction de ce test, la valeur d'id serait soit l'id qui vient d'être créé pour cette nouvelle entrée (via mysql_insert_id()), soit notre code d'erreur, "-1".

Notre code PHP serait légèrement plus long:

(fichier admin_article_crea.php)
<?php
include ("/.global.inc.php");
...
$newarticle = new article();
$newarticle->titre = "Willy Wonka lance un concours!";
$newarticle->contenu = "Les enfants qui découvriront un ticket dans un chocolat Wonka seront invités à visiter la chocolaterie!";
$newarticle->auteur = "Roald Dahl (r.dahl@tchocky.co.uk)";
$newarticle->insert_article();

if ($newarticle->id <> -1)
  {
  ?>Le nouvel article a bien été créé.<?
  }
else
  {
  ?>Un problème est survenu lors de la création de l'article.<?
  }
?>

Après avoir instancié la classe article sous le nom $newarticle, nous assignons à ses attributs titre, contenu et auteur les valeurs que nous voulons entrer dans la base (id s'incrémente automatiquement, et la date sera celle de l'entrée dans la base). Enfin, nous faisons appel à la méthode d'insertion. Celle-çi renverra un numéro d'id, qui nous permet de déterminer la réussite de l'action, et d'agir en conséquence.

Suite logique, une méthode pour mettre à jour notre article:

(fichier global.inc.php, suite)
...

  function maj_article()
    {
    $sql = "UPDATE articles SET ";
    $sql .= "titre = '$this->titre', ";
    $sql .= "contenu = '$this->contenu', ";
    $sql .= "auteur = '$this->auteur' ";
    $sql .= "WHERE id = '$this->id';";

    if(mysql_query($sql))
      {
      $this->id = $this->id;
      }
    else
      {
      $this->id = -1;
      }
    }

Le code ne différe pas beaucoup de la méthode d'insertion d'un nouvel article, mis à part qu'en cas de réussite, l'id de l'article reste tout simplement la même. Cela se retrouve dans le code PHP, qui lui non plus ne présente pas de grande différence avec le code précédent:

(fichier admin_article_mod.php)
<?php
include ("/.global.inc.php");
...
$modarticle = new article();
$modarticle->titre = "Willy Wonka lance un grand concours!";
$modarticle->contenu = "Les cinq heureux enfants qui découvriront un ticket d'or dans un chocolat Wonka seront invités à visiter la mystérieuse et merveilleuse chocolaterie!";
$modarticle->auteur = "Roald Dahl (r.dahl@tchocky.co.uk)";
$modarticle->maj_article();

if ($modarticle->id <> -1)
  {
  ?>L'article "<?=$modarticle->titre;?>" a bien été modifié.<?
  }
else
  {
  ?>Un problème est survenu lors de la modification de l'article.<?
  }
?>

Enfin, la méthode de destruction d'article n'est guère plus compliquée à mettre en oeuvre:

(fichier global.inc.php, suite et fin)
...

  function efface_article($id)
    {
    $sql = "DELETE FROM articles WHERE id = '$id';";

    if (mysql_query($sql))
      {
      $this->id = $id;
      }
    else
      {
      $this->id = -1;
      }
    }
  } // accolade de fermeture de la classe
?>

...et le code PHP attenant...

(fichier admin_article_efface.php)
<?
include ("./global.inc.php");
...
monArticle = new article();
monArticle->efface_article(5);
...

if ($monArticle->id <> -1)
  {
  ?>L'article a bien été effacé.<?
  }
else
  {
  ?>Un problème est survenu lors de la suppression de l'article.<?
  }

?>

De nombreuses autres méthodes peuvent bien entendu être créées en fonction des besoins, le tout est de prévoir les exceptions possibles et de gérer ces exceptions de manière intelligente et efficace... Ceux d'entre vous qui seraient plus intéressés par une classe de gestion générale de MySQL devraient se pencher sur celle créée par Nicolas Hoizey.

Page 1 | 2

 
[ Xavier Borderie, JDNet
 
Accueil | Haut de page