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:
| 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:
<?php
$link = require 'connect.php';
?>
Otteniamo l'URL richiesto:
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Utilizzando un'espressione regolare, dividiamo l'URL in parti:
<?php
preg_match('#/page/(\d+)#', $url, $match);
?>
Salviamo l'id dalla cattura in una variabile:
<?php
$id = $match[1];
?>
Eseguiamo una query al database, ottenendo tramite l'id
la pagina richiesta:
<?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:
<?php
$layout = file_get_contents('layout.php');
?>
Nel file del template eseguiamo l'inserimento del titolo e del contenuto:
<?php
$layout = str_replace('{{ title }}', $page['title'], $layout);
$layout = str_replace('{{ content }}', $page['content'], $layout);
?>
Inviamo la pagina assemblata al browser:
<?php
echo $layout;
?>
Mettiamo tutto insieme e otteniamo il seguente codice:
<?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;
?>
Implementate il motore descritto. Verificate il suo funzionamento.