<?php
// Ceci est générique. Il s'agit de se connecter à la base de données
$host = 'localhost';
$dbname = 'test_db';
$user = 'user';
$passwd = 'passwd';
$db = new PDO('mysql:host'.$host.';'.$dbname, $user, $passwd);
// Si on ne spécifie pas de page à modifier
if (empty($_GET['id'])) { echo 'Aucune page n\'est spécifiée.';
}
// On récupère les informations de la page demandée
$query = $db->prepare('SELECT
pages.id, pages.published_date, pages.updated_date, pages.revision_id,
pages_textes.published_date AS published_date_texte, pages_textes.title, pages_textes.content
FROM pages
LEFT JOIN pages_textes ON pages_textes.page_id = pages.id AND pages_textes.id = pages.revision_id
WHERE pages.id = ?');
$query = $db->bindValue(1, $_GET['id']);
$query->execute();
$page = $query->fetch(PDO::FETCH_ASSOC);
// Si la page n'existe pas
echo 'La page demandée n\'existe pas.';
}
// On récupères les versions de texte de la page
$query = $db->prepare('SELECT id, published_date FROM pages_textes WHERE page_id = ? ORDER BY published_date DESC');
$query->bindValue(1, $_GET['id']);
$query->execute();
$revisions = $query->fetchAll();
if (!empty($_POST)) { // Si le formulaire est bien envoyé // On vérifie si tous les champs sont remplient
if (empty($_POST['title']) || empty ($_POST['content'])) { echo 'Le formulaire n\'est pas bien complété.';
}
// On insert le texte dans la table
$query = $db->prepare('INSERT INTO pages_textes (page_id, title, content) VALUES(?, ?, ?)');
$query->bindValue(1, $_GET['id']);
$query->bindValue(2, $_POST['title']);
$query->bindValue(3, $_POST['content']);
$query->execute();
// On récupère l'Id du texte
$revisionId = $db->lastInsertId();
// On vient modifier la page pour y insérer l'Id du texte
$query->prepare('UPDATE pages SET revision_id = '.$revisionId.' WHERE id = ?');
$query->bindValue(1, $_GET['id']);
$query->execute();
// Tout s'est bien exécuté
echo 'La page a bien été modifiée !';
} elseif (!empty($_GET['revision'])) { // Si on veut restaurer une ancienne version du texte // On vérifie si le texte demandé existe
$query = $db->prepare('SELECT COUNT(*) AS nb FROM pages_textes WHERE page_id = ? AND id = ?');
$query->bindValue(1, $_GET['id']);
$query->bindValue(2, $_GET['revision']);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
// Si le texte n'existe pas
if (empty($row) || $row['nb'] < 1) { echo 'La révision demandée n\'a pas été trouvée.';
}
// On modifie le champ "revision_id" pour l'Id du texte choisi
$query = $db->prepare('UPDATE pages SET revision_id = ? WHERE id = ?');
$query->bindValue(1, $_GET['revision']);
$query->bindValue(2, $_GET['id']);
$query->execute();
// Tou s'est bien passé
echo 'La restauration du texte a été effectuée.';
}
?>
<html>
<body>
<h1>Modifier une page</h1>
<form action="?id=<?php echo $_GET['id']; ?>" method="post">
<label>Titre : <input type="text" name="title" value="<?php echo $page['title']; ?>" /></label><br />
<label>Contenu : <textarea name="content"><?php echo $page['content']; ?></textarea></label><br />
<button type="submit">Modifier la page</button>
</form>
<h2>Liste des révisions</h2>
<ul>
<?php
foreach ($revisions as $revision) {
echo '<li><a href="?id='.$_GET['id'].'&revision='.$revision['id'].'">'.$revision['published_date'].'</a></li>';
}
?>
</ul>
</body>
</html>