• 15 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

J'ai tout compris !

Mis à jour le 31/01/2019

Isoler l'affichage du traitement PHP

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

La première bonne pratique que nous devons prendre consiste à éviter de mélanger l'affichage du reste.

Oui, en gros. Mais vous allez voir que ce n'est pas aussi simple que ça. 😉

Une première séparation

Commençons par séparer la partie qui s'occupe de récupérer les données de celle qui les affiche. C'est relativement simple à faire :

<?php
// Récupération des données
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$req = $bdd->query('SELECT id, titre, contenu, DATE_FORMAT(date_creation, \'%d/%m/%Y à %Hh%imin%ss\') AS date_creation_fr FROM billets ORDER BY date_creation DESC LIMIT 0, 5');
?>


<!-- Affichage -->


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Mon blog</title>
        <link href="style.css" rel="stylesheet" /> 
    </head>
        
    <body>
        <h1>Mon super blog !</h1>
        <p>Derniers billets du blog :</p>
 
        
        <?php
        while ($donnees = $req->fetch())
        {
        ?>
        <div class="news">
            <h3>
                <?php echo htmlspecialchars($donnees['titre']); ?>
                <em>le <?php echo $donnees['date_creation_fr']; ?></em>
            </h3>
            
            <p>
            <?php
            echo nl2br(htmlspecialchars($donnees['contenu']));
            ?>
            <br />
            <em><a href="#">Commentaires</a></em>
            </p>
        </div>
        <?php
        }
        $req->closeCursor();
        ?>
    </body>
</html>

Vous pouvez voir qu'il y a 2 sections dans ce code :

  1. On récupère les données. C'est là qu'on fait notamment la requête SQL.

  2. On affiche les données.

Grâce à ça, on sait plus facilement repérer la section qui s'occupe de récupérer les données de celle qui les affiche. C'est déjà bien mieux, mais ce n'est encore qu'un début.

On peut aller plus loin et découper ça en 2 fichiers distincts. Allons-y.

Séparer en 2 fichiers

Ici, je vous propose de faire 2 fichiers :

  • index.php (il y a toujours un index.php, c'est le fichier de base de votre site lu en premier) : il s'occupera de récupérer les données et d'appeler l'affichage.

  • affichageAccueil.php : il affichera les données dans la page.

Commençons !

index.php

<?php
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}

$req = $bdd->query('SELECT id, titre, contenu, DATE_FORMAT(date_creation, \'%d/%m/%Y à %Hh%imin%ss\') AS date_creation_fr FROM billets ORDER BY date_creation DESC LIMIT 0, 5');

require('affichageAccueil.php');
?>

Le code se contente d'appeler à la fin le fichier affichageAccueil.php .

affichageAccueil.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Mon blog</title>
        <link href="style.css" rel="stylesheet" /> 
    </head>
        
    <body>
        <h1>Mon super blog !</h1>
        <p>Derniers billets du blog :</p>
 
        
        <?php
        while ($donnees = $req->fetch())
        {
        ?>
        <div class="news">
            <h3>
                <?php echo htmlspecialchars($donnees['titre']); ?>
                <em>le <?php echo $donnees['date_creation_fr']; ?></em>
            </h3>
            
            <p>
            <?php
            echo nl2br(htmlspecialchars($donnees['contenu']));
            ?>
            <br />
            <em><a href="#">Commentaires</a></em>
            </p>
        </div>
        <?php
        }
        $req->closeCursor();
        ?>
    </body>
</html>

Le fichier de l'affichage fonctionne comme avant. Quand il est chargé, la variable $donnees lui est automatiquement transmise par index.php grâce au require . Il ne lui reste plus qu'à afficher les informations.

Je ne comprends pas. Je pensais que le fichier de l'affichage ne contiendrait que du HTML... mais il mélange en réalité du PHP et du HTML ! En quoi est-ce que c'est mieux ?

En fait, on n'a pas vraiment le choix. On est bien obligé de faire de temps en temps des echo pour afficher le contenu des variables.
Ce qui compte, c'est que le rôle de ce code soit uniquement d'afficher des informations. On n'y fait pas des opérations ou des calculs complexes, on n'y fait pas des requêtes en base de données.

Essayez !

https://www.codevolve.com/api/v1/publishable_key/2A9CAA3419124E3E8C3F5AFCE5306292?content_id=abe05d38-8532-4cca-b40f-8a29ada89d95

Exemple de certificat de réussite
Exemple de certificat de réussite