Andmebaasipõhine mootor PHP-s

Teeme nüüd veebimootori, kus lehtede sisu ei salvestata failidesse, vaid andmebaasis. Oletame, et meil on andmebaasis järgmine tabel:

pages
id title content
1 title1 <div> content1 </div>
2 title2 <div> content2 </div>
3 title3 <div> content3 </div>

Oletame, et soovime saada oma lehti URL-ide abil kujul /page/1, kus number tähistab selle lehe id-d, mida soovime saada.

Alustame rakendamist. Kõigepealt teeme eraldi failis andmebaasi ühenduse ja ühendame selle faili oma failiga:

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

Saame päritud URL-i:

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

Kasutades regulaaravaldist, jagame URL-i osadeks:

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

Kirjutame id grupist muutujasse:

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

Teostame päringu andmebaasi, saades id alusel päritud lehe:

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);
?>

Saame mallifaili:

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

Mallifailis teostame pealkirja ja sisu asendamise:

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

Saadame koostatud veebilehe brauserisse:

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

Kogume kõik kokku ja saame järgmise koodi:

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

Rakendage kirjeldatud mootor. Kontrollige selle toimimist.