PHP3 Hypertext PreProcessor A brief PHP3 Tutorial  

[ < Page précédente | ^ Table des matières | Page suivante > ]

Interfaçage avec un SGBD

4.1 Interfaçage avec un SGBD

L'interfaçage d'une base de données est certainement un des aspects les plus intéressants du langage PHP.

Pour quelle utilisation ? Eh bien, pour a peu près toutes les applications nécessitant la génération de pages HTML dynamiques, une base de données peut offrir des solutions très séduisantes :

Suivant vos besoins, vous placerez dans une base de données les informations susceptibles d'évoluer :

Ceci vous permettra d'organiser vos pages en trois parties :

4.2 Quelle base de données ?

Si vous vous posez la question, c'est que vous envisagez d'utiliser une base de données pour votre site, mais que vous n'en possédez pas actuellement.
Dans ce cas, je vous conseille le trio gagnant (c'est même un quarté, en fait) : PHP + MySQL + Apache, le tout sur une machine Linux ou FreeBSD. On ne change pas une équipe qui gagne. Ces solutions sont éprouvées et très fiables.

Si vous êtes sur une plate-forme Win32, je vous conseille vivement de l'abandonner au profit de la configuration précédente. Je ne veux pas engager à nouveau le même débat stérile, simplement, il faut bien admettre que PHP prend tout son interêt en module d'Apache, et par ailleurs, Apache est bien plus efficace sur les systèmes Unix et dérivés que sur Windows.
Si vous comptez utiliser PHP de façon professionnelle, et si vos responsables hiérarchiques persistent à vouloir conserver une architecture Win32, insistez pour passer sur Linux ou changez de responsable ;-)

4.3 Comment se connecter ?

Si vous êtes sur une plate-forme Win32, le plus simple et immédiat reste d'utiliser une connexion ODBC. Des drivers ODBC existent pour pratiquement toutes les bases de données, même pour atteindre un PostgreSQL ou un MySQL sur une machine Linux. Il existe un moyen de s'interfacer avec une base Oracle ou Sybase grâce à des pilotes natifs sur Win32. Cela passe par la modification du fichier PHP.INI qui contient une section spécifique à Win32, permettant d'activer des DLL optionnelles (Ces DLL peuvent aussi être chargées dynamiquement par l'instruction dl()).
Pourquoi vouloir utiliser des pilotes natifs ? Tout simplement pour pouvoir tirer parti des spécificités de chacune des bases de données et obtenir de meilleures performances.

Si vous avez la chance d'utiliser PHP sur une machine Unix/Linux/FreeBSD, tout va bien : vous allez devoir recompiler PHP pour lui ajouter le support de votre base de données. N'oubliez pas d'ajouter toutes les fonctionnalités optionnelles que vous utilisez lors de la configuration. Par défaut, le support de GD et de plusieurs autres fonctions intéressantes n'est pas activé.

4.4 Exemple concret : Publication de nouvelles

Pour illustrer ce chapitre, nous allons écrire un embryon de site de publication de nouvelles, à la façon de slashdot ou linuxfr. Pour cela, de quoi avons-nous besoin ? Les exemples de code seront donnés pour MySQL sur Linux, et pour une quelconque base ODBC sur Win32. Vous verrez que les différences sont vraiment mineures.

Il nous faut une page contenant un formulaire, permettant à quiconque de rédiger et de publier une nouvelle. Par la suite, nous parlerons de cette page en la nommant page de saisie.

Ensuite, il faut bien que l'administrateur du site puisse valider les nouvelles devant être publiées, faute de quoi, n'importe quel plaisantin pourrait faire publier n'importe quel contenu, de plus ou moins bon goût ...

La page d'accueil du site devra afficher les 6 dernières nouvelles. Plus tard, vous pourrez apporter votre touche personnelle, en envoyant un e-mail à l'auteur pour lui indiquer que sa nouvelle a été publiée ou n'a pas été retenue, etc ... Ce n'est qu'un exercice volontairement simpliste, qui nous servira à expliquer les points suivants :

Il va nous falloir une base de données supportée par PHP dans laquelle on va créer deux tables : l'une pour contenir les nouvelles, l'autre pour enregistrer les différentes rubriques (les nouvelles seront triées par rubrique : 'Loisirs', 'Internet', 'Science', ...). Dans un premier temps, les exemples de code seront fournis pour une source de données ODBC quelconque, les différences pour une base PostgreSQL ou MySQL seront signalées directement dans le code source des exemples.

