Motore basato su database in PHP

Ora creiamo un motore per sito web in cui il contenuto delle pagine non sarà memorizzato in file, ma in un database. Supponiamo che nel database abbiamo una tabella come questa:

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

Supponiamo di voler ottenere le nostre pagine tramite URL come /page/1, dove il numero rappresenterà l'id della pagina che vogliamo ottenere.

Iniziamo l'implementazione. Per prima cosa in un file separato creiamo una connessione al database e colleghiamo questo file al nostro:

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

Otteniamo l'URL richiesto:

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

Utilizzando un'espressione regolare, dividiamo l'URL in parti:

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

Salviamo l'id dalla cattura in una variabile:

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

Eseguiamo una query al database, ottenendo tramite l'id la pagina richiesta:

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

Otteniamo il file del template:

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

Nel file del template eseguiamo l'inserimento del titolo e del contenuto:

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

Inviamo la pagina assemblata al browser:

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

Mettiamo tutto insieme e otteniamo il seguente codice:

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

Implementate il motore descritto. Verificate il suo funzionamento.