1.2 PROGRAMMATION WEB AVEC MySQL ET PHPAprès cette introduction générale, nous en arrivons maintenant aux deux outils que nous allons associer pour développer des applications web avec s
Trang 11.2 PROGRAMMATION WEB AVEC MySQL ET PHP
Après cette introduction générale, nous en arrivons maintenant aux deux outils que nous allons associer pour développer des applications web avec simplicité et puissance
1.2.1 MySQL
MySQL est un Système de Gestion de Bases de Données (SGBD) qui gère pour vous les
fichiers constituant une base, prend en charge les fonctionnalités de protection et de sécurité et fournit un ensemble d’interfaces de programmation (dont une avec PHP) facilitant l’accès aux données
La complexité de logiciels comme MySQL est due à la diversité des techniques mises en œuvre, à la multiplicité des composants intervenant dans leur architecture,
et également aux différents types d’utilisateurs (administrateurs, programmeurs, non informaticiens, ) confrontés, à différents niveaux, au système Au cours de ce livre nous aborderons ces différents aspects, tous ne vous étant d’ailleurs pas utiles, en par-ticulier si votre objectif n’est pas d’administrer une base MySQL Pour l’instant, nous nous contenterons de décrire l’essentiel, à savoir son architecture et ses composants MySQL consiste en un ensemble de programmes chargés de gérer une ou plusieurs bases de données, et qui fonctionnent selon une architecture client/serveur (voir figure 1.4)
de données Base
Client
mysql
Client
Client
Client
mysqldump
mysqlimport
Apache/PHP
Serveur
mysqld
Connexion
Connexion Connexion Connexion
Figure 1.4 — Serveur et clients de MySQL.
Le serveur mysqld Le processus mysqld est le serveur de MySQL Lui seul peut
accéder aux fichiers stockant les données pour lire et écrire des informations
Utilitaires MySQL fournit tout un ensemble de programmes, que nous appellerons
utilitaires par la suite, chargés de dialoguer avec mysqld, par l’intermédiaire d’une connexion, pour accomplir un type de tâche particulier Par exemple, mysqldump
permet d’effectuer des sauvegardes, mysqlimport peut importer des fichiers ASCII dans une base, etc Le client le plus simple est simplement nommé mysql, et
permet d’envoyer directement des commandes au serveur
Trang 2La base de données est un ensemble de fichiers stockant les informations selon un format propre à MySQL et qui peut – doit – rester inconnu à l’utilisateur Le serveur est le seul habilité à lire/écrire dans ces fichiers, en fonction de demandes effectuées par des clients MySQL Plusieurs clients peuvent accéder simultanément à une même base Le serveur se charge de coordonner ces accès
Les clients de MySQL communiquent avec le serveur pour effectuer des recherches ou des mises à jour dans la base Cette communication n’est pas limitée à des processus situés sur la même machine : il est possible de s’adresser au serveur MySQL par un réseau comme l’Internet Dans une application PHP, le client est le serveur web (souvent Apache) qui n’est pas forcément situé sur la même machine
que le processus mysqld.
Il est possible de créer soi-même son propre client MySQL en utilisant des outils
de programmation qui se présentent sous la forme d’un ensemble de fonctions,
habituellement désigné par l’acronyme API pour Application Programming Interface.
MySQL fournit une API en langage C, à partir de laquelle plusieurs autres ont été créées, dont une API en PHP Comme tous les autres clients de MySQL, un script PHP en association avec Apache doit établir une connexion avec le serveur pour pouvoir dialoguer avec lui et rechercher ou mettre à jour des données (figure 1.4)
Bases de données relationnelles
MySQL est un SGBD relationnel, comme beaucoup d’autres dont ORACLE,
Post-greSQL, SQL Server, etc Le point commun de tous ces systèmes est de proposer une
représentation extrêmement simple de l’information sous forme de table Voici une table relationnelle Film, donnant la description de quelques films.
titre année nom_realisateur prénom_realisateur annéeNaiss
Pulp Fiction 1995 Tarantino Quentin
Il y a quelques différences essentielles entre cette représentation et le stockage dans un fichier D’une part, les informations sont conformes à une description précise
Ici la table s’appelle Film, et elle comprend un ensemble d’attributs comme titre,
année, etc Une base de données est constituée d’une ou plusieurs tables, dont les
descriptions sont connues et gérées par le serveur Nous verrons qu’il est possible, via
un langage simple, de spécifier le format d’une table, ainsi que le type des attributs et
les contraintes qui s’appliquent aux données Par exemple : il ne doit pas exister deux
films avec le même titre Tout ce qui concerne la description des données, et pas les
données elles-mêmes, constitue le schéma de la base de données.
Trang 3Les SGBD relationnels offrent non seulement une représentation simple et puis-sante, mais également un langage, SQL, pour interroger ou mettre à jour les données SQL est incomparablement plus facile à utiliser qu’un langage de programmation classique comme le C Voici par exemple comment on demande la liste des titres de film parus après 1980
SELECT t i t r e
FROM F i l m
WHERE annee > 1980
Cette approche très simple se contente d’indiquer ce que l’on veut obtenir, à
charge pour le SGBD de déterminer comment on peut l’obtenir SQL est un lan-gage déclaratif qui permet d’interroger une base sans se soucier de la représentation
interne des données, de leur localisation, des chemins d’accès ou des algorithmes nécessaires À ce titre il s’adresse à une large communauté d’utilisateurs potentiels (pas seulement des informaticiens) et constitue un des atouts les plus spectaculaires (et le plus connu) des SGBD relationnels On peut l’utiliser de manière interactive,
mais également en association avec des interfaces graphiques, des outils de reporting
ou, généralement, des langages de programmation
Ce dernier aspect est important en pratique car SQL ne permet pas de faire de la programmation au sens courant du terme et doit donc être associé avec un langage comme PHP quand on souhaite effectuer des manipulations complexes
1.2.2 PHP
Le langage PHP a été créé par Rasmus Lerdorf en 1994, pour ses besoins personnels Comme dans beaucoup d’autres cas, la mise à disposition du langage sur l’Internet est à l’origine de son développement par d’autres utilisateurs qui y ont vu un outil propre à satisfaire leurs besoins Après plusieurs évolutions importantes, PHP en est
à sa version 5.2, celle que nous utilisons La version 6 est annoncée à l’heure ó ces lignes sont écrites PHP – le plus souvent associé à MySQL – est à l’heure actuelle le plus répandu des langages de programmations pour sites web
Qu’est-ce que PHP
PHP est un langage de programmation, très proche syntaxiquement du langage C, destiné à être intégré dans des pages HTML Contrairement à d’autres langages, PHP est principalement dédié à la production de pages HTML générées dynamiquement Voici un premier exemple
Exemple 1.3 exemples/ExPHP1.php:Premier exemple PHP
<? xml v e r s i o n = " 1 0 " e n c o d i n g = " i s o−8959−1 " ? >
<!DOCTYPE html PUBLIC "−//W3C/ / DTD XHTML 1 0 S t r i c t / / EN"
" h t t p : / / www w3 o r g / TR / xhtml1 /DTD/ xhtml1−s t r i c t dtd ">
<html xmlns= " h t t p : / / www w3 o r g / 1 9 9 9 / xhtml " xml : l a n g = " f r " >
<head >
< t i t l e >HTML a v e c PHP< / t i t l e >
Trang 4< l i n k r e l = ’ s t y l e s h e e t ’ h r e f = " f i l m s c s s " t y p e = " t e x t / c s s " / >
</ head >
<body >
<h1>HTML + PHP< / h1>
Nous sommes l e <? php echo Date ( " j /m/ Y " ) ; ? >
<p>
<? php
echo " J e s u i s " $_SERVER [ ’HTTP_USER_AGENT ’ ] " < b r / > " ;
echo " J e d i a l o g u e a v e c " $_SERVER [ ’SERVER_NAME ’ ] ;
? >
</ p>
</ body >
</ html >
Il s’agit d’un document contenant du code HTML classique, au sein duquel on
a introduit des commandes encadrées par les balises <?php et ?> (on appellera
« scripts » les documents HTML/PHP à partir de maintenant) Tout ce qui se trouve entre ces commandes est envoyé à un interpréteur du langage PHP intégré à Apache Cet interpréteur lit les instructions et les exécute
REMARQUE –Certaines configurations de PHP acceptent des balises PHP dites « courtes » (<?et?>) qui sont incompatibles avec XML et donc avec le langage XHTML que nous utilisons Les scripts PHP écrits avec ces balises courtes ne sont pas portables : je vous déconseille fortement de les utiliser.
Ici on a deux occurrences de code PHP La première fait partie de la ligne suivante :
Nous sommes le <?php echo Date ("j/m/Y"); ?>
Le début de la ligne est du texte traité par le serveur Apache comme du HTML Ensuite, on trouve une instruction echo Date ("j/m/Y"); La fonction echo() est l’équivalent du printf() utilisé en langage C Elle écrit sur la sortie standard, laquelle est directement transmise au navigateur par le serveur web La fonction PHP date() récupère la date courante et la met en forme selon un format donné (ici, la chaîne j/m/Y qui correspond à jour, mois et année sur quatre chiffres)
La syntaxe de PHP est relativement simple, et la plus grande partie de la richesse
du langage réside dans ses innombrables fonctions Il existe des fonctions pour créer des images, pour générer du PDF, pour lire ou écrire dans des fichiers, et – ce qui nous intéresse particulièrement – pour accéder à des bases de données
REMARQUE –Le langage PHP est introduit progressivement à l’aide d’exemples Si vous souhaitez avoir dès maintenant un aperçu complet du langage, reportez-vous au chapitre 11, page 419, qui en présente la syntaxe et peut se lire indépendamment.
Trang 5Le scriptExPHP1.phpillustre un autre aspect essentiel du langage Non seulement il s’intègre directement avec le langage HTML, mais toutes les variables d’environne-ment décrivant le contexte des communications entre le navigateur et le serveur web sont directement accessibles sous forme de variables PHP Tous les noms de variables
de PHP débutent par un « $ » Voici la première ligne du script dans laquelle on insère une variable transmise par le serveur
echo "Je suis " $_SERVER[’HTTP_USER_AGENT’] "<br/>";
Le point « » désigne l’opérateur de concaténation de chaîne en PHP La com-mande echo envoie donc sur la sortie standard une chaîne obtenue en concaténant les trois éléments suivants :
• une sous-chaîne contenant le texte « Je suis »
• la chaîne correspondant au contenu de la variable HTTP_USER_AGENT ;
• la chaîne contenant la balise HTML <br/>.
Cette création de contenu par concaténation de texte simple, de variables PHP
et de balises HTML est l’une des principales forces de PHP Le point le plus important ici est l’exploitation de la variable HTTP_USER_AGENT qui représente le navigateur qui a demandé l’exécution du script Cette variable est l’un des éléments
du tableau PHP $_SERVER automatiquement créé par le serveur et transmis au script PHP Ce tableau est de type « tableau associatif », chaque élément étant référencé par un nom L’élément correspondant au nom du serveur est référencé par SERVER_NAME et se trouve donc accessible dans le tableau avec l’expression
$_SERVER[’SERVER_NAME’] C’est le cas de toutes les variables d’environnement (voir tableau 1.1, page 16)
Un script PHP a accès à plusieurs tableaux associatifs pour récupérer les variables d’environnement ou celles transmises via HTTP La table 1.2 donne la liste de ces tableaux
Tableau 1.2 — Tableaux prédéfinis de PHP
Tableau associatif Contenu
$_SERVER Contient les variables d’environnement énumérées dans la table 1.1,
page 16 (comme SERVER_NAME , CONTENT_TYPE , etc), ainsi que des variables propres à l’environnement PHP comme PHP_SELF , le nom du script courant.
$_ENV Contient les variables d’environnement système, que l’on peut
égale-ment récupérer par la fonction getenv()
$_COOKIE Contient les cookies transmis au script.
$_GET Contient les paramètres HTTP transmis en mode get
$_POST Contient les paramètres HTTP transmis en mode post
$_FILES Contient la liste des fichiers transmis au serveur par le navigateur.
$_REQUEST Contient toutes les variables des quatre tableaux précédents.
$_SESSION Contient les variables de session PHP.
$GLOBALS Contient les variables globales du script.