[correction du code le 5 février 2003]
Penchons-nous
sur un aspect de PHP qui peut grandement nous simplifier la vie
dès qu'il s'agit de gérer des requêtes vers
une base SQL: le passage à la "sauce objet" de
toutes les requêtes MySQL nécessaires. Cela nous permettra
non seulement de centraliser le code dans un seul fichier global,
mais aussi de se simplifier grandement la tâche lors de l'écriture
de requêtes (et accessoirement, d'ouvrir le développement
à des personnes moins "pointues", qui n'auront
plus à apprendre SQL pour modifier ou compléter votre
code).
L'ensemble de
nos requêtes et fonctions se trouveront donc dans un fichier
unique, que nous appellerons global.inc.php
(global.inc seul est à déconseillé,
certains serveurs envoyant ces fichiers en mode texte...).
Nous partons du principe que nous avons créé notre
base de données à l'aide de la requête SQL suivante:
CREATE
TABLE articles (
id smallint(5) unsigned NOT NULL auto_increment PRIMARY
KEY,
titre text NOT NULL,
contenu text NOT NULL,
auteur varchar(255),
datepub datetime DEFAULT '0000-00-00 00:00:00' NOT NULL
);
De même,
notre base est supposée être déjà remplie
d'au moins un article...
Créons
notre fichier global, en y mettant des requêtes de connexion
basiques:
(fichier global.inc.php)
<?php
$db_host = "localhost";
$db_user
= "root";
$db_pass
= "";
$db_name
= "mabase";
$connexion
= mysql_connect($db_host, $db_user, $db_pass) or die (mysql_error());
$db
= mysql_select_db($db_name, $connexion) or die(mysql_error());
?>
L'accès
à la base sera ainsi toujours ouvert pour les fichiers PHP
faisant appel à notre fichier global. Nous allons maintenant
créer notre classe qui nous permettra de gérer notre
table:
(fichier global.inc.php,
suite)
...
Class article
{
var $id;
var $titre;
var $contenu;
var $auteur;
var $datepub;
Ces variables sont les attributs de notre classe, et ne sont accessibles
que depuis celle-çi. Il est nécessaire que l'on y
retrouve l'ensemble des champs de notre table.
Nous allons ensuite déclarer un constructeur pour notre classe.
Un constructeur est automatiquement appelé quand une occurrence
de la classe est créée. Le constructeur est donc une
fonction interne de la classe, qui nous permet, à la création,
d'initialiser certains de ses attributs. Un constructeur porte obligatoirement
le même nom que sa classe:
(fichier global.inc.php, suite)
...
function article()
{
this->id = -1;
}
Ici, nous ne faisons qu'initialiser l'id
de notre instance à "-1",
ce qui nous permettra en cours d'execution de tester si sa valeur
est négative, donc si notre programme a subit un échec...
Créons maintenant notre méthode de lecture de la
base. Elle nous permettra, en fournissant un id,
de tirer tous les éléments de la base utilisant cet
id:
(fichier global.inc.php, suite)
...
function lire_article($id)
{
$sql = "SELECT id, titre, contenu, auteur,
datepub ";
$sql .= "FROM articles ";
$sql .= "WHERE id = '$id';";
$rsql = mysql_query($sql);
if (mysql_num_rows($rsql) == 0)
{
$this->id = -1;
}
else
{
$this->id = mysql_result($rsql,
0, "id");
$this->titre = mysql_result($rsql,
0, "titre");
$this->contenu = mysql_result($rsql,
0, "contenu");
$this->auteur = mysql_result($rsql,
0, "auteur");
$this->datepub = mysql_result($rsql,
0, "datepub");
}
}
Notre méthode se charge ainsi de récuperer l'article
correspondant à l'id que
nous lui fournissons, ou de nous envoyer un message d'erreur (ou,
littéralement, de renvoyer un résultat avec id
= -1) si on n'obtient aucun résultat pour notre requête.
Si la requête ne pose aucun problème, notre méthode
assignera ses résultats à notre occurrence de la classe
article (via la fonction mysql_result(),
qui ne renvoie que le champ demandé).
Le code PHP pour récupérer un article sera ainsi
extrêmement simple:
(fichier article.php)
<?
include ("./global.inc.php");
...
$monArticle = new article();
$monArticle->lire_article(5);
...
?>
Titre: "<?=$monArticle->titre;?>"<br>
Contenu: "<?=$monArticle->contenu;?>"<br>
On comprend aussi que la tâche est grandement facilitée
pour les intégrateurs ne connaissant pas forcément
les arcanes de MySQL...
Page 1 | 2
|