Bon, on va enfin pouvoir attaquer les pages les plus importantes.
Dans un premier temps, on va élaborer la page
creer.php, qui aura pour but de créer une page.
Ensuite, ce sera au tour de
edit.php, qui permettra d'en modifier.
Créer une page
Encore une fois, on va créer une page qui appellera le fichier
creer_page.php (qui se trouve dans le dossier
lib).

Si je sépare les fichiers comme cela, c'est pour que la modification des scripts soit plus aisée : ainsi, on ne se retrouve pas avec des fichiers de 300 lignes.
Commençons par déclarer la fonction :
Code : PHP | <?php
function creer_page($type, $titre, $contenu)
{
GLOBAL $id_a_creer;
?>
|
Pour information, sachez ceci :
$type contiendra
normal ou
protege. Si la valeur est
protege, on concevra un système pour bloquer l'édition de la page.
$id_a_creer contiendra l'
id de la page créée.
Maintenant, on va utiliser la fonction
glob(), qui dresse dans un tableau la liste des fichiers et dossiers du répertoire passé en paramètre.
Code : PHP | <?php
$liste_dossiers = glob($repertoire.'/*'); // On va lister tous les dossiers, en sachant que le nom du dossier == l'id de la page
$ids; // Cette variable contiendra les id de toutes les pages
$compteur = 0; // Compteur qui servira au foreach
?>
|
Nous pouvons maintenant démarrer le
foreach, afin qu'il nous trouve l'
id de la dernière page créée. La méthode employée est très simple ; je vous laisse regarder :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12 | <?php
foreach($liste_dossiers as $nom)
{
if(is_dir($nom))
{
$id = explode('/', $nom); // On va séparer les parties de $nom pour avoir la dernière : l'id du dossier
$ids[$compteur] = $id[1]; // On stocke l'id dans le tableau
$compteur++;
}
}
$id_a_creer = max($ids); // Grâce à la fonction max, on récupère le plus grand id du tableau
?>
|
À présent, on va augmenter de 1 la variable
$id_a_creer, pour qu'elle contienne le nouvel
id.
Ensuite, nous allons créer le dossier qui aura pour nom cet
id, et déclarer la variable
$repertoire qui va nous servir pour toutes les actions sur les fichiers qui suivront.
Code : PHP | <?php
$id_a_creer++;
$creer_dossier = mkdir($repertoire.'/'.$id_a_creer); // On crée le dossier
$repertoire = $repertoire.'/'.$id_a_creer;
?>
|
Si
$type (pour rappel, il s'agit de l'un des paramètres de la fonction) est égal à
protege, on crée un fichier de plus :
Code : PHP | <?php
if($type == "protege")
{
$creer_fichier_protect = fopen($repertoire.'/protect', 'w+');
fclose($creer_fichier_protect);
}
?>
|
Ce fichier sera vide, mais il va exister, et il suffira de vérifier si ce fichier existe pour savoir si l'édition est interdite ou non.
Rien de bien compliqué.

Petit rappel à propos de
fopen : il faut lui indiquer comment ouvrir le fichier (lecture, écriture, etc.). Toutes ces façons d'ouvrir le fichier sont disponibles ici :
DOC PHP.
Dans notre cas, le moyen utilisé est « en écriture, on crée le fichier s'il n'existe pas » (=
w+).
À présent, on va créer les fichiers qui contiendront le titre et le contenu :
Code : PHP | <?php
file_put_contents($repertoire.'/titre.txt', $titre); // On écrit le titre dans le fichier
file_put_contents($repertoire.'/contenu.txt', $contenu); // On inscrit le contenu dans le fichier
?>
|
Il nous reste une dernière étape à effectuer ; elle concerne l'historique de la page : dans ce cas-ci, il faut sauvegarder à un autre endroit le titre et le contenu pour qu'il soit possible, après une modification non désirée, de remettre cette version à la place de celle qui est en ligne.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | <?php
######################################################
## Partie pour les sauvegardes, pour la restauration ##
######################################################
$timestamp_actuel = time(); // On récupère le timestamp actuel pour dater la sauvegarde
$creer_dossier_sav = mkdir($repertoire.'/save'); // On crée le dossier qui va contenir toutes les sauvegardes de la page
$creer_dossier_time = mkdir($repertoire.'/save/'.$timestamp_actuel); // On crée le dossier qui va contenir le titre et le contenu pour pouvoir restaurer après !
$repertoire = $repertoire.'/save/'.$timestamp_actuel; // On change le répertoire de traitement
## Même étape que précédemment
file_put_contents($repertoire.'/titre.txt', $titre);
file_put_contents($repertoire.'/contenu.txt', $contenu);
#############################################
## Fin de la partie pour les restaurations ##
#############################################
?>
|
Et voilà !
Il faut maintenant que l'on constitue la page
creer.php (ne se trouvant pas dans le dossier
lib) qui affichera le formulaire.
Étant donné que le code est très simple, j'ai jugé inutile de vous en détailler le contenu. Le voici :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Wiki</title>
</head>
<body>
<?php
if(!empty($_POST['titre']) && !empty($_POST['contenu'])) // Si le formulaire a été validé et qu'il n'est pas vide
{
$titre = htmlspecialchars($_POST['titre']); // La variable contenant le titre
$contenu = nl2br(htmlspecialchars($_POST['contenu'])); // Le contenu
require('lib/creer_page.php'); // On récupère la fonction pour créer la page
if(isset($_POST['1'])) // Si on crée la page normalement
creer_page('normal', $titre, $contenu); // On appelle la fonction pour créer la page
if(isset($_POST['2'])) // Si on veut rendre l'édition impossible
creer_page('protege', $titre, $contenu); // On appelle la fonction pour créer la page
echo 'Votre page a bien été créée !<br />
Vous pouvez la voir ici : <a href="view.php?id='.$id_a_creer.'">voir ma page</a>.';
}
else // on n'a pas validé le formulaire, alors on l'affiche !
{
echo '<form method="post" action="creer.php">
<p><label for="titre">Titre de votre page : </label><br />
<input type="text" name="titre" id="titre" /><br />
<label for="contenu">Contenu de votre page : </label><br />
<textarea name="contenu" id="contenu" cols="100" rows="10"></textarea><br />
<input type="submit" name="1" value="Créer ma page !" /><input type="submit" name="2" value="Créer et rendre impossible l\'édition" /></p></form>';
}
?>
</body>
</html>
|
Faites bien attention à la partie qui vérifie sur quel bouton l'on a cliqué, pour savoir si on doit empêcher l'édition ou non.

Voilà : vous avez maintenant vos deux pages et pouvez en créer.

Essayez d'en créer deux, et rendez-vous sur la page d'accueil : magique, deux titres s'affichent !
Modification de la page
On associe souvent le mot « ajouter » à « modifier », et c'est ce qui est fait dans ce tutoriel.
Voyons un peu en quoi consistent les deux pages nécessaires à la modification d'un article.
La première se nomme
modifier_page.php et se trouve dans le dossier
lib (le fichier contient une fonction

).
On commence par déclarer la fonction :
Code : PHP | <?php
function modifier_page($id, $titre = NULL, $contenu = NULL)
{
$repertoire = 'pages/'.$id;
?>
|
Je ne vais pas trop vous détailler le code suivant ; vous la comprendrez mieux lorsque je vous montrerai la deuxième page.
Code : PHP | <?php
if($titre != NULL) // Si on veut modifier le titre
{
file_put_contents($repertoire.'/titre.txt', $titre); // On écrit le titre dans le fichier
}
if($contenu != NULL) // Si on veut modifier le contenu
{
file_put_contents($repertoire.'/contenu.txt', $contenu); // On met le contenu dans le fichier
}
?>
|
Il ne nous reste plus qu'à nous occuper du système d'historique : nous allons créer un dossier (il aura pour nom le
timestamp actuel lors de la modification) qui contiendra le titre et le contenu de la page après modification.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12 | <?php
## PARTIE POUR LES SAUVEGARDES
$timestamp_actuel = time(); // Timestamp actuel
$creer_dossier_time = mkdir($repertoire.'/save/'.$timestamp_actuel); // On crée le répertoire qui aura pour nom le timestamp actuel
file_put_contents($repertoire.'/save/'.$timestamp_actuel.'/titre.txt', $titre); // On crée le fichier et on écrit le titre
file_put_contents($repertoire.'/save/'.$timestamp_actuel.'/contenu.txt', $contenu); // Création du fichier + écriture du contenu
## FIN PARTIE POUR LES SAUVEGARDES
?>
|
Ouf, fini pour cette page.

Afin d'achever proprement la partie « modification » (il serait bête de ne pouvoir utiliser la fonction ci-dessus), nous allons construire une page
edit.php, qui s'occupera du formulaire et du reste.
Bon, voici déjà les premières lignes du code :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Édition d'une page</title>
</head>
<body>
<?php
require('lib/voir_page.php'); // On a aussi besoin de cette fonction pour connaître le titre et le contenu de la page
require('lib/modifier_page.php');
if(!isset($_GET['id'])) // Si on n'a pas l'id de la page demandée
{
echo 'Vous devez fournir l\'id de la page !<br />'; // Message d'erreur
exit; // On arrête le script
}
?>
|
Ces lignes sont indispensables pour que le reste du script fonctionne.
Vous avez sûrement remarqué que nous avions besoin du script
lib/voir_page.php ; c'est un code que je vous donnerai plus bas.

Plus haut, je vous disais que vous comprendriez les lignes du code plus tard. Ce « plus tard » est arrivé, et voici le code qui correspond :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 | <?php
if(!empty($_POST['titre']) && !empty($_POST['contenu'])) // Si le formulaire n'est pas vide
{
if($_POST['titre'] != $_POST['titre_old'])
{
$modif_titre = htmlspecialchars($_POST['titre']);
}
else
{
$modif_titre = NULL;
}
if($_POST['contenu'] != $_POST['contenu_old'])
{
$modif_contenu = nl2br(htmlspecialchars($_POST['contenu']));
}
else
{
$modif_contenu = NULL;
}
if(!file_exists('pages/'.intval($_GET['id']).'/protect')) // Si l'édition n'est pas protégée
{
modifier_page(intval($_GET['id']), $modif_titre, $modif_contenu);
}
else //Si elle l'est
{
echo 'L\'édition est interdite !';
exit;
}
echo 'Page modifiée !<br />
<a href="view.php?id='.$_GET['id'].'">Voir la page</a>';
}
?>
|
Il reste à afficher le formulaire ; vous pourrez le modifier par la suite, bien entendu.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | <?php
else // S'il n'a pas été posté
{
if(file_exists('pages/'.intval($_GET['id']).'/protect')) // Si l'édition n'est pas protégée
{
echo 'L\'édition est interdite !';
exit;
}
affiche_page(intval($_GET['id']));
$donnees['Contenu'] = str_replace('<br />', '', $donnees['Contenu']);
echo '<form method="post" action="edit.php?id='.$_GET['id'].'">
<p><label for="titre">Titre de la page : </label><br />
<input type="text" name="titre" id="titre" value="'.$donnees['Titre'].'" />
<input type="hidden" name="titre_old" value="'.$donnees['Titre'].'" /><br />
<label for="contenu">Contenu de la page : </label><br />
<textarea name="contenu" id="contenu" rows="10" cols="100">'.$donnees['Contenu'].'</textarea>
<input type="hidden" name="contenu_old" value="'.$donnees['Contenu'].'" /><br />
<input type="submit" value="Modifier la page" /></p></form>';
}
?>
</body>
</html>
|
Bon, ben... c'est tout pour les actions sur les pages !
Au cours de la partie suivante, vous allez enfin pouvoir afficher les belles pages que vous avez créées.
