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 :

pages
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 :

index.php<?php
  $link = require 'connect.php';
?>

Récupérons l'URL demandée :

index.php<?php
  $url = $_SERVER['REQUEST_URI'];
?>

À l'aide d'une expression régulière, divisons l'URL en parties :

index.php<?php
  preg_match('#/page/(\d+)#', $url, $match);
?>

Enregistrons l'id de la capture (groupe) dans une variable :

index.php<?php
  $id = $match[1];
?>

Exécutons une requête à la base de données, pour obtenir la page demandée par son id :

index.php<?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) :

index.php<?php
  $layout = file_get_contents('layout.php');
?>

Dans le fichier de modèle, effectuons l'insertion du titre et du contenu :

index.php<?php
  $layout = str_replace('{{ title }}', $page['title'], $layout);
  $layout = str_replace('{{ content }}', $page['content'], $layout);
?>

Envoyons la page assemblée du site au navigateur :

index.php<?php
  echo $layout;
?>

Rassemblons tout et obtenons le code suivant :

index.php<?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;
?>
Задание 1

Implémentez le moteur décrit. Testez son fonctionnement.