Moteur basé sur une base de données en PHP
Créons maintenant un moteur de site web dans lequel le contenu des pages sera stocké non pas dans des fichiers, mais dans une base de données. Supposons que nous ayons la table suivante dans la base de données :
| id | title | content |
|---|---|---|
| 1 | title1 | <div> content1 </div> |
| 2 | title2 | <div> content2 </div> |
| 3 | title3 | <div> content3 </div> |
Supposons que nous voulions obtenir nos pages via
des URL de la forme /page/1, où le nombre
représentera l'id de la page
que nous souhaitons obtenir.
Passons à la mise en œuvre. Pour commencer, dans un fichier séparé, établissons une connexion à la base de données et includons ce fichier dans le nôtre :
<?php
$link = require 'connect.php';
?>
Récupérons l'URL demandée :
<?php
$url = $_SERVER['REQUEST_URI'];
?>
À l'aide d'une expression régulière, divisons l'URL en parties :
<?php
preg_match('#/page/(\d+)#', $url, $match);
?>
Enregistrons l'id de la capture (groupe) dans une variable :
<?php
$id = $match[1];
?>
Exécutons une requête à la base de données, pour obtenir
la page demandée par son id :
<?php
$query = "SELECT * FROM pages WHERE id=$id";
$res = mysqli_query($link, $query) or die(mysqli_error($link));
$page = mysqli_fetch_assoc($res);
?>
Récupérons le fichier de modèle (template) :
<?php
$layout = file_get_contents('layout.php');
?>
Dans le fichier de modèle, effectuons l'insertion du titre et du contenu :
<?php
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
?>
Envoyons la page assemblée du site au navigateur :
<?php
echo $layout;
?>
Rassemblons tout et obtenons le code suivant :
<?php
require 'connect.php';
$url = $_SERVER['REQUEST_URI'];
preg_match('#/page/(\d+)#', $url, $match);
$id = $match[1];
$query = "SELECT * FROM pages WHERE id=$id";
$res = mysqli_query($link, $query) or die(mysqli_error($link));
$page = mysqli_fetch_assoc($res);
$layout = file_get_contents('layout.php');
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
echo $layout;
?>
Implémentez le moteur décrit. Testez son fonctionnement.