Database-aangedreven engine in PHP
Laten we nu een website-engine maken waarin de inhoud van pagina's niet in bestanden wordt opgeslagen, maar in een database. Stel dat we in de database de volgende tabel hebben:
| id | title | content |
|---|---|---|
| 1 | title1 | <div> content1 </div> |
| 2 | title2 | <div> content2 </div> |
| 3 | title3 | <div> content3 </div> |
Stel dat we onze pagina's willen ophalen via
URL's van het formaat /page/1, waarbij het getal
het id vertegenwoordigt van de pagina
die we willen ophalen.
Laten we beginnen met de implementatie. Om te beginnen maken we in een apart bestand verbinding met de database en verbinden we dit bestand met het onze:
<?php
$link = require 'connect.php';
?>
We halen de opgevraagde URL op:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Met behulp van een reguliere expressie splitsen we de URL in delen:
<?php
preg_match('#/page/(\d+)#', $url, $match);
?>
We schrijven het id uit de capture group in een variabele:
<?php
$id = $match[1];
?>
We voeren een query uit op de database, waarbij we via het id
de opgevraagde pagina ophalen:
<?php
$query = "SELECT * FROM pages WHERE id=$id";
$res = mysqli_query($link, $query) or die(mysqli_error($link));
$page = mysqli_fetch_assoc($res);
?>
We halen het sjabloonbestand op:
<?php
$layout = file_get_contents('layout.php');
?>
In het sjabloonbestand voeren we de invoeging van de titel en de inhoud uit:
<?php
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
?>
We sturen de samengestelde webpagina naar de browser:
<?php
echo $layout;
?>
Laten we alles samenvoegen en we krijgen de volgende code:
<?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;
?>
Implementeer de beschreven engine. Test de werking ervan.