WhiiTe'

Administateur
Ancien staff
Inscription
22 Octobre 2011
Messages
14 706
Réactions
8 492
Points
32 425
Salut :RG:,

Je lance une petite série sur l'espace administration en PHP, dans ce tutoriel je vais vous apprendre à faire un système de bannissement en PHP.
Pour suivre le tutoriel vous devrez soit avoir fait le système de grade, soit avoir déjà une base sur votre site avec des grades dessus.

7.png


Assez parlé, commençons :evilsmirk:
Nous allons commencer par créer un nouveau fichier, je l'ai nommé admin.php, nommez le comme vous voulez, et vous devrez également rajouter une colonne "ban" dans la table de vos membres, mettez la en int car nous jouerons avec les 0 et 1.

Dans cette page nous allons sécuriser la page des autres membres qui ne sont pas administrateur.

PHP:
    session_start();
   $bdd = new PDO('mysql:host=127.0.0.1;dbname=tutorg;charset=utf8', 'root', '');

    if(!isset($_SESSION['id']))
    {
        header('Location: connexion.php'); # Si le membre est pas connecté, on le redirige vers la connexion.php
    }
    elseif(isset($_SESSION['id']) && $_SESSION['grade'] != 'administrateur'){
        header('Location: index.php'); # Si le member est conencté, mais il est pas administrateur, on le redirige vers index.php
    }

Nous lions la base de donnée et mettons un session_start() pour que les variables de session soient prise en compte sur cette page, puis nous faisons la sécurisation de la page en vérifiant si la personne est connecté et / ou est administrateur sur le site.
On peut aussi passer par du htaccess, mais là c'est plus rapide et plus simple.


7.png



Maintenant nous allons afficher les membres, et mettre un petit bouton pour bannir / dé-bannir le membre.

Il suffit de faire un simple foreach, puis afficher les informations du membre, personnellement j'afficherais uniquement le pseudo, le grade et l'email du membre.
Si vous avez suivi mes tutoriels, votre table devrait s'appeler "membre", si non, adaptez mon code pour qu'il fonctionne sur votre site.


PHP:
            <?php
                $info = $bdd->query('SELECT * FROM membres');
                foreach($info as $info)
                {
                    ?>
                        <p><?= $info['id']; ?>. <b><?= $info['pseudo']; ?></b> - <?= $info['mail']; ?> - <?= $info['grade']; ?> <?php if($info['ban'] == '0') { ?> <button onclick="javascript:location.href='admin.php?ban=<?= $info['id']; ?>'">Bannir</button> <?php } elseif($info['ban'] == '1') { ?> <button onclick="javascript:location.href='admin.php?unban=<?= $info['id']; ?>'">Dé-bannir</button> <?php } ?> </p>
                    <?php
                }
            ?>

Tous les membres de votre site seront affichés sur votre page, on affiche donc les informations du membre, et on affiche le bouton pour bannir si le membre n'est pas banni (0 dans la base de donnée), et le bouton pour dé-bannir si le membre est banni (1 dans la base de donnée).


7.png



Maintenant nous allons éditer le statut du membre dans la base de donnée selon le bouton qui a été cliqué.
Niveau sécurité pour le moment c'est pas ça, mais ne vous en faîte pas on verra plus tard dans le tutoriel.

PHP:
    if(!empty($_GET['ban']) && $_GET['ban'] > 0)
    {
        $id = intval(trim($_GET['ban']));
        $banUsers = $bdd->prepare('UPDATE membres SET ban = ? WHERE id = ?');
        $banUsers->execute(array("1", $id));
        header('Location: admin.php');
    }

Ce code est uniquement pour le bannissement, nous vérifions si ban dans l'url n'est pas vide, et est supérieur à 0, si ban dans l'url est une chaîne de caractère, il sera automatiquement transformé en chiffre, et puis nous faisons la requête sql qui change l'état du membre dans la base de donnée, vous remarquerez que le bouton bannir est devenu dé-bannir.

Voici le code pour dé-bannir le membre.

PHP:
    if(!empty($_GET['unban']) && $_GET['unban'] > 0)
    {
        $id = intval(trim($_GET['unban']));
        $unbanUsers = $bdd->prepare('UPDATE membres SET ban = ? WHERE id = ?');
        $unbanUsers->execute(array("0", $id));
        header('Location: admin.php');
    }


7.png



Maintenant que l'administration est faîte, nous allons rediriger le membre vers une page d'erreur si il est banni, pour ceci je vais vous donner un bout de code que vous allez mettre dans un nouveau fichier que vous allez inclure sur toute vos page, c'est pas bien compliqué.

Créez un nouveau fichier et nommez le "config.php", dedans mettez le code suivant.

PHP:
        if(isset($_SESSION['id']))
        {
            $aInfo = $bdd->prepare("SELECT * FROM membres WHERE id = ?");
            $aInfo->execute(array($_SESSION['id']));
            $rowcPseudo = $aInfo->rowCount();
            if($rowcPseudo == 1)
            {
                $info = $aInfo->fetch();
                $_SESSION['id'] = $info['id'];
                $_SESSION['pseudo'] = $info['pseudo'];
                $_SESSION['mail'] = $info['mail'];
                $_SESSION['ban'] = $info['ban'];
                $_SESSION['avatar'] = $info['avatar'];
                $_SESSION['grade'] = $info['grade'];
            }
        }

