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 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.