[Plan du site]
Vous êtes ici ---
> Le Site du Zéro
> Les tutoriels
> Non-Officiels
> Site Web
> PHP
> Systèmes complets
> Créer son forum de toutes pièces > Les pages administration > Administration Partie I
> Lecture du tutoriel
Administration Partie I
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
On y arrive : le forum touche à sa fin, et la partie la plus intéressante est là ! L'administration d'un forum est la touche finale dans la mesure où elle vous permettra, une fois mise en place, de n'accéder à la base de données qu'en cas de problèmes.
Une fois le script réalisé, vous serez totalement indépendants et le forum pourra commencer à tourner normalement.
Ça fait rêver, hein ?
Bon. Malheureusement, le script est à la fois long et tordu, il va donc falloir s'accrocher un minimum

. Pas de panique toutefois, ce n'est pas non plus spécialement compliqué : ce qui est embêtant, c'est la longueur des codes. C'est pour cela que j'ai décidé de séparer le chapitre en deux parties. Ici, nous verrons la page admin.php, qui servira de formulaire en quelque sorte, tandis que dans un second temps, nous verrons la page adminok.php (je sais, ça veut rien dire...

) qui s'occupera de tout le traitement.
Allez 1, 2, 3, c'est parti !
Une seule page pour toute la partie administration (enfin, 2, mais une seule pour la récupération d'informations), cette phrase a peut être dû vous choquer. Vous vous dites :
"hop hop hop mais comment on va pouvoir mettre tout ce qu'on veut faire là-dedans (gestion des forums, des membres, du bannissement, des configurations, des catégories, des droits...)

?"
Eh bien la réponse à cette question, c'est qu'on va utiliser un double switch (prononcez à l'anglaise pour plus de style

) !
Le double switch
Le premier switch récupère en fait des infos sur ce que l'on va toucher (forum ou membre, par exemple), il les prend dans l'url grâce à la variable
cat. Le second s'insère dans le premier, et donne des infos supplémentaires (par exemple
édition) ; lui, il prend les infos grâce à la variable
action, qui se trouve également dans l'url.
Si la variable
action est absente, on affiche le menu de la catégorie qu'on a choisie ; si la variable
cat est absente, on affiche le menu général de l'administration.
Ça va, vous me suivez ?
Voilà la structure de la page, vous comprendrez sûrement mieux ensuite :
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 | <?
$cat = htmlspecialchars($_GET['cat']); //on récupère dans l'url la variable cat
switch($cat) //1er switch
{
case "config":
//ici configuration
break;
case "forum":
//Ici forum
$action = htmlspecialchars($_GET['action']); //On récupère la valeur de action
switch($action) //2eme switch
{
case "creer":
//Création d'un forum
break;
case "edit":
//Edition d'un forum
break;
case "droits":
//Gestion des droits
break;
default; //action n'est pas remplie, on affiche le menu
echo'<h1>Administration des forums</h1>';
echo'<p>Bonjour, cher administrateur :p, que veux tu faire ?
<br />
<a href="./admin.php?cat=forum&action=creer">Créer un forum</a>
<br />
<a href="./admin.php?cat=forum&action=edit">Modifier un forum</a>
<br />
<a href="./admin.php?cat=forum&action=droits">
Modifier les droits d un forum</a><br /></p>';
break;
}
break;
case "membres":
//Ici membres
$action = htmlspecialchars($_GET['action']); //On récupère la valeur de action
switch($action) //2eme switch
{
case "edit":
//Edition d'un membre
break;
case "droits":
//Droits d'un membre (rang)
break;
case "ban":
//Bannissement
break;
default; //action n'est pas remplie, on affiche le menu
echo'<h1>Administration des membres</h1>';
echo'<p>Salut mon ptit, alors tu veux faire quoi ?<br />
<a href="./admin.php?cat=membres&action=edit">
Editer le profil d un membre</a><br />
<a href="./admin.php?cat=membres&action=droits">
Modifier les droits d un membre</a><br />
<a href="./admin.php?cat=membres&action=ban">
Bannir / Debannir un membre</a><br /></p>';
break;
}
break;
default; //cat n'est pas remplie, on affiche le menu général
echo'<h1>Index de l administration</h1>';
echo'<p>Bienvenue sur la page d administration.<br />
<a href="./admin.php?cat=config">Configuration du forum</a><br />
<a href="./admin.php?cat=forum">Administration des forums</a><br />
<a href="./admin.php?cat=membres">Administration des membres</a><br /></p>';
break;
}
?>
|
Vous pouvez comme ça avoir déjà une idée de ce que l'on va réaliser par la suite... Après, si vous voulez ajouter d'autres fonctions, vous n'aurez qu'à les insérer dans ce squelette.
Une nouvelle table
Comme je vous l'avais promis tout au long de la partie 1 de ce tuto, on va pouvoir grâce à l'administration fixer la valeur de certaines variables, comme, par exemple, la taille de l'avatar. Mais vous comprenez bien qu'il faut stocker ces valeurs quelque part : c'est pourquoi nous allons avoir besoin d'une nouvelle table, un peu spéciale puisqu'elle ne contient que deux champs :
config_name, qui représente le nom du paramètre et
config_valeur, qui représente sa... valeur !
Je ne vois pas comment ça peut marcher ton truc : config_valeur, ça peut être un entier comme une chaîne de caractères, et pourtant faut bien faire un choix, non ?
Oui, c'est vrai que c'est un problème, le mieux est encore d'utiliser
VARCHAR : ce type de champ stocke normalement des chaînes de caractères, mais on peut très bien y mettre des chiffres, la seule différence avec
INT, c'est qu'on ne pourra faire aucun calcul avec, sur la base de données.
Code : SQL1
2
3
4 | CREATE TABLE `forum_config` (
config_nom VARCHAR( 200 ) NOT NULL ,
config_valeur VARCHAR( 500 ) NOT NULL
) TYPE = MYISAM ;
|
Et voilà pour la table !
Les autorisations
Ce que je vais dire là va sûrement vous paraître évident, mais on n'est jamais trop prudent. Seuls les administrateurs ont accès au panneau d'administration, autrement dit à la page admin.php. Libre à vous de mettre un lien vers celle-ci où vous voulez, mais assurez-vous que celui-ci ne s'affiche que pour les administrateurs (utilisez la fonction
auth_verif pour cela). Et comme d'habitude, une seconde vérification s'impose sur la page admin.php, afin d'être sûrs que personne ne s'y est introduit en modifiant l'url.
Vous pouvez également jouer sur les autorisations, et faire des parties du panneau d'administration que les modérateurs pourront lire (et donc modifier) afin d'alléger le travail des administrateurs.
Bon : je m'arrête ici, vous voyez qu'il y a des dizaines de façon de personnaliser les scripts qui vont suivre.
On commence tout de suite avec la configuration du forum, c'est-à-dire comme je l'ai dit plus haut, donner des valeurs à des variables par-ci par-là, pour pouvoir les modifier plus rapidement qu'en changeant les scripts.
Mais avant toute chose, il va nous falloir lister un peu toutes ces variables.
Concernant l'enregistrement
Avatar
- Taille maximale de l'avatar (en octets)
- Largeur maximale de l'avatar (en pixels)
- Hauteur maximale de l'avatar (en pixels)
Signature
- Longueur maximale de la signature (en caractères)
- Autorisation du bbcode
Pseudo
- Longueur maximale du pseudo (en caractères)
- Longueur minimale du pseudo (en caractères)
Concernant les topics et posts
Topics
- Nombre de topics par page
posts
Ça fera déjà un bon début : de toutes façons, si vous voulez ajouter quelque chose, vous pouvez le faire très facilement.
Modification de la base de données
Encore ?!
Oui, cette fois il faut remplir un peu notre nouvelle table avec les noms de nos paramètres, et des valeurs par défaut.
Code : SQL1
2
3
4
5
6
7
8
9 | INSERT INTO forum_config VALUES ('avatar_maxsize', '10 000');
INSERT INTO forum_config VALUES ('avatar_maxh', '100 ');
INSERT INTO forum_config VALUES ('avatar_maxl', '100 ');
INSERT INTO forum_config VALUES ('sign_maxl', '200');
INSERT INTO forum_config VALUES ('auth_bbcode_sign', 'oui');
INSERT INTO forum_config VALUES ('pseudo_maxsize', '15');
INSERT INTO forum_config VALUES ('pseudo_minsize', '3');
INSERT INTO forum_config VALUES ('topic_par_page', '20');
INSERT INTO forum_config VALUES ('post_par_page', '15');
|
Cette liste n'a de limite que votre imagination, à vous de la compléter, en annexe de ce tuto, vous trouverez un petit paragraphe sur le sujet.
On affiche le formulaire
Heureusement, le code de cette partie est très simple et très court : il suffit de faire une requête qui retire tout ce qui se trouve dans la table
forum_config, et d'afficher le tout dans un formulaire.
Mais il faut avant faire une petite modification : vous avez pu remarquer que les entrées qui se trouvent dans la colonne
config_name sont carrément baroques, on ne peut pas les afficher comme cela. Donc, deux choix s'offrent à vous : soit vous ajoutez une colonne à cette table, qui contiendra ainsi le texte à afficher, soit vous faites un tableau, qui associe le nom brut au nom à afficher. J'ai choisi cette deuxième méthode, mais la première est tout aussi bien, mieux même si vous voulez pouvoir tout gérer depuis la base de données, sans avoir à modifier les scripts.
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 | <?
case "config":
//ici configuration
echo'<h1>Configuration du forum</h1>';
echo '<form method="post" action="adminok.php?cat=config">';
//Le tableau associatif
$config_name = array(
"avatar_maxsize" => "Taille maximale de l avatar",
"avatar_maxh" => "Hauteur maximale de l avatar",
"avatar_maxl" => "Largeur maximale de l avatar",
"sign_maxl" => "Taille maximale de la signature",
"auth_bbcode_sign" => "Autoriser le bbcode dans la signature",
"pseudo_maxsize" => "Taille maximale du pseudo",
"pseudo_minsize" => "Taille minimale du pseudo",
"topic_par_page" => "Nombre de topics par page",
"post_par_page" => "Nombre de posts par page"
);
$requete_config= mysql_query('SELECT config_nom, config_valeur FROM forum_config');
while($data_config = mysql_fetch_assoc($requete_config))
{
echo '<p><label for='.$data_config['config_nom'].'>
'.$config_name[$data_config['config_nom']].' </label> :
<input type="text" id="'.$data_config['config_nom'].'"
value="'.$data_config['config_valeur'].'"
name="'.$data_config['config_nom'].'"></p>';
}
echo '<p><input type="submit" value="Envoyer" /></p></form>';
break;
|
Voilà : vous obtenez maintenant un formulaire qui n'attend plus qu'à être modifié ; d'ailleurs, il va attendre un peu parce que la page adminok.php est pour le chapitre suivant.
Pour revenir au script ci-dessus, c'est sûr : ce n'est pas très beau, on aurait pu organiser les champs entre eux, mettre des sous-titres, etc. Mais souvenez-vous que cette page ne sera vue que par les administrateurs : donc, à vous de voir si vous jugez important d'améliorer le design

