IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Autorisation pour un modérateur / forum [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Par défaut Autorisation pour un modérateur / forum
    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.

  2. #2
    Membre très actif Avatar de Shuty
    Homme Profil pro
    Ingénieur en développement
    Inscrit en
    Octobre 2012
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur en développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 630
    Par défaut
    Sur stackoverflow, avec autant de code c'est un ban direct...
    Je ne dis pas que c'est la bonne solution mais quand je vois tout ce code, ça ne donne pas forcément envie de s'y attardé.


    ...ça ne fonctionne pas :/ il est impossible de supprimé le topic..
    De plus, si tu ne nous donnes pas un message d'erreur ou le problème ciblé. Ne soit pas étonné de ne pas trouvé de réponse.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 149
    Par défaut
    j'ai trouvé solution à mon problème ^^ il suffisait de rajouter des conditions d'accès avec la variable contenant la numérotation d'autorisation pour les membres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($_SESSION['membre_rang']==3)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. autorisation pour executer lot DTS
    Par pat59 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/11/2005, 11h35
  2. Autorisations pour "killer" certains processus
    Par DeusXL dans le forum MFC
    Réponses: 2
    Dernier message: 27/06/2005, 21h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo