Datenbankbasierte Engine in PHP
Lassen Sie uns nun eine Website-Engine erstellen, in der der Seiteninhalt nicht in Dateien gespeichert wird, sondern in einer Datenbank. Nehmen wir an, wir haben folgende Tabelle in der Datenbank:
| id | title | content |
|---|---|---|
| 1 | title1 | <div> content1 </div> |
| 2 | title2 | <div> content2 </div> |
| 3 | title3 | <div> content3 </div> |
Nehmen wir an, wir möchten unsere Seiten über
URLs wie /page/1 abrufen, wobei die Zahl
die id der Seite darstellt,
die wir abrufen möchten.
Beginnen wir mit der Implementierung. Zuerst erstellen wir in einer separaten Datei eine Verbindung zur Datenbank und binden diese Datei in unsere ein:
<?php
$link = require 'connect.php';
?>
Holen wir die angeforderte URL:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Teilen wir die URL mithilfe eines regulären Ausdrucks in Teile:
<?php
preg_match('#/page/(\d+)#', $url, $match);
?>
Schreiben wir die id aus der Erfassungsgruppe in eine Variable:
<?php
$id = $match[1];
?>
Führen wir eine Abfrage an die Datenbank durch, um
die angeforderte Seite per id
zu erhalten:
<?php
$query = "SELECT * FROM pages WHERE id=$id";
$res = mysqli_query($link, $query) or die(mysqli_error($link));
$page = mysqli_fetch_assoc($res);
?>
Holen wir die Layout-Datei:
<?php
$layout = file_get_contents('layout.php');
?>
In der Layout-Datei führen wir das Einsetzen des Titels und des Inhalts durch:
<?php
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
?>
Senden wir die zusammengestellte Website-Seite an den Browser:
<?php
echo $layout;
?>
Fassen wir alles zusammen und erhalten folgenden 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;
?>
Implementieren Sie die beschriebene Engine. Testen Sie ihre Funktion.