Bonjour à tous et à toutes,

Je suis confronté à un problème qui consiste à donner l'autorisation a un modérateur de supprimer un topic dans un forum.

1 = visiteur
2 = inscrit
3= modérateur
4= administrateur

je me suis bien assuré de donner l'accès modérateur avec le membre qui supprime un topic mais ça ne fonctionne pas :/ il est impossible de supprimé le topic...

Voici ( bout de code nécessaire ) de ma page post :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
case "delete": //Si on veut supprimer le post
    //On récupère la valeur de p
    $post = (int) $_GET['p'];
    //Ensuite on vérifie que le membre a le droit d'être ici
    echo'<div id="cadresupressmess"><h2 class="textesimple">'."Suppression".'</h2>';
    $query=$bdd->prepare('SELECT post_createur, auth_modo FROM forum_post
    LEFT JOIN forum_forum ON forum_post.post_forum_id = forum_forum.forum_id
    WHERE post_id= :post');
    $query->bindValue(':post',$post,PDO::PARAM_INT);
    $query->execute();
    $data = $query->fetch();
 
    if (!verif_auth($data['auth_modo']) && $data['post_createur'] != $id)
    {
        // Si cette condition n'est pas remplie ça va barder :o
        erreur(ERR_AUTH_DELETE); 
    }
    else //Sinon ça roule et on affiche la suite
    {
        echo'<p class="textesimple">'."Êtes vous certains de vouloir supprimer ce post ?".'</p>';
        echo'<p class="boutonlienforum"><a href="./postvalide.php?action=delete&amp;p='.$post.'">Oui</a> ou <a href="./forum.php">Non</a></p></div>';
    }
    $query->CloseCursor();
break;
et voici le bout de code nécessaire de ma page postconfirme :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
 
case "delete": //Si on veut supprimer le post
    //On récupère la valeur de p
    $post = (int) $_GET['p'];
    $query=$bdd->prepare('SELECT post_createur, post_texte, forum_id, topic_id, auth_modo FROM forum_post LEFT JOIN forum_forum ON forum_post.post_forum_id = forum_forum.forum_id WHERE post_id=:post');
    $query->bindValue(':post',$post,PDO::PARAM_INT);
    $query->execute();
    $data = $query->fetch();
    $topic = $data['topic_id'];
    $forum = $data['forum_id'];
    $poster = $data['post_createur'];
 
    //Ensuite on vérifie que le membre a le droit d'être ici 
    //(soit le créateur soit un modo/admin)
    if (!verif_auth($data['auth_modo']) && $poster != $id)
    {
        // Si cette condition n'est pas remplie ça va barder :o
        erreur(ERR_AUTH_DELETE); 
    }
    else //Sinon ça roule et on continue
    {
 
        //Ici on vérifie plusieurs choses :
        //est-ce un premier post ? Dernier post ou post classique ?
 
        $query = $bdd->prepare('SELECT topic_first_post, topic_last_post FROM forum_topic WHERE topic_id = :topic');
        $query->bindValue(':topic',$topic,PDO::PARAM_INT);
        $query->execute();
        $data_post=$query->fetch();
 
		//On distingue maintenant les cas
        if ($data_post['topic_first_post']==$post) //Si le message est le premier
        {
 
            //Les autorisations ont changé !
            //Normal, seul un modo peut décider de supprimer tout un topic
            if (!verif_auth($data['auth_modo']))
            {
                erreur(ERR_AUTH_DELETE_TOPIC);
 
            }
 
            //Il faut s'assurer que ce n'est pas une erreur
 
            echo'<p>Vous avez choisi de supprimer un post.
            Cependant ce post est le premier du topic. Voulez vous supprimer le topic ? <br />
            <a href="./postvalide.php?action=delete_topic&amp;t='.$topic.'">oui</a> - <a href="./affichertopic.php?t='.$topic.'">non</a>
            </p>';
            $query->CloseCursor();                     
        }
        elseif ($data_post['topic_last_post']==$post)  //Si le message est le dernier
        {
 
            //On supprime le post
            $query=$bdd->prepare('DELETE FROM forum_post WHERE post_id = :post');
            $query->bindValue(':post',$post,PDO::PARAM_INT);
            $query->execute();
            $query->CloseCursor();
 
            //On modifie la valeur de topic_last_post pour cela on
            //récupère l'id du plus récent message de ce topic
            $query=$bdd->prepare('SELECT post_id FROM forum_post WHERE topic_id = :topic 
            ORDER BY post_id DESC LIMIT 0,1');
            $query->bindValue(':topic',$topic,PDO::PARAM_INT);
            $query->execute();
            $data=$query->fetch();             
            $last_post_topic=$data['post_id'];
            $query->CloseCursor();
 
            //On fait de même pour forum_last_post_id
            $query=$bdd->prepare('SELECT post_id FROM forum_post WHERE post_forum_id = :forum
            ORDER BY post_id DESC LIMIT 0,1');
            $query->bindValue(':forum',$forum,PDO::PARAM_INT);
            $query->execute();
            $data=$query->fetch();             
            $last_post_forum=$data['post_id'];
            $query->CloseCursor();   
 
            //On met à jour la valeur de topic_last_post
 
            $query=$bdd->prepare('UPDATE forum_topic SET topic_last_post = :last WHERE topic_last_post = :post');
            $query->bindValue(':last',$last_post_topic,PDO::PARAM_INT);
            $query->bindValue(':post',$post,PDO::PARAM_INT);
            $query->execute();
            $query->CloseCursor();
 
            //On enlève 1 au nombre de messages du forum et on met à       
            //jour forum_last_post
            $query=$bdd->prepare('UPDATE forum_forum SET forum_post = forum_post - 1, forum_last_post_id = :last WHERE forum_id = :forum');
            $query->bindValue(':last',$last_post_forum,PDO::PARAM_INT);
            $query->bindValue(':forum',$forum,PDO::PARAM_INT);
            $query->execute();
            $query->CloseCursor(); 
 
            //On enlève 1 au nombre de messages du topic
            $query=$bdd->prepare('UPDATE forum_topic SET  topic_post = topic_post - 1 WHERE topic_id = :topic');
            $query->bindValue(':topic',$topic,PDO::PARAM_INT);
            $query->execute();
            $query->CloseCursor(); 
 
            //On enlève 1 au nombre de messages du membre
            $query=$bdd->prepare('UPDATE membres SET  membre_post = membre_post - 1 WHERE membre_id = :id');
            $query->bindValue(':id',$poster,PDO::PARAM_INT);
            $query->execute();
            $query->CloseCursor();  
 
            //Enfin le message
            echo'<p>Le message a bien été supprimé !<br />
            Cliquez <a href="./affichertopic.php?t='.$topic.'">ici</a> pour retourner au topic<br />
            Cliquez <a href="./forum.php">ici</a> pour revenir à l index du forum</p>';
 
        }
        else // Si c'est un post classique
        {
 
            //On supprime le post
            $query=$bdd->prepare('DELETE FROM forum_post WHERE post_id = :post');
            $query->bindValue(':post',$post,PDO::PARAM_INT);
            $query->execute();
            $query->CloseCursor();
 
            //On enlève 1 au nombre de messages du forum
            $query=$bdd->prepare('UPDATE forum_forum SET forum_post = forum_post - 1  WHERE forum_id = :forum');
            $query->bindValue(':forum',$forum,PDO::PARAM_INT);
            $query->execute();
            $query->CloseCursor(); 
 
            //On enlève 1 au nombre de messages du topic
            $query=$bdd->prepare('UPDATE forum_topic SET  topic_post = topic_post - 1
            WHERE topic_id = :topic');
            $query->bindValue(':topic',$topic,PDO::PARAM_INT);
            $query->execute();
            $query->CloseCursor(); 
 
            //On enlève 1 au nombre de messages du membre
            $query=$bdd->prepare('UPDATE membres SET membre_post = membre_post - 1 WHERE membre_id = :id');
            $query->bindValue(':id',$data['post_createur'],PDO::PARAM_INT);
            $query->execute();
            $query->CloseCursor();  
 
            //Enfin le message
            echo'<p>Le message a bien été supprimé !<br />
            Cliquez <a href="./affichertopic.php?t='.$topic.'">ici</a> pour retourner au topic<br />
            Cliquez <a href="./forum.php">ici</a> pour revenir à l index du forum</p>';
        }
 
    } //Fin du else
break;
 
case "delete_topic":
    $topic = (int) $_GET['t'];
    $query=$bdd->prepare('SELECT forum_topic.forum_id, auth_modo FROM forum_topic LEFT JOIN forum_forum ON forum_topic.forum_id = forum_forum.forum_id
    WHERE topic_id=:topic');
    $query->bindValue(':topic',$topic,PDO::PARAM_INT);
    $query->execute();
    $data = $query->fetch();
    $forum = $data['forum_id'];
 
    //Ensuite on vérifie que le membre a le droit d'être ici 
    //c'est-à-dire si c'est un modo / admin
 
    if (!verif_auth($data['auth_modo']))
    {
       erreur(ERR_AUTH_DELETE_TOPIC);
    }
    else //Sinon ça roule et on continue
    {
        $query->CloseCursor();
 
        //On compte le nombre de post du topic
        $query=$bdd->prepare('SELECT topic_post FROM forum_topic WHERE topic_id = :topic');
        $query->bindValue(':topic',$topic,PDO::PARAM_INT);
        $query->execute();
        $data = $query->fetch();
        $nombrepost = $data['topic_post'] + 1;
        $query->CloseCursor();
 
        //On supprime le topic
        $query=$bdd->prepare('DELETE FROM forum_topic WHERE topic_id = :topic');
        $query->bindValue(':topic',$topic,PDO::PARAM_INT);
        $query->execute();
        $query->CloseCursor();
 
        //On enlève le nombre de post posté par chaque membre dans le topic
        $query=$bdd->prepare('SELECT post_createur, COUNT(*) AS nombre_mess FROM forum_post WHERE topic_id = :topic GROUP BY post_createur');
        $query->bindValue(':topic',$topic,PDO::PARAM_INT);
        $query->execute();
 
        while($data = $query->fetch())
        {
            $query=$bdd->prepare('UPDATE membres SET membre_post = membre_post - :mess WHERE membre_id = :id');
            $query->bindValue(':mess',$data['nombre_mess'],PDO::PARAM_INT);
            $query->bindValue(':id',$data['post_createur'],PDO::PARAM_INT);
            $query->execute();
        }
 
        $query->CloseCursor();       
        //Et on supprime les posts !
        $query=$bdd->prepare('DELETE FROM forum_post WHERE topic_id = :topic');
        $query->bindValue(':topic',$topic,PDO::PARAM_INT);
        $query->execute();
        $query->CloseCursor(); 
 
        //Dernière chose, on récupère le dernier post du forum
        $query=$bdd->prepare('SELECT post_id FROM forum_post WHERE post_forum_id = :forum ORDER BY post_id DESC LIMIT 0,1');
        $query->bindValue(':forum',$forum,PDO::PARAM_INT);
        $query->execute();
        $data = $query->fetch();
 
        //Ensuite on modifie certaines valeurs :
        $query=$bdd->prepare('UPDATE forum_forum SET forum_topic = forum_topic - 1, forum_post = forum_post - :nbr, forum_last_post_id = :id
        WHERE forum_id = :forum');
        $query->bindValue(':nbr',$nombrepost,PDO::PARAM_INT);
        $query->bindValue(':id',$data['post_id'],PDO::PARAM_INT);
        $query->bindValue(':forum',$forum,PDO::PARAM_INT);
        $query->execute(); 
        $query->CloseCursor();
 
        //Enfin le message
        echo'<p>Le topic a bien été supprimé !<br />
        Cliquez <a href="./forum.php">ici</a> pour revenir à l index du forum</p>';
 
    } //Fin du else
break;
Merci pour votre attention et votre aide.