Programmation en PHP
Le langage PHP est un langage de programmation qui permet de demander
au serveur de générer du texte dans la page HTML ou d'effectuer d'autres
traitements.
Première approche : PHP et HTML mélangés
Une première approche consiste à insérer des zones de code PHP dans une
page HTML comme dans l'exemple suivant :
<html>
<head>
....
</head>
<body>
<br/>
<br/>
<p align="center" style="font-size:200%">
Nous sommes le
<?php
echo date ("j/m/Y", time ());
?>
et il est
<?php
echo date ("g:i:s", time ());
?>
</p>
</body>
</html>
Ici, la page HTML ne contient presque rien et les traitements en PHP sont
simples. De plus le 2ème traitement en PHP n'a pas besoin d'exploiter les
résultats du premier traitement. Enfin, c'est toujours la même page qu'on
va afficher. Lorsqu'il y a des interations avec les utilisateurs via un
formulaire, ou lorsque des erreur qui nécessitent un traitement spécial
peuvent apparaitre, ce n'est plus le cas.
Aussi, il est préférable de disssocier le modèle de page en HTML et le code
PHP qui sera dans un fichier distinct.
Deuxième approche : PHP et HTML dans des fichiers distincts
Pour l'exemple précédent, le fichier HTML va devenir quelque-chose comme
ceci :
<html>
<head>
....
</head>
<body>
<br/>
<br/>
<p align="center" style="font-size:200%">
Nous sommes le XXXJOUR
et il est
XXXHEURE
</p>
</body>
</html>
Ce fichier est enregistré sous le nom
date-et-heure.html dans
le répertoire
pages qui contient tous les modèles de pages du
site.
Un fichier PHP distinct de nom
date-et-heure.php aura le contenu
suivant :
<?php
// fonctions d'affichage de portions de pages HTML
require ("acces_page.php");
// modèle de page html
$ficpage = "pages/date-et-heure.html";
// ouvrir en lecture le fichier contenant le modèle de page à afficher
$descfic = fopen ($ficpage, "r");
// si l'ouverture s'est bien passée
if ($descfic)
{
// récupérer la date courante
$jour = date ("j/m/Y", time ());
// recopier le début du fichier html jusqu'à la ligne contenant
// XXXJOUR que l'on remplacera par le contenu de la variable $jour
copmaj ($descfic, "XXXJOUR", $jour);
// recopier la suite du fichier html jusqu'à la ligne contenant XXXHEURE exclue
copie_jusque_chaine ($descfic, "XXXHEURE");
// générer une ligne (bien indentée) contenant l'heure
echo " ".date ("g:i:s", time ());
// recopier la fin du fichier html
copie_jusque_fin ($descfic);
// terminé avec le fichier html, on ferme le fichier
fclose ($descfic);
}
// sinon message d'erreur
else
echo "Page date-et-heure.html manquante";
?>
Le travail du programme PHP consiste à envoyer au navigateur le modèle
de fichier HTML en s'arrêtant à certains endroits indentifiés par une
chaine de caractères qui commence par XXX pour faire un traitement
particulier.
Afin de montrer les différentes possibilités, l'affichage de la date et
de l'heure sont traités différemment par le programme PHP :
- Pour la date, on utilise une fonction qui remplace dans la
première ligne où on la trouve, une chaine de caractères (ici
XXXJOUR) par un autre contenu qui est fabriqué en PHP,
- Pour l'heure, on envoie au navigateur la suite du fichier HTML
jusqu'à la ligne où on trouve une autre chaine de caractères
(ici XXXHEURE).
En général, et c'est le cas ici, la ligne contenant XXXHEURE
n'est pas envoyée, mais un 3e paramètre pour la
fonction copie_jusque_chaine permet de demander
qu'elle le soit.
Ensuite, le programme PHP rajoute ce qui est nécessaire (ici
l'heure).
Pour faire ces traitement, le programme PHP appelle des fonctions du
fichier
acces_page.php .
Ce genre de fichier peut être utilisé à l'identique pour tous les sites
web en PHP.
Chacune des fonctions de
acces_page.php continue de lire le
fichier HTML à partir de la ligne qui suit celle où s'était arrêté
l'appel de la fonction précédente.
Lorsqu'on n'a plus de traitement particulier à faire, la fonction
copie_jusque_fin permet d'envoyer au navigateur le reste du
fichier HTML.
L'utilisation d'un fichier HTML et d'un fichier PHP distincts permet
de dissocier l'aspect et le contenu global de la page (partie fixe
spécifiée dans le fichier HTML) des parties variables qui sont générées
en PHP.
Exemple avec plusieurs fichiers HTML pour un fichier PHP
Il arrive, tout particulièrement si on traite les données issues de
l'envoi d'un formulaire, que plusieurs fichiers HTML soient souhaitables
pour traiter les différents cas.
C'est ce qui se passe avec les fichiers
table-evol-age.php,
table-evol-reg.php et
table-evol-dom.php. Une table
pour chaque classe d'âge, chaque région, ou chaque département d'outre-mer
montrant l'évolution de la vaccination tous les 10 jours entraînerait
une page HTML très longue. On demande donc à l"utilisateur de sélectionner
une classe d'âge, ou une région, ou un DOM particulier avant d'afficher
la table correspond à ce qu'il a choisi.
Deux modèles de page HTML sont utilisés, le premier lorsqu'aucune table
n'a encore été sélectionnée, l'autre lorsque c'est fait.
Cela donne pour
table-evol-age.php le code PHP suivant :
// récupérer la classe d'âge sélectionnée
$cl_age = $_POST ['cl_age'];
// modèle de page html (dépend si classe d'âge déjà sélectionnée ou non)
if ($cl_age)
$ficpage = DIR_PAGES."/table-evol-age.html";
else
$ficpage = DIR_PAGES."/table-evol-select-age.html";
// ouvrir le fichier contenant la page à afficher
$descfic = fopen ($ficpage, "r");
...
Autre exemple : vérification d'un formulaire
Dans ce deuxième exemple, on utilise un formulaire pour inscrire de
nouveaux utilisateurs à un service.
Le fichier HTML du formulaire est le suivant :
La demande de création d'un compte n'est autorisée que si l'on n'est pas
connecté au site.
Le programme PHP commence par récupérer les données du formulaire en
normalisant certains d'entre eux au niveau des majuscules et minuscules.
Une fois qu'on a cliqué sur le bouton permettant de le valider, le programme
PHP vérifie si tous les champs requis sont présents avec un contenu
syntaxique adapté à leur rôle. Celà peut entraîner la détection d'erreurs.
Dans ce cas, on s'arrête à la première erreur rencontrée qui est mémorisée.
Si aucune erreur n'a été détectée, on peut créer le compte.
La création du compte peut entraîner d'autres erreurs parmi lesquelles
celle où le nom de compte choisi est déjà utilisé.
Si tout s'est bien passé jusque là, on n'aura pas à afficher de nouveau le
formulaire. Une autre page indiquera que la compte a été créé.
Jusqu'à présent, on n'a fait que traiter les données du formulaire.
Maintenant, on va s'occuper de la page HTML à afficher.
Les traitements à faire dépendent du modèle de page HTML à afficher.
Dans le cas où c'est le formulaire de saisie qui doit être affiché, il
peut être affiché pour la première fois ou au contraire de nouveau affiché
parce qu'un champ saisi est absent ou syntaxiquement incorrect.
La série d'appels de la fonction
copmaj permet de conserver dans
les champs du formulaire la valeur introduite précédemment, pour éviter de
demander de tout resaisir. Et l'erreur s'affiche en rouge en bas de page.
La première fois que le formulaire est affiché, aucun champ n'a encore
été saisi et l'appel des fonctions
copmaj va mettre une valeur
initiale vide pour les différents champs du formulaire.
Quant à l'endroit où il est prévu de mettre les messages d'erreur, le
programme PHP le saute sans rien y écrire.