Cette partie est la plus longue, mais reste tout de même assez courte, même très courte par rapport à celles de la page admin.php

.
Création
Si vous vous souvenez, dans cette partie on peut créer soit un forum, soit une catégorie. C'est une petite variable appelée c qui fait la différence. On va donc dans un premier temps la récupérer (elle se cache quelque part dans l'url), et ensuite on va agir

.
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
36
37
38
39
40 | <?php
case "forum":
//Ici forum
$action = htmlspecialchars($_GET['action']); //On récupère la valeur de action
switch($action) //2ème switch
{
case "creer":
//On commence par les forums
if ($_GET['c'] == "f")
{
$titre = $_POST['nom'];
$desc = $_POST['desc'];
$cat = (int) $_POST['cat'];
$query=$db->prepare('INSERT INTO forum_forum (forum_cat_id, forum_name, forum_desc)
VALUES (:cat, :titre, :desc)');
$query->bindValue(':cat',$cat,PDO::PARAM_INT);
$query->bindValue(':titre',$titre, PDO::PARAM_STR);
$query->bindValue(':desc',$desc,PDO::PARAM_STR);
$query->execute();
echo'<br /><br />Le forum a été créé !<br />
Cliquez <a href="./admin.php">ici</a> pour revenir à l administration';
$query->CloseCursor();
}
//Puis par les catégories
elseif ($_GET['c'] == "c")
{
$titre = $_POST['nom'];
$query=$db->prepare('INSERT INTO forum_categorie (cat_nom) VALUES (:titre)');
$query->bindValue(':titre',$titre, PDO::PARAM_STR);
$query->execute();
echo'<p>La catégorie a été créée !<br /> Cliquez <a href="./admin.php">ici</a>
pour revenir à l administration</p>';
$query->CloseCursor();
}
break;
?>
|
Il s'agit donc simplement de récupérer les données et de faire une requête. Juste un truc avant de continuer : vous remarquez qu'on ne modifie que 3 champs pour les forums, alors que la table
forum_forum en contient une bonne dizaine... C'est en fait parce que les autres doivent être modifiés ailleurs. Ainsi, un forum nouvellement créé se retrouvera automatiquement relégué à la dernière place de la catégorie.
Éditer
Pour l'édition, il y avait 4 cas différents ; on va bien sûr devoir en tenir compte ici aussi. Le code est donc découpé à l'aide de
if et autres
elseif, mais on va voir ça progressivement.
Édition d'un forum
Bon bah ça, c'est très simple : on récupère les infos envoyées par la page admin.php, et on met à jour la base de données.
Avant ça, il faut toutefois vérifier qu'il n'y a pas eu de problème, et que le forum à éditer existe bien.
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
36
37
38 | <?php
case "edit":
echo'<h1>Edition d un forum</h1>';
if($_GET['e'] == "editf")
{
//Récupération d'informations
$titre = $_POST['nom'];
$desc = $_POST['desc'];
$cat = (int) $_POST['depl'];
//Vérification
$query=$db->prepare('SELECT COUNT(*)
FROM forum_forum WHERE forum_id = :id');
$query->bindValue(':id',(int) $_POST['forum_id'],PDO::PARAM_INT);
$query->execute();
$forum_existe=$query->fetchColumn();
$query->CloseCursor();
if ($forum_existe == 0) erreur(ERR_FOR_EXIST);
//Mise à jour
$query=$db->prepare('UPDATE forum_forum
SET forum_cat_id = :cat, forum_name = :name, forum_desc = :desc
WHERE forum_id = :id');
$query->bindValue(':cat',$cat,PDO::PARAM_INT);
$query->bindValue(':name',$titre,PDO::PARAM_STR);
$query->bindValue(':desc',$desc,PDO::PARAM_STR);
$query->bindValue(':id',(int) $_POST['forum_id'],PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//Message
echo'<p>Le forum a été modifié !<br />Cliquez <a href="./admin.php">ici</a>
pour revenir à l administration</p>';
}
?>
|
Pas grand-chose à ajouter... Vous pouvez, si vous le souhaitez, permettre l'utilisation du bbcode sur les descriptions des forums. Dans ce cas, utilisez la fonction
code. De plus, vous pouvez aussi limiter la taille des descriptions pour éviter des textes trop longs.
Édition d'une catégorie
Encore plus facile, puisqu'il n'y a que le nom à mettre à jour. Du coup, c'est le même schéma, mais en plus court !
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 | <?php
elseif($_GET['e'] == "editc")
{
//Récupération d'informations
$titre = $_POST['nom'];
//Vérification
$query=$db->prepare('SELECT COUNT(*)
FROM forum_categorie WHERE cat_id = :cat');
$query->bindValue(':cat',(int) $_POST['cat'],PDO::PARAM_INT);
$query->execute();
$cat_existe=$query->fetchColumn();
$query->CloseCursor();
if ($cat_existe == 0) erreur(ERR_CAT_EXIST);
//Mise à jour
$query=$db->prepare('UPDATE forum_categorie
SET cat_nom = :name WHERE cat_id = :cat');
$query->bindValue(':name',$titre,PDO::PARAM_STR);
$query->bindValue(':cat',(int) $_POST['cat'],PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//Message
echo'<p>La catégorie a été modifiée !<br />
Cliquez <a href="./admin.php">ici</a>
pour revenir à l administration</p>';
}
?>
|
Ici aussi, vous pouvez limiter la taille du nom de la catégorie, mais à vrai dire, je vois mal comment celui-ci pourrait être très long

.
Modification de l'ordre des forums
Voilà qui devient un peu plus intéressant

: je vous rappelle que dans la page admin.php, on avait créé un formulaire qui associait à chaque forum son numéro d'ordre ; il va donc falloir mettre les éventuelles modifications à jour dans la base de données.
Pour cela, on est obligés de faire une requête dans une boucle... Cependant, pour limiter un peu le nombre des requêtes, on vérifie d'abord si l'ordre a effectivement changé.
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 | <?php
elseif($_GET['e'] == "ordref")
{
//On récupère les id et l'ordre de tous les forums
$query=$db->query('SELECT forum_id, forum_ordre FROM forum_forum');
//On boucle les résultats
while($data= $query->fetch())
{
$ordre = (int) $_POST[$data['forum_id']];
//Si et seulement si l'ordre est différent de l'ancien, on le met à jour
if ($data['forum_ordre'] != $ordre)
{
$query=$db->prepare('UPDATE forum_forum SET forum_ordre = :ordre
WHERE forum_id = :id');
$query->bindValue(':ordre',$ordre,PDO::PARAM_INT);
$query->bindValue(':id',$data['forum_id'],PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
}
}
$query->CloseCursor();
//Message
echo'<p>L ordre a été modifié !<br />
Cliquez <a href="./admin.php">ici</a> pour revenir à l administration</p>';
}
?>
|
Si vous ne comprenez pas le
Code : PHP | <? $ordre = (int) $_POST[$data['forum_id']] ?>
|
c'est en rapport avec la page admin.php, la valeur des ordres s'obtient en faisant
$_POST['id_du_forum'].
Changer l'ordre des catégories
Assez similaire : on va encore une fois faire une requête dans la boucle, qu'on limitera un peu avec la condition qui vérifie si l'ordre a bien changé avant de le mettre à jour.
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 | <?php
elseif($_GET['e'] == "ordrec")
{
//On récupère les id et les ordres de toutes les catégories
$query=$db->query('SELECT cat_id, cat_ordre FROM forum_categorie');
//On boucle le tout
while($data = $query->fetch())
{
$ordre = (int) $_POST[$data['cat_id']];
//On met à jour si l'ordre a changé
if($data['cat_ordre'] != $ordre)
{
$query=$db->prepare('UPDATE forum_categorie SET cat_ordre = :ordre
WHERE cat_id = :id');
$query->bindValue(':ordre',$ordre,PDO::PARAM_INT);
$query->bindValue(':id',$data['cat_id'],PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
}
}
echo'<p>L ordre a été modifié !<br />
Cliquez <a href="./admin.php">ici</a> pour revenir à l administration</p>';
}
break;
?>
|
Les droits
Pour les droits du forum, il faut récupérer les données pour 5 variables,
auth_view,
auth_post,
auth_topic, etc. En clair, toutes les variables qui vont servir à remplir les champs qui ont un rapport avec les autorisations.
Heureusement pour nous, le travail a été mâché dans la page précédente ; il ne restera plus qu'à faire comme ceci pour obtenir la valeur de la variable que l'on cherche :
Code : PHP | <?php
$auth_view = (int) $_POST['auth_view'];
?>
|
Voci alors le code :
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 | <?php
case "droits":
//Récupération d'informations
$auth_view = (int) $_POST['auth_view'];
$auth_post = (int) $_POST['auth_post'];
$auth_topic = (int) $_POST['auth_topic'];
$auth_annonce = (int) $_POST['auth_annonce'];
$auth_modo = (int) $_POST['auth_modo'];
//Mise à jour
$query=$db->prepare('UPDATE forum_forum
SET auth_view = :view, auth_post = :post, auth_topic = :topic,
auth_annonce = :annonce, auth_modo = :modo WHERE forum_id = :id');
$query->bindValue(':view',$auth_view,PDO::PARAM_INT);
$query->bindValue(':post',$auth_post,PDO::PARAM_INT);
$query->bindValue(':topic',$auth_topic,PDO::PARAM_INT);
$query->bindValue(':annonce',$auth_annonce,PDO::PARAM_INT);
$query->bindValue(':modo',$auth_modo,PDO::PARAM_INT);
$query->bindValue(':id',(int) $_POST['forum_id'],PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//Message
echo'<p>Les droits ont été modifiés !<br />
Cliquez <a href="./admin.php">ici</a> pour revenir à l administration</p>';
break;
} //Fin du switch
break;
?>
|
Voici alors le code :
Rien de bien compliqué donc, et du coup la partie forum est achevée. Il ne nous reste plus qu'à nous occuper des membres, et ça sera enfin terminé

.