Avant d'aller plus loin, téléchargez l'archive contenant les codes source et images utilisées dans l'exemple. Ces archives sont au format zip, et disponibles en version utilisant une base locale Odbc (< 13 ko) ou en version prête à être téléchargé sur Free.fr (< 9 ko).

Connectez vous à la base de données que vous avez choisi, et créez les deux tables suivantes. Si vous êtes hébergés par Free.fr, vous devrez adapter ce code SQL et passer par phpMyAdmin.

CREATE TABLE NOUVELLES (
   IDNOUV INTEGER       , -- identifiant unique de la nouvelle
   DTSAISI DATETIME     , -- date de la saisie de la nouvelle
   DTPUBLI DATETIME     , -- date de publication
   CDSTATUT CHAR(1)     , -- statut de la nouvelle
   CDRUBRIQ INTEGER     , -- code de la rubrique associée
   IDAUTEUR VARCHAR(50) , -- identité, pseudo ou e-mail de l'auteur
   TITRE VARCHAR(50)    , -- titre de la nouvelle
   TEXTE TEXT             -- le corps du texte de la nouvelle
 );
 
CREATE TABLE RUBRIQUES (
  CDRUBRIQ INTEGER     , -- clé unique de la rubrique
  LBRUBRIQ VARCHAR(20) , -- libellé de la rubrique
  LOGOFILE TEXT          -- logo associé à la rubrique
);

Les types de données indiqués ici sont utilisables pour une base MS Access. (J'en vois déjà qui sourient, oui vous là bas. Je précise que l'utilisation d'une base Access ne doit se comprendre que dans le cadre de cet exemple. Pour une application réelle, multi-utilisateurs, je vous conseille d'utiliser au minimum un SGBD tel que MySQL ou PostgreSQL).

Pour créer les tables dans PostgreSQL ou MySQL, il vous faudra adapter les types de données, en particulier les colonnes de type 'TEXT'.

Ensuite, nous allons créer des enregistrements dans la table RUBRIQUES :

INSERT INTO RUBRIQUES VALUES (1, 'Internet', NULL);
INSERT INTO RUBRIQUES VALUES (2, 'Free software', NULL);
INSERT INTO RUBRIQUES VALUES (3, 'Multimédia', NULL);
INSERT INTO RUBRIQUES VALUES (4, 'Communication', NULL);
INSERT INTO RUBRIQUES VALUES (5, 'Commerce', NULL);
INSERT INTO RUBRIQUES VALUES (6, 'Technologie', NULL);
INSERT INTO RUBRIQUES VALUES (7, 'Loisirs', NULL);
INSERT INTO RUBRIQUES VALUES (8, 'Manifestations', NULL);

Bon, maintenant, voyons ce dont nous avons besoin en tant que fonctionnalités.

Bon, en comptant bien, et en faisant en sorte que les deux premières fonctionnalités soient assurées par le même script, cela nous fait quatre scripts à réaliser. Si vous êtes curieux et si vous regardez ce que l'archive zip contient, vous y trouverez ceci :

Pour ne pas compliquer, je n'ai pas voulu utiliser un fichier d'include dans lequel j'aurais placé des fonctions et paramètres d'initialisation. Par conséquent, il vous faudra editer les quatre scripts pour y modifier les paramètres de connexion ODBC en fonction de votre configuration personnelle.

Il n'y a rien d'autre à configurer. Si vous avez créé les tables, et que la configuration d'accès à la base ODBC est correcte, vous pouvez jouer avec l'application en cliquant sur "Ajouter une nouvelle", puis ensuite sur "Valider les derniers ajouts" et sur le lien "Valider".

Cet exemple est en ligne chez Free.fr, vous pouvez le tester directement en suivant ce lien : http://php3.free.fr/clauer/niouzilla/index.php3

Un document détaillé présentant le fonctionnement de Niouzilla est disponible à cette adresse : http://clauer.free.fr/php3tut/php3tut_niouzilla.html.

Rédaction en cours, à suivre ...

4.5 Exemples de code commentés

Rédaction en cours, à suivre ...

 

[ < Page précédente | ^ Table des matières | Page suivante > ]

mailto:clauer@linux-france.org | http://linux-france.org/article/devl/php3/tut/php3_tut.html | Version initiale 1.0 - 16/01/2000