Enjin gebaseer op 'n databasis in PHP
Laat ons nou 'n webwerf-enjin skep waarin die bladsy-inhoud nie in lêers gestoor word nie, maar in 'n databasis. Kom ons sê ons het die volgende tabel in die databasis:
| id | title | content |
|---|---|---|
| 1 | title1 | <div> content1 </div> |
| 2 | title2 | <div> content2 </div> |
| 3 | title3 | <div> content3 </div> |
Kom ons sê ons wil ons bladsye kry by
URL's van die vorm /page/1, waar die getal
die id van die bladsy sal voorstel
wat ons wil kry.
Kom ons begin met die implementering. Eers, in 'n aparte lêer, maak ons 'n verbinding met die databasis en koppel ons hierdie lêer aan ons s'n:
<?php
$link = require 'connect.php';
?>
Kry die aangevraagde URL:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Deel die URL in dele met behulp van 'n reëlmatige uitdrukking:
<?php
preg_match('#/page/(\d+)#', $url, $match);
?>
Stoor die id uit die "capture group" in 'n veranderlike:
<?php
$id = $match[1];
?>
Voer 'n navraag na die databasis uit om die
aangevraagde bladsy volgens id te kry:
<?php
$query = "SELECT * FROM pages WHERE id=$id";
$res = mysqli_query($link, $query) or die(mysqli_error($link));
$page = mysqli_fetch_assoc($res);
?>
Kry die sjabloonlêer:
<?php
$layout = file_get_contents('layout.php');
?>
Voer die invoeging van die titel en inhoud in die sjabloonlêer uit:
<?php
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
?>
Stuur die saamgestelde webwerfblad na die blaaier:
<?php
echo $layout;
?>
Laat ons alles bymekaar sit en die volgende kode kry:
<?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 die beskryfde enjin. Toets die werking daarvan.