Enjin Berasaskan Pangkalan Data dalam PHP
Sekarang mari kita buat enjin laman web di mana kandungan halaman akan disimpan bukan dalam fail, tetapi dalam pangkalan data. Katakan kita mempunyai jadual seperti berikut dalam pangkalan data:
| id | title | content |
|---|---|---|
| 1 | title1 | <div> content1 </div> |
| 2 | title2 | <div> content2 </div> |
| 3 | title3 | <div> content3 </div> |
Katakan kita mahu mendapatkan halaman kita melalui
URL seperti /page/1, di mana nombor tersebut
akan mewakili id halaman yang kita mahu dapatkan.
Mari kita mulakan pelaksanaannya. Pertama, dalam fail berasingan, buat sambungan ke pangkalan data dan sambungkan fail tersebut ke fail kita:
<?php
$link = require 'connect.php';
?>
Dapatkan URL yang diminta:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Dengan menggunakan ungkapan nalar, bahagikan URL kepada beberapa bahagian:
<?php
preg_match('#/page/(\d+)#', $url, $match);
?>
Tulis id dari tangkapan (capturing group) ke dalam pembolehubah:
<?php
$id = $match[1];
?>
Laksanakan pertanyaan (query) ke pangkalan data, dapatkan
halaman yang diminta berdasarkan id:
<?php
$query = "SELECT * FROM pages WHERE id=$id";
$res = mysqli_query($link, $query) or die(mysqli_error($link));
$page = mysqli_fetch_assoc($res);
?>
Dapatkan fail templat:
<?php
$layout = file_get_contents('layout.php');
?>
Dalam fail templat, lakukan pemasangan tajuk dan kandungan:
<?php
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
?>
Hantar halaman laman web yang telah dipasang ke pelayar:
<?php
echo $layout;
?>
Satukan semuanya dan kita akan dapat kod berikut:
<?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;
?>
Laksanakan enjin yang diterangkan. Uji fungsinya.