.
Pourquoi ce tableau au final, on ne peut pas envoyer tout simplement le nom affiché, plutôt que le nom brut ?
On pourrait ; à vrai dire, j'avais fait comme ça au début, mais le problème, c'est que dès qu'il y a des espaces, ça devient plus compliqué : il faut les remplacer par des tirets bas "_" ; croyez-moi, cette méthode est plus simple, même si elle n'en a pas l'air tout de suite

.
Par ailleurs, pour que cette page serve à quelque chose, il va falloir bien entendu modifier les scripts dans lesquels apparaissent les variables en question, pour cela je vous laisse faire, il y a plusieurs méthodes dont une exposée en annexe du tuto.
Passons à présent à la gestion des forums, c'est un peu plus long et un peu plus compliqué, alors on s'accroche, et ça ira

.
On continue avec l'administration des forums et des catégories.
Commençons en douceur avec la création d'un forum.
Créer un forum
Lorsque vous créez un forum, vous renseignez les champs de la table
forum_forum. Il faut donc indiquer le nom, la catégorie et la description. Seulement, il ne faut pas oublier un détail : lorsque vous commencez votre forum, il n'y a pas de catégorie dessus

; donc, on va également proposer à l'administrateur de créer une catégorie.
Voici comment va s'organiser le script.
- Si l'url ne contient pas la variable c, on demande à l'admin ce qu'il veut créer (forum ou catégorie).
- Si c contient forum, on lance le formulaire pour la création d'un forum.
- Si c contient catégorie, on lance le formulaire pour la création d'une catégorie.
Le code n'a rien d'extraordinaire, je le mets donc d'un coup :
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
41
42
43
44 | <?
case "creer":
//Création d'un forum
//1er cas : pas de variable c
if(empty($_GET['c']))
{
echo'<br /><br /><br />Que voulez-vous faire?<br />
<a href="./admin.php?cat=forum&action=creer&c=f">Créer un forum</a><br />
<a href="./admin.php?cat=forum&action=creer&c=c">Créer une catégorie</a></br>';
}
//2ème cas : on cherche à créer un forum (c=f)
elseif($_GET['c'] == "f")
{
$requete = mysql_query('SELECT cat_id, cat_nom FROM forum_categorie
ORDER BY cat_ordre DESC');
echo'<h1>Création d un forum</h1>';
echo'<form method="post" action="./adminok.php?cat=forum&action=creer&c=f">';
echo'<label>Nom :</label><input type="text" id="nom" /><br /><br />
<label>Description :</label>
<textarea cols=40 rows=4 name="desc" name="desc"></textarea>
<br /><br />
<label>Catégorie : </label><select name="cat">';
while($data = mysql_fetch_assoc($requete))
{
echo'<option value="'.$data['cat_id'].'">'.$data['cat_nom'].'</option>';
}
echo'</select><br /><br />
<input type="submit" value="Envoyer"></form>';
}
//3ème cas : on cherche à créer une catégorie (c=c)
elseif($_GET['c'] == "c")
{
echo'<h1>Création d une catégorie</h1>';
echo'<form method="post" action="./adminok.php?cat=forum&action=creer&c=c">';
echo'<label> Indiquez le nom de la catégorie :</label>
<input type="text" id="nom" name="nom" /><br /><br />
<input type="submit" value="Envoyer"></form>';
}
break;
?>
|
Vous voyez qu'on n'a pas grand-chose à faire pour créer un forum, et encore moins pour créer une catégorie. En revanche, après, il ne faudra pas oublier d'y inscrire les droits de celui-ci et son ordre. Nous allons voir ça tout de suite.
Édition d'un forum
Là, on arrive à la partie costaud de la page, l'édition d'un forum, mais aussi -je le rappelle- d'une catégorie doit en effet prendre en compte plusieurs choses. Pour être plus clair, il va en fait falloir faire comme précédemment, c'est-à-dire encore subdiviser le script en plusieurs cas. Il y a tout d'abord l'édition basique d'un forum, c'est-à-dire changer son nom, sa description ou encore le déplacer ; ensuite l'édition d'une catégorie, c'est-à-dire tout simplement changer son nom. Enfin, il y a la réorganisation des forums et des catégories.
C'est une variable que j'ai nommée
e, et qui se balade dans l'url qui nous permettra de savoir quoi faire

.
1er Cas : Rien n'est renseigné
Voyons tout d'abord le premier cas, le plus basique :
e n'existe pas, on affiche alors un sous-menu :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | <?
case "edit":
//Edition d'un forum
echo'<h1>Edition d un forum</h1>';
if(!isset($_GET['e']))
{
echo'<p>Que voulez vous faire ?<br />
<a href="./admin.php?cat=forum&action=edit&e=editf">
Editer un forum</a><br />
<a href="./admin.php?cat=forum&action=edit&e=editc">
Editer une catégorie</a><br />
<a href="./admin.php?cat=forum&action=edit&e=ordref">
Changer l ordre des forums</a><br />
<a href="./admin.php?cat=forum&action=edit&e=ordrec">
Changer l ordre des catégories</a>
<br /></p>';
}
?>
|
Comme d'habitude, en fait

. J'en profite pour vous signaler à la suite de certaines remarques que ce que je fais est très moche, j'en suis conscient, mais c'est à vous de l'adapter. Par exemple, vous pouvez faire ça sous forme de liste déroulante, ou encore mettre des images, que sais-je encore;) .
2ème cas : Édition d'un forum
Pour ce cas-là non plus, pas de difficulté mais un code un peu plus long ; en effet, il va dans un premier temps falloir demander de choisir le forum à éditer dans une liste, avant d'afficher les infos que l'on a sur celui-ci et de les modifier.
Les infos en question sont le nom, la description et la catégorie où il se trouve. C'est ce dernier renseignement qui va nous demander un peu plus de code : il faudra boucler toutes les catégories du forum, et mettre le tout dans une liste déroulante.
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 | <?
elseif($_GET['e'] == "editf")
{
//On affiche dans un premier temps la liste des forums
if(!isset($_POST['forum']))
{
$requete = mysql_query('SELECT forum_id, forum_name
FROM forum_forum ORDER BY forum_ordre DESC');
echo'<form method="post"
action="admin.php?cat=forum&action=edit&e=editf">';
echo'<p>Choisir un forum :</br /></h2>
<select name="forum">';
while($data = mysql_fetch_assoc($requete))
{
echo'<option value="'.$data['forum_id'].'">
'.stripslashes(htmlspecialchars($data['forum_name'])).'</option>';
}
echo'<input type="submit" value="Envoyer"></p></form>';
}
//Ensuite, on affiche les renseignements sur le forum choisi
else
{
$requete1 = mysql_query('SELECT forum_id, forum_name, forum_desc,
forum_cat_id
FROM forum_forum
WHERE forum_id = "'.$_POST['forum'].'"');
$data1 = mysql_fetch_assoc($requete1);
echo'<p>Edition du forum
<strong>'.stripslashes(htmlspecialchars($data1['forum_name'])).'</strong></p>';
echo'<form method="post"
action="adminok.php?cat=forum&action=edit&e=editf">
<label>Nom du forum : </label><input type="text" id="nom"
name="nom" value="'.stripslashes($data1['forum_name']).'" />
<br />
<label>Description :</label><textarea cols=40 rows=4 name="desc"
id="desc">'.$data1['forum_desc'].'</textarea><br /><br />';
//A partir d'ici, on boucle toutes les catégories,
//On affichera en premier celle du forum
$requete2 = mysql_query('SELECT cat_id, cat_nom
FROM forum_categorie ORDER BY cat_ordre DESC');
echo'<label>Déplacer le forum vers : </label>
<select name="depl">';
while($data2 = mysql_fetch_assoc($requete2))
{
if($data2['cat_id'] == $data1['forum_cat_id'])
{
echo'<option value="'.$data2['cat_id'].'"
selected="selected">'.stripslashes(htmlspecialchars($data2['cat_nom'])).'</option>';
}
else
{
echo'<option value="'.$data2['cat_id'].'">
'.$data2['cat_nom'].'</option>';
}
}
echo'</select><input type="hidden" name="forum_id"
value="'.$data1['forum_id'].'">';
echo'<p><input type="submit" value="Envoyer"></p></form>';
}
}
?>
|
C'est un peu comme ce que l'on a vu pour les droits des membres, c'est-à-dire qu'on affiche en premier la catégorie où se trouve le forum, ça permet une lecture plus facile, et puis ça évite de déplacer un forum sans faire exprès

.
Le champ caché envoie la valeur de l'id du forum qui a été choisi, il va permettre de décharger un peu l'url qui contient déjà un paquet de variables : on récupérera simplement cette valeur avec
$_GET['forum_id'].
3ème cas : Édition d'une catégorie
Ce cas-ci est quasiment similaire au précédent... mais en plus court. Pour le coup, il suffit de modifier le nom et puis c'est tout, une catégorie ne contenant pas de description, ni rien.
Donc on affiche la liste des catégories, on envoie et on modifie le nom, puis le tour est joué

.
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 | <?
elseif($_GET['e'] == "editc")
{
//On commence par afficher la liste des catégories
if(!isset($_POST['cat']))
{
$requete = mysql_query('SELECT cat_id, cat_nom
FROM forum_categorie ORDER BY cat_ordre DESC');
echo'<form method="post"
action="admin.php?cat=forum&action=edit&e=editc">';
echo'<p>Choisir une catégorie :</br />
<select name="cat">';
while($data = mysql_fetch_assoc($requete))
{
echo'<option value="'.$data['cat_id'].'">
'.$data['cat_nom'].'</option>';
}
echo'<input type="submit" value="Envoyer"></p></form>';
}
//Puis le formulaire
else
{
$requete = mysql_query('SELECT cat_nom FROM forum_categorie
WHERE cat_id = "'.$_POST['cat'].'"');
$data = mysql_fetch_assoc($requete);
echo'<form method="post"
action="./adminok.php?cat=forum&action=edit&e=editc">';
echo'<label> Indiquez le nom de la catégorie :</label>
<input type="text" id="nom" name="nom"
value="'.stripslashes(htmlspecialchars($data['cat_nom'])).'" />
<br /><br />
<input type="hidden" name="cat" value="'.$_POST['cat'].'" />
<input type="submit" value="Envoyer" /></p></form>';
}
}
?>
|
Bon bah, pas grand chose à redire là-dessus, on affiche le nom et encore une fois, un champ caché est envoyé à la page d'action afin que l'on connaisse la valeur de l'id de la catégorie à modifier.
4ème cas : Ordonner les forums
Ce que l'on va faire dans cette partie est assez simple à comprendre : on affiche, comme sur la page d'index, les forums rangés par catégories. Seulement, cette fois on inscrit ni le nombre de posts, ni celui de topics ou autres, mais simplement un champ texte avec la valeur du champ
forum_ordre à l'intérieur. L'administrateur pourra ainsi facilement les modifier, puis envoyer le tout à la page de traitement pour réordonner ses forums.
Voici 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
30
31
32
33
34
35
36 | <?
elseif($_GET['e'] == "ordref")
{
$categorie="";
$requete = mysql_query('SELECT forum_id, forum_name, forum_ordre,
forum_cat_id, cat_id, cat_nom
FROM forum_categorie
LEFT JOIN forum_forum ON cat_id = forum_cat_id
ORDER BY cat_ordre DESC');
echo'<form method="post"
action="adminok.php?cat=forum&action=edit&e=ordref">';
echo '<table>';
while($data = mysql_fetch_assoc($requete))
{
if( $categorie != $data['cat_id'] )
{
$categorie = $data['cat_id'];
echo'
<tr>
<th><strong>'.stripslashes(htmlspecialchars($data['cat_nom'])).'</strong></th>
<th><strong>Ordre</strong></th>
</tr>';
}
echo'<tr><td><a href="./voirforum.php?f='.$data['forum_id'].'">
'.$data['forum_name'].'</a></td>
<td><input type="text" value="'.$data['forum_ordre'].'"
name="'.$data['forum_id'].'" />
</td></tr>';
}
echo'</table>
<p><input type="submit" value="Envoyer" /></p></form>';
}
?>
|
Ça doit vous rappeler quelque chose, non ?

C'est en effet de cette manière que l'on avait affiché les forums sur la page d'index. Ce que l'on fait là, c'est un tableau, tout ce qu'il y a de plus simple : avec deux colonnes, une pour le nom, et une pour l'ordre. On fait ensuite passer à la page de traitement le nouvel ordre de chaque forum, qui se trouveront inscrits dans des variables du type
$_POST[9], où 9 est l'id du forum. Cela permettra de les coupler à leur forum.
5ème cas : Ordonner les catégories
Très simple et très court : il suffit d'afficher les catégories avec un champ texte qui contient leur numéro d'ordre. Il est inutile de les ranger dans un tableau, il faut juste les ordonner.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | <?
elseif($_GET['e'] == "ordrec")
{
$requete = mysql_query('SELECT cat_id, cat_nom, cat_ordre
FROM forum_categorie
ORDER BY cat_ordre DESC');
echo'<form method="post"
action="adminok.php?cat=forum&action=edit&e=ordrec">';
while($data = mysql_fetch_assoc($requete))
{
echo'<label>'.stripslashes(htmlspecialchars($data['cat_nom'])).' :</label>
<input type="text" value="'.$data['cat_ordre'].'"
name="'.$data['cat_id'].'" /><br /><br />';
}
echo '<input type="submit" value="Envoyer" /></form>';
}
break;
?>
|
Et du coup c'est terminé : ce code est quasiment le même que celui qui précède. Comme vous pouvez le voir, il n'y a pas grand-chose à modifier sur une catégorie, si ce n'est son nom... Je rappelle que pour l'ordre, on a vu plus haut comment faire.
Bien, passons à présent aux droits d'un forum, puis on en aura terminé avec cette page

.
Droits d'un forum
Allez, un dernier effort !
Ce que l'on veut faire ici, c'est afficher pour un forum donné les autorisations qui lui sont propres. Donc, on va encore séparer le code en deux : d'abord le formulaire, qui est en fait une liste déroulante grâce à laquelle on va choisir le forum. Ensuite, on va afficher dans un tableau une série de listes déroulantes, pour chaque type d'autorisation (lire, poster, modérer...), qui seront automatiquement placées sur la valeur actuelle.
Le problème est le suivant : je rappelle que les noms des groupes sont des entiers. Or, on veut afficher du texte pour que l'administrateur sache ce qu'il fait. On va donc utiliser un tableau qui associe encore une fois numéro d'autorisation et sa valeur concrète.
Toutefois, contrairement au script sur les droits des membres, on doit afficher plusieurs listes, c'est pourquoi on aura besoin de faire une boucle dans la première boucle, et par la même occasion, on va devoir utiliser un tableau qui associe les noms des champs (
auth_view,
auth_topic...) en quelque chose de plus parlant (lire, poster...).
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 | <?
case "droits":
//Gestion des droits
echo'<h1>Edition des droits</h1>';
if(!isset($_POST['forum']))
{
$requete = mysql_query('SELECT forum_id, forum_name
FROM forum_forum ORDER BY forum_ordre DESC');
echo'<form method="post"
action="admin.php?cat=forum&action=droits">';
echo'<p>Choisir un forum :</br />
<select name="forum">';
while($data = mysql_fetch_assoc($requete))
{
echo'<option value="'.$data['forum_id'].'">
'.stripslashes(htmlspecialchars($data['forum_name'])).'</option>';
}
echo'<input type="submit" value="Envoyer"></p></form>';
}
else
{
$requete = mysql_query('SELECT forum_id, forum_name, auth_view,
auth_post, auth_topic, auth_annonce, auth_modo
FROM forum_forum WHERE forum_id = '.$_POST['forum'].'');
echo'<form method="post"
action="adminok.php?cat=forum&action=droits"><p><table><tr>
<th>Lire</th>
<th>Répondre</th>
<th>Poster</th>
<th>Annonce</th>
<th>Modérer</th>
</tr>';
$data = mysql_fetch_assoc($requete);
//Ces deux tableaux vont permettre d'afficher les résultats
$rang = array("Visiteur", "Membre", "Modérateur","Administrateur");
$list_champ = array("auth_view", "auth_post", "auth_topic",
"auth_annonce", "auth_modo");
//On boucle
foreach($list_champ as $champ)
{
echo'<td><select name="'.$champ.'">';
for($i=0;$i<4;$i++)
{
if ($i == $data[$champ])
{
echo'<option value="'.$i.'"
selected="selected">'.$rang[$i].'</option>';
}
else
{
echo'<option value="'.$i.'">
'.$rang[$i].'</option>';
}
}
echo'</td></select>';
}
echo'<br /><input type="hidden" name="forum_id"
value="'.$data['forum_id'].'" />
<input type="submit" value="Envoyer"></p></form>';
}
echo '</table>';
break;
?>
|
Ce qu'il faut bien comprendre, c'est que le
foreach parcourt le premier tableau, il va donc commencer à
auth_view, puis il va afficher en priorité la valeur actuelle de
auth_view avant d'afficher les autres, grâce à la seconde boucle. Puis ainsi de suite...
Nous allons voir tout ce qui concerne la partie administration, et qui a un rapport avec les membres.
Édition d'un profil
Cette partie ressemble
énormément à la page de modification du profil : la seule différence est que cette fois ce n'est pas le membre, mais l'administrateur qui modifie les infos sur son compte. C'est pourquoi il faut dans un premier temps lui demander de qui il veut modifier le profil.
Voilà comment s'organise ce code :
- on regarde si la variable
$_POST['membre'] est renseignée
. si ce n'est pas le cas, c'est qu'on arrive à l'instant, on propose alors un formulaire qui demande d'entrer le pseudo d'un membre.
. Si c'est le cas, on affiche un formulaire avec les infos du membres (comme sur la page de profil).
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | <?
case "membres":
//Ici membres
$action = htmlspecialchars($_GET['action']); //On récupère la valeur de action
switch($action) //2ème switch
{
case "edit":
//Edition d'un membre
echo'<h1>Edition du profil d un membre</h1>';
if(!isset($_POST['membre'])) //Si la variable $_POST['membre'] n'existe pas
{
echo'De quel membre voulez-vous éditer le profil ?<br />';
echo'<br />
<form method="post"
action="./admin.php?cat=membres&action=edit">
<p><label for="membre">Inscrivez le pseudo : </label>
<input type="text" id="membre" name="membre">
<input type="submit" name="Chercher"></p></form>';
}
?>
|
Ici, on a affiché le formulaire, c'est la méthode que j'ai choisie ; mais vous pouvez très bien vous en passer, et demander l'id simplement.
Passons maintenant à la suite :
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 | <?
else //sinon
{
$pseudo_d = mysql_real_escape_string($_POST['membre']);
//Requête qui ramène des info sur le membre à
//Partir de son pseudo
$requete_select = mysql_query('SELECT membre_id,
membre_pseudo, membre_email,
membre_siteweb, membre_signature,
membre_msn, membre_localisation, membre_avatar
FROM forum_membres WHERE membre_pseudo="'.$pseudo_d.'"');
//Si la requête retourne un truc, le membre existe
if ($data_select = mysql_fetch_assoc($requete_select))
{
?>
<form method="post"
action="adminok.php?cat=membres&action=edit"
enctype="multipart/form-data">
<fieldset><legend>Identifiants</legend>
<label for="pseudo">Pseudo :</label>
<input type="text" name="pseudo" id="pseudo"
value="<?php echo stripslashes(htmlspecialchars($data_select['membre_pseudo'])); ?>" /><br />
</fieldset>
<fieldset><legend>Contacts</legend>
<label for="email">Adresse E_Mail :</label>
<input type = "text" name="email" id="email"
value="<?php echo stripslashes(htmlspecialchars($data_select['membre_email'])); ?>" /><br />
<label for="msn">Adresse MSN :</label>
<input type = "text" name="msn" id="msn"
value="<?php echo stripslashes(htmlspecialchars($data_select['membre_msn'])); ?>" /><br />
<label for="website">Site web :</label>
<input type = "text" name="website" id="website"
value="<?php echo stripslashes(htmlspecialchars($data_select['membre_siteweb'])); ?>"/><br />
</fieldset>
<fieldset><legend>Informations supplémentaire</legend>
<label for="localisation">Localisation :</label>
<input type = "text" name="localisation" id="localisation"
value="<?php echo stripslashes(htmlspecialchars($data_select['membre_localisation'])); ?>" />
<br />
</fieldset>
<fieldset><legend>Profil sur le forum</legend>
<label for="avatar">Changer l avatar :</label>
<input type="file" name="avatar" id="avatar" />
<br /><br />
<label><input type="checkbox" name="delete" value="Delete" />
Supprimer l avatar</label>
Avatar actuel :
<?php echo'
<img src="./images/avatars/'.$data_select['membre_avatar'].'"
alt="pas d avatar" />' ?>
<br /><br />
<label for="signature">Signature :</label>
<textarea cols=40 rows=4 name="signature" id="signature">
<?php echo $data_select['membre_signature'] ?></textarea>
<br /></h2>
<fieldset>
<?php
echo'<input type="hidden" value="'.stripslashes($pseudo).'" name="pseudo">
<input type="submit" value="Modifier le profil" /></form>';
}
else echo' <p>Erreur : Ce membre n existe pas, <br />
cliquez <a href="./admin.php?cat=membres&action=edit">ici</a>
pour réessayez</p>';
}
break;
?>
|
Vous avez sûrement remarqué qu'il s'agit, à quelques modifications près, de la page voirprofil.php dans sa partie modification. Ce qui est parfaitement normal, étant donné qu'on veut faire la même chose.
Pour reprendre le code, on sécurise d'abord la variable créée avec le pseudo passé par le formulaire, ça peut paraître étrange qu'un admin décide d'hacker son propre forum, mais bon, ça ne coûte rien. Grâce à celle-ci, on lance une requête, on prend les infos que l'on a dans la base de données sur le membre. Si elle ne retourne rien, c'est que le membre n'existe pas (par exemple, si le pseudo a été mal orthographié), sinon tout va bien, on affiche le formulaire.
Il est surprenant qu'un administrateur trouve une raison pour modifier le mot de passe d'un membre, c'est pourquoi j'ai retiré cette option du formulaire

.
Comme promis, la page de traitement viendra plus tard, passons alors aux droits des membres.
Droits des membres
Comme toute personne, les membres ont des droits, la différence est que dans votre forum, c'est vous qui décidez de quels droits ils disposeront.
Pour cela, on va organiser la page comme ceci : on demande d'entrer un nom dans un formulaire, et on retourne le niveau d'autorisation de celui-ci, ensuite on propose de changer ce niveau.
Pour ceux qui ont décidé d'utiliser la méthode qui associe groupes et forums, le mieux est d'afficher tous les forums, avec pour chacun les droits du membre, et de modifier le tout.
Pour le début, ça sera exactement pareil que précédemment : donc, il n'y a pas grand chose à expliquer.
Bref, voilà la page :
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 | <?
case "droits":
//Droits d'un membre (rang)
echo'<h1>Edition des droits d un membre</h1>';
if(!isset($_POST['membre']))
{
echo'De quel membre voulez-vous modifier les droits ?<br />';
echo'<br /><form method="post"
action="./admin.php?cat=membres&action=droits">
<p><label for="membre">Inscrivez le pseudo : </label>
<input type="text" id="membre" name="membre">
<input type="submit" value="Chercher"></p></form>';
}
else
{
$pseudo = mysql_real_escape_string($_POST['membre']);
$requete_membre = mysql_query('SELECT membre_pseudo,membre_rang
FROM forum_membres WHERE membre_pseudo = "'.$pseudo.'"');
if ($data = mysql_fetch_assoc($requete_membre))
{
echo'<form action="./adminok.php?cat=membres&action=droits"
method="post">';
?>
|
C'est ici qu'on est confrontés à un petit problème : comment présenter le formulaire. Le mieux est de faire une liste déroulante avec les différents grades. Oui, mais voilà, comment faire pour savoir quel est l'original ? Par exemple, si je tombe sur un modérateur, comment mettre en "
selected" modérateur ?
Le plus facile est de créer un tableau qui associe à chaque chiffre recueilli dans le champ
membre_rang le nom qu'il représente. Ensuite, grâce à une boucle, on pourra facilement faire ce que l'on veut.
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 | <?
$rang = array
(0 => "Bannis",
1 => "Visiteur",
2 => "Membre",
3 => "Modérateur",
4 => "Administrateur"); //Ce tableau associe numéro de droit et nom
echo'<label>'.$data['membre_pseudo'].'</label>';
echo'<select name="droits">';
for($i=0;$i<5;$i++)
{
if ($i == $data['membre_rang'])
{
echo'<option value="'.$i.'"
selected="selected">'.$rang[$i].'</option>';
}
else
{
echo'<option value="'.$i.'">
'.$rang[$i].'</option>';
}
}
echo'</select>
<input type="hidden" value="'.stripslashes($pseudo).'" name="pseudo">
<input type="submit" value="Envoyer"></form>';
}
else echo' <p>Erreur : Ce membre n existe pas, <br />
cliquez <a href="./admin.php?cat=membres&action=edit">ici</a>
pour réessayer</p>';
}
break;
?>
|
Un peu étrange ce code, je vous l'accorde : on va donc voir ça tout en douceur. Tout d'abord on crée le tableau, celui-ci associe, comme je l'ai dit plus haut, un numéro avec le nom qu'il représente. Ensuite, il faut faire la boucle qui affiche l'option de la liste déroulante, et c'est grâce à la variable
$i que l'on va pouvoir savoir quelle option mettre en "
selected".
Un truc peut vous paraitre mauvais, le tableau qu'il faudra modifier dès qu'on voudra ajouter un rang. C'est pourquoi je vous conseille d'utiliser la méthode expliquée
ici, le tableau est alors tout beau, et prêt à être utilisé grâce à la table
forum_groupes.
Bannissement
Pour ce qui est du bannissement, vous avez certainement remarqué qu'il est possible de bannir un membre en modifiant ses droits et en mettant 0. Toutefois, pour des raisons pratiques, il est possible en effet que vous n'ayez pas suivi mes idées à la lettre, et que vous gériez le bannissement autrement ; nous allons tout de suite voir une autre méthode. De plus, il sera beaucoup plus clair d'afficher la liste de tous les membres bannis pour que vous puissiez réhabiliter celui que vous voulez

.
Voilà ce que l'on va faire :
- en haut, un formulaire propose à l'admin d'entrer le pseudo du membre à bannir
- en bas, la liste de tous les membres bannis avec l'option
débannir.
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 | <?
case "ban":
//Bannissement
echo'<h1>Gestion du bannissement</h1>';
//Zone de texte pour bannir le membre
echo'Quel membre voulez-vous bannir ?<br />';
echo'<br />
<form method="post" action="./adminok.php?cat=membres&action=ban">
<label for="membre">Inscrivez le pseudo : </label>
<input type="text" id="membre" name="membre"><br />';
//Ici, on boucle : pour chaque membre banni, on affiche une checkbox
//Qui propose de le débannir
$requete_bannissement = mysql_query('SELECT membre_id, membre_pseudo
FROM forum_membres WHERE membre_rang = 0');
//Bien sur, on ne lance la suite que s'il y a des membres bannis !
if (mysql_num_rows($requete_bannissement) > 0)
{
while($data = mysql_fetch_assoc($requete_bannissement))
{
echo'<br />
<label><a href="./voirprofil.php?action=consulter&m='.$data['membre_id'].'">
'.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</a></label>
<input type="checkbox" name="'.$data['membre_id'].'" />
Débannir<br />';
}
echo'<p><input type="submit" value="Go !" /></p></form>';
}
else echo' <p>Aucun membre banni pour le moment :p</p>';
break;
?>
|
Le code n'est pas bien compliqué : on affiche finalement encore une fois un formulaire. Le gros avantage de cette méthode est que vous pouvez d'un coup bannir un membre, et en débannir autant que vous voulez.
Bon, on a fait le tour de l'administration des membres ; pour le coup, je ne vois pas ce qu'on pourrait ajouter... Mais de toute façon, si vous avez une idée, il ne vous reste qu'à l'ajouter

.
Bon, bah on y est arrivés

: on a maintenant un panneau d'administration qui prend forme, avec toutes les fonctions que l'on va voir maintenant mises en place.
Avant de repartir, j'aimerais faire une remarque.
La page n'est pas complète, vous avez certainement remarqué qu'il manque à la fois le début et la fin. C'est parce qu'ils n'ont que peu d'intérêt. N'oubliez toutefois pas de réserver l'accès
aux seuls administrateurs !
La suite ne sera qu'une adaptation de ce qu'on vient de voir... Il suffira de faire les bonnes requêtes, et le tour sera joué !

.
Allez : on y va !