Maintenant sur toute vos page vous allez rajouter une petite ligne pour inclure le code.

PHP:
require "config.php";

C'est le même principe qu'un système de connexion, mais là c'est sans que le membre ai rien à faire, si il change de pseudo, ou d'avatar, ou si vous le bannissez, il n'aura pas à se reconnecter pour que ses informations s'actualise, et donc il sera directement redirigé vers votre page d'erreur.

Maintenant sur toute vos page excepté sur config.php et vos pages ou il n'y a pas de session_start() nous allons mettre une petite conditions qui redirigera le membre, vous allez créer une page erreur.php et dedans mettre :

PHP:
    session_start();
    $bdd = new PDO('mysql:host=127.0.0.1;dbname=tutorg;charset=utf8', 'root', '');

    require "config.php";

if(!isset($_SESSION['id'])){
    header('Location: connexion.php'); # Si le membre est pas connecté, on le redirige vers connexion.php
} elseif(isset($_SESSION['id']) && $_SESSION['ban'] == "0") {
    header('Location: index.php') # Si le membre est pas banni, on le redirige vers index.php
}

Je vous laisse mettre ce que vous voulez en texte sur cette page.
Et voilà :RG: vous savez maintenant comment faire un système de bannissement.


7.png



Avant de terminer ce tutoriel je vais vous expliquer comment corriger la faille crsf, j'ai deux méthodes pour ça.

Première méthode : Vous rajoutez une checkbox à cocher obligatoirement à chaque fois que vous voulez bannir un membre, et dans les conditions pour éditer l'état du membre (0 ou 1) vous vérifiez si on a cette checkbox.

HTML:
<form method="POST"><input type="checkbox" name="secure"></form>
PHP:
    if(!empty($_GET['ban']) && $_GET['ban'] > 0 && isset($_POST['secure']))

    {
        $id = intval(trim($_GET['ban']));
        $banUsers = $bdd->prepare('UPDATE membres SET ban = ? WHERE id = ?');
        $banUsers->execute(array("1", $id));
        header('Location: admin.php');
    }

    if(!empty($_GET['unban']) && $_GET['unban'] > 0 && isset($_POST['secure']))
    {
        $id = intval(trim($_GET['unban']));
        $unbanUsers = $bdd->prepare('UPDATE membres SET ban = ? WHERE id = ?');
        $unbanUsers->execute(array("0", $id));
        header('Location: admin.php');
    }

Tout simplement.

Deuxième méthode : Vous rajoutez une petite condition qui vérifie si l'action vient de votre site dans les conditions pour modifier l'état du membre. (0 ou 1)
Si vous êtes en local, mettez localhost.

Cette conditions est :

PHP:
        if(strpos($_SERVER['HTTP_REFERER'], "votresite.com") == FALSE)
          {
              exit();
          }

Et sur les conditions de ce tutoriel, ça donne :

PHP:
    if(!empty($_GET['ban']) && $_GET['ban'] > 0)
    {
        if(strpos($_SERVER['HTTP_REFERER'], "votresite.com") == FALSE)
          {
              exit();
          }

        $id = intval(trim($_GET['ban']));
        $banUsers = $bdd->prepare('UPDATE membres SET ban = ? WHERE id = ?');
        $banUsers->execute(array("1", $id));
        header('Location: admin.php');
    }

    if(!empty($_GET['unban']) && $_GET['unban'] > 0)
    {
        if(strpos($_SERVER['HTTP_REFERER'], "votresite.com") == FALSE)
          {
              exit();
          }
        $id = intval(trim($_GET['unban']));
        $unbanUsers = $bdd->prepare('UPDATE membres SET ban = ? WHERE id = ?');
        $unbanUsers->execute(array("0", $id));
        header('Location: admin.php');
    }

Et voilà :RG: c'est la fin de ce tutoriel, si vous avez des questions ou des problèmes avec le tutoriel, n'hésitez pas à me le dire.
Prochain tutoriel : Modifier les informations des utilisateurs.

:tchuss:
 

Neerfix

Développeur Web
Premium
Inscription
15 Décembre 2013
Messages
224
Réactions
49
Points
9 528
Merci beaucoup pour ce tuto, très bien expliqué. Ça vas me servir !
 

Ruby.

Undefined
Inscription
25 Avril 2012
Messages
518
Réactions
118
Points
11 846
Beau tuto mais il y a largement plus simple.

page functions.php :
Code:
function ban(){
    require 'inc/db.php';
    $verifban = $pdo->query('SELECT * FROM users');
    $Siban = $verifban->fetch();
    $ban = $Siban->ban;
    if($ban == 1) {
      header('Location: banni.php');
    }
}

page index.php :
Code:
<?php
require 'inc/functions.php';
ban();
?>
;)
 
Haut