Aller au menu - Aller au contenu

Icône Administration Partie II

Avatar
Mise à jour : 30/11/2010
Difficulté : Facile Facile Creative Commons BY
4 145 visites depuis 7 jours, dont 40 sur ce chapitre classé 41/786
Nous voici donc à la suite du long chapitre sur la page d'administration. Ici, nous allons voir la page adminok.php, qui est en fait la page de traitement des données envoyées depuis la page admin.php que l'on vient de créer... Une fois n'est pas coutume, la page de traitement est beaucoup plus courte que celle de formulaire... Autrement dit, c'est presque terminé :D .

Mais bon comme j'ai dit presque... on continue. :p
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Configuration

Vous allez voir que dans cette page, on reprend le même plan que dans la précédente. Donc, on va à nouveau avoir besoin du double switch qui se présentera dans le même ordre, avec les mêmes noms de variables. D'ailleurs, si vous avez regardé les cibles des formulaires de la page admin.php, vous savez déjà tout ça.

Comme sur le chapitre précédent, je ne vais pas vous mettre le début de la page ; mais n'oubliez surtout pas de restreindre son accès aux administrateurs. Je répète que ce n'est pas parce qu'aucun lien ne va sur la page qu'il faut négliger sa sécurité !


On va commencer tout de suite avec la configuration du forum : le code n'a rien de compliqué et n'est pas long, mais vous allez voir que c'est la mode ici, et on ne va pas s'en plaindre :D !

Donc : qu'est-ce qu'on va faire exactement ?
On reçoit de la page admin.php des données sous forme de variables $_POST. Pour chaque case du formulaire, on a une variable qui s'obtient de la façon suivante : $_POST[$nom_de_la_case]. On va donc les récupérer, et mettre à jour la base de données avec les nouvelles valeurs !

Mais si vous avez bien en tête la structure de la table forum_config, vous comprenez qu'on est obligés de faire une requête dans une boucle pour tout mettre à jour... Aussi, pour diminuer un peu ce nombre, on va d'abord faire une vérification sur la valeur de ce qui est posté. Si elle est identique à celle qui se trouve dans la table, alors c'est que rien n'a changé, et il est inutile de faire une requête pour ça. C'est bon, vous me suivez ? :p

De toute façon, vous comprendrez sûrement mieux avec 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
<?
$cat = htmlspecialchars($_GET['cat']); //on récupère dans l'url la variable cat
switch($cat) //1er switch
{
case "config":
    echo'<h1>Configuration du forum</h1>';
    //On récupère les valeurs et le nom de chaque entrée de la table
    $query=$db->query('SELECT config_nom, config_valeur FROM forum_config');
    //Avec cette boucle, on va pouvoir contrôler le résultat pour voir s'il a changé
    while($data = $query->fetch())
    {
        if ($data['config_valeur'] != $_POST[$data['config_nom']])
	{
            //On met ensuite à jour
            $valeur = htmlspecialchars($_POST[$data['config_nom']]);
	    $query=$db->prepare('UPDATE forum_config SET config_valeur = :valeur
            WHERE config_nom = :nom');
            $query->bindValue(':valeur', $valeur, PDO::PARAM_STR);
            $query->bindValue(':nom', $data['config_nom'],PDO::PARAM_STR);
            $query->execute();
	}
    }
    $query->CloseCursor();
    //Et le message !
    echo'<br /><br />Les nouvelles configurations ont été mises à jour !<br />  
    Cliquez <a href="./admin.php">ici</a> pour revenir à l administration';
break;
?>


Voilà le code, j'espère que c'est clair à présent parce que c'est grosso modo comme cela que l'on va procéder à chaque fois.

Continuons, maintenant ! :)

Gestion des forums

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 :p .

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 :p .

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
1
<? $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
1
2
3
<?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é :) .

Gestion des membres

Allez : un dernier effort, et on est arrivés :p .On va s'occuper ici du traitement des informations envoyées par la page admin.php et concernant les membres.

Édition du profil



Bon : ça commence vraiment tranquillement pour nous, l'édition du profil d'un membre est une pure copie de la page voirprofil.php (vous vous souvenez, la page sur la modification du profil par un membre). Il y a deux différences majeures.
La première est que vous devez permettre aux administrateurs, et seulement aux administrateurs d'accéder à cette page.
La seconde est que cette fois, la modification du pseudo doit être prise en compte.

Je vous laisse faire cette partie du code seuls ; vous ne devriez pas rencontrer trop de difficultés... D'ailleurs, dans ma grande bonté, je vais vous écrire la partie qui concerne le pseudo :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<?php
//Le pseudo doit être unique !
//Il faut donc vérifier s'il a été modifié, si c'est le cas, on vérifie bien 
//l'unicité
$query=$db->prepare('SELECT COUNT(*) AS nbr FROM forum_membres WHERE membre_pseudo =:pseudo');
$query->execute(array('pseudo'=>$pseudo));
$pseudo_free=($query->fetchColumn()==0)?1:0;

    if(!$pseudo_free)
    {
        $pseudo_erreur1 = "Votre pseudo est déjà utilisé par un membre";
        $i++;
    }
$query->CloseCursor();
?>


Pensez aussi à vérifier la longueur du pseudo par rapport aux variables fixées dans la table forum_config... Ça fera une première utilisation pour ce système.

N'oubliez pas de mettre le case "membres": avant votre script.


Les droits du membre



Cette partie va sûrement vous réjouir, car le script est très court, mais alors vraiment très court. En fait, il suffit de récupérer la valeur du pseudo, passée par un champ caché, et la valeur du rang qui est, elle, passée par la liste déroulante.
Ensuite, on met à jour la base de données, et au final ça donne cela :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?php
    case "droits":
	$membre =$_POST['pseudo'];
	$rang = (int) $_POST['droits'];
	$query=$db->prepare('UPDATE forum_membres SET membre_rang = :rang
	WHERE LOWER(membre_pseudo) = :pseudo');
        $query->bindValue(':rang',$rang,PDO::PARAM_INT);
        $query->bindValue(':pseudo',strtolower($membre), PDO::PARAM_STR);
        $query->execute();
        $query->CloseCursor();
	echo'<p>Le niveau du membre a été modifié !<br />
	Cliquez <a href="./admin.php">ici</a> pour revenir à l administration</p>';
    break;
?>


Vous pouvez donc maintenant vous amuser à promouvoir de nouveaux administrateurs, des modérateurs ou encore à bannir des membres... Remarquez qu'on va voir tout de suite une méthode plus efficace.

Le bannissement



On arrive au bannissement : dernière étape, mais aussi la plus délicate (encore que ça reste acceptable) de la partie membre.
Je rappelle qu'ici on peut à la fois bannir et débannir des utilisateurs. Il faut donc prendre en compte ces deux aspects.

Donc, on s'occupe dans un premier temps de récupérer le pseudo du membre prêt à être banni, on vérifie qu'il existe et on met à jour son rang à 0.
Ensuite, on récupère les id des membres prêts à être débannis, et on met leur rang à 2. Ils deviendront alors de simples membres ; pour changer à nouveau leur rang, vous savez comment faire, maintenant ^^ .

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
<?php
    case "ban":
        //Bannissement dans un premier temps
        //Si jamais on n'a pas laissé vide le champ pour le pseudo
        if (isset($_POST['membre']) AND !empty($_POST['membre']))
        {
            $membre = $_POST['membre'];
            $query=$db->prepare('SELECT membre_id 
            FROM forum_membres WHERE LOWER(membre_pseudo) = :pseudo');    
            $query->bindValue(':pseudo',strtolower($membre), PDO::PARAM_STR);
            $query->execute();
            //Si le membre existe
            if ($data = $query->fetch())
            {
                //On le bannit
                $query=$db->prepare('UPDATE forum_membres SET membre_rang = 0 
                WHERE membre_id = :id');
                $query->bindValue(':id',$data['membre_id'], PDO::PARAM_INT);
                $query->execute();
                $query->CloseCursor();
                echo'<br /><br />
                Le membre '.stripslashes(htmlspecialchars($membre)).' a bien été banni !<br />';
            }
            else 
            {
                echo'<p>Désolé, le membre '.stripslashes(htmlspecialchars($membre)).' n existe pas !
                <br />
                Cliquez <a href="./admin.php?cat=membres&action=ban">ici</a> 
                pour réessayer</p>';
            }
        }
        //Debannissement ici        
        $query = $db->query('SELECT membre_id FROM forum_membres 
        WHERE membre_rang = 0');
        //Si on veut débannir au moins un membre
        if ($query->rowCount() > 0)
        {
	    $i=0;
            while($data= $query->fetch())
            {
                if(isset($_POST[$data'membre_id']]))
                {
	            $i++;
                    //On remet son rang à 2
                    $query=$db->prepare('UPDATE forum_membres SET membre_rang = 2 
                    WHERE membre_id = :id');
                    $query->bindValue(':id',$data['membre_id'],PDO::PARAM_INT);
                    $query->execute();
                    $query->CloseCursor();
                }
            }
	    if ($i!=0)
            echo'<p>Les membres ont été débannis<br />
            Cliquez <a href="./admin.php">ici</a> pour retourner à l administration</p>';
        }
    break;
    }
break;
}
?>


Code un peu plus long, certes, mais pas bien compliqué : en fait, il faut simplement faire gaffe à ne pas mélanger les deux cas. Le script a été bien commenté, et je ne pense pas qu'il pose de problèmes de compréhension. Si jamais c'est le cas, regardez à nouveau la page admin.php, et ne continuez que lorsque c'est assimilé.

Bon bah, comme on dit, ça, c'est fait :D . La partie administration est mise en place... Ça fait certes des pages assez longues et plutôt indigestes, c'est pourquoi je vous conseille de séparer chaque cas en le mettant dans une page à part, que vous inclurez grâce à la fonction include.

Après, c'est à vous de voir. :p
Avant de vous laisser vous éclater avec le panneau d'admin, j'aimerais vous lancer sur quelques pistes pour améliorer un peu ces pages, et les compléter avec plus d'options.

  • Permettre de supprimer un forum.
  • Déplacer tout le contenu d'un forum vers un autre :
    cette option est pratique, et en même temps assez simple : il vous suffit en effet de modifier la valeur de post_forum, topic_forum, forum_post, forum_topic. Le tout peut être fait en 3 ou 4 requêtes.


Allez ! Sur ces belles paroles, je vous laisse à votre forum, et je vous donne rendez-vous dans la partie suivante du tuto pour voir ensemble des options sympas à ajouter au forum (système de lu / non-lu, par exemple :p ).
Chapitre précédent Sommaire Chapitre suivant

Partager

35 commentaires pour "Administration Partie II"
Note moyenne : 3.61 / 4 (348 votes)
Pseudo Commentaire
Hors ligne Chtouns # Posté le 02/06/2011 à 21:38:53
Il y a 3 grands mensonges en i
Avatar

Salut.
Trés bon tuto :-°
Mais je bloque sur la partie d'édit des membres. :(
Si quelqu'un pourrais m'envoyer un code qui fonctionne ça serais trop cool !
Merci d'avance !
Hors ligne Chtouns # Posté le 02/06/2011 à 21:39:20
Il y a 3 grands mensonges en i
Avatar

Citation : Chtouns
Salut.
Trés bon tuto :-°
Mais je bloque sur la partie d'édit des membres. :(
Si quelqu'un pourrais m'envoyer un code qui fonctionne ça serais trop cool !
Merci d'avance !
Edit: Problème résolu
Hors ligne larnak # Posté le 11/07/2011 à 19:03:34
Avatar

Avis : Très bon

Ville : Drancy
Pays : France métropolitaine
Études : IUT Orsay

ligne 42 du bannissement j'ai relevé une erreur de syntaxe :

if(isset($_POST[$data['membre_id']]))

Il manquait un [ après le data.



edit: je viens de voir page 1 que quelqu'un avait déjà signalé, dsl ^^.

Image utilisateur
 
Hors ligne marabou # Posté le 25/09/2011 à 01:06:59

voilà pou ce qui n'ont pas suivie le tuto oiçi son liens:
Gestion des membres

Mon problème ce situe dans la rédaction du:
case "membre": >>> case "edit" de la page amdinok.php

le tuto propose de reprendre la partit du code de la page voirprofil.php mais je ne parvient pas à faire la bonne modif...
o_O
Si qlq peut m'envoyer ou repondre avec cette toute petite partit du code je vous remerci d'avance...
ce tuto est genial je touche au bout mais là...? :-°

voiçi ce que j'ai comme code pour l'instant:
Page adminok.php

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
 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
case "membres":
$action = htmlspecialchars($_GET['action']); //On récupère la valeur de action
switch($action)
{


case "edit":
    if (empty($_POST['sent'])) // Si on la variable est vide, on peut considérer qu'on est sur la page de formulaire
    {   
     //On déclare les variables 

    $mdp_erreur = NULL;
    $email_erreur1 = NULL;
    $email_erreur2 = NULL;
    $msn_erreur = NULL;
    $signature_erreur = NULL;
    $avatar_erreur = NULL;
    $avatar_erreur1 = NULL;
    $avatar_erreur2 = NULL;
    $avatar_erreur3 = NULL;

    //Encore et toujours notre belle variable $i :p
    $i = 0;
    $temps = time(); 
    $signature = $_POST['signature'];
    $email = $_POST['email'];
    $msn = $_POST['msn'];
    $website = $_POST['website'];
    $localisation = $_POST['localisation'];
    $pass = md5($_POST['password']);
    $confirm = md5($_POST['confirm']);
	$nom = $_POST['nom'];
	$prenom = $_POST['prenom'];

    //Vérification de l'adresse email
    //Il faut que l'adresse email n'ait jamais été utilisée (sauf si elle n'a pas été modifiée)

    //On commence donc par récupérer le mail
    $query=$db->prepare('SELECT membre_email FROM forum_membres WHERE membre_id =:id'); 
    $query->bindValue(':id',$id,PDO::PARAM_INT);
    $query->execute();
    $data=$query->fetch();
    if (strtolower($data['membre_email']) != strtolower($email))
    {
        //Il faut que l'adresse email n'ait jamais été utilisée
        $query=$db->prepare('SELECT COUNT(*) AS nbr FROM forum_membres WHERE membre_email =:mail');
        $query->bindValue(':mail',$email,PDO::PARAM_STR);
        $query->execute();
        $mail_free=($query->fetchColumn()==0)?1:0;
        $query->CloseCursor();
        if(!$mail_free)
        {
            $email_erreur1 = "Votre adresse email est déjà utilisé par un membre";
            $i++;
        }

        //On vérifie la forme maintenant
        if (!preg_match("#^[a-z0-9A-Z._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email) || empty($email))
        {
            $email_erreur2 = "Votre nouvelle adresse E-Mail n'a pas un format valide";
            $i++;
        }
    }
    //Vérification de l’adresse MSN
    //if (!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $msn) && !empty($msn))
    //{
    //    $msn_erreur = "Votre nouvelle adresse MSN n'a pas un format valide";
    //    $i++;
    //}

    //Vérification de la signature
    if (strlen($signature) > 200)
    {
        $signature_erreur = "Votre nouvelle signature est trop longue";
        $i++;
    }
 
 	//Le pseudo doit être unique !
//Il faut donc vérifier s'il a été modifié, si c'est le cas, on vérifie bien 
//l'unicité
		$query=$db->prepare('SELECT COUNT(*) AS nbr FROM forum_membres WHERE membre_pseudo =:pseudo');
		$query->execute(array('pseudo'=>$pseudo));
		$pseudo_free=($query->fetchColumn()==0)?1:0;

		if(!$pseudo_free)
    	{
        $pseudo_erreur1 = "Votre pseudo est déjà utilisé par un membre";
        $i++;
    	}
		if (strlen($pseudo) < $config['pseudo_minsize'] || strlen($pseudo) > $config['pseudo_maxsize'])
    	{
        $pseudo_erreur2 = "Votre pseudo est soit trop grand, soit trop petit";
        $i++;
    	}
		$query->CloseCursor();
		
    	//Vérification de l'avatar
 
    if (!empty($_FILES['avatar']['size']))
    {
        //On définit les variables :
        $maxsize = $config['avatar_maxsize']; //Poid de l'image
        $maxwidth = $config['avatar_maxh']; //Largeur de l'image
        $maxheight = $config['avatar_maxl']; //Longueur de l'image
        //Liste des extensions valides
        $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png', 'bmp' );
 
        if ($_FILES['avatar']['error'] > 0)
        {
        $avatar_erreur = "Erreur lors du tranfsert de l'avatar : ";
        }
        if ($_FILES['avatar']['size'] > $maxsize)
        {
        $i++;
        $avatar_erreur1 = "Le fichier est trop gros :
        (<strong>".$_FILES['avatar']['size']." Octets</strong>
        contre <strong>".$maxsize." Octets</strong>)";
        }
 
        $image_sizes = getimagesize($_FILES['avatar']['tmp_name']);
        if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight)
        {
        $i++;
        $avatar_erreur2 = "Image trop large ou trop longue :
        (<strong>".$image_sizes[0]."x".$image_sizes[1]."</strong> contre
        <strong>".$maxwidth."x".$maxheight."</strong>)";
        }
 
        $extension_upload = strtolower(substr(  strrchr($_FILES['avatar']['name'], '.')  ,1));
        if (!in_array($extension_upload,$extensions_valides) )
        {
                $i++;
                $avatar_erreur3 = "Extension de l'avatar incorrecte";
        }
    }

 
    if ($i == 0) // Si $i est vide, il n'y a pas d'erreur
    {
        if (!empty($_FILES['avatar']['size']))
        {
                $nomavatar=move_avatar($_FILES['avatar']);
                $query=$db->prepare('UPDATE forum_membres
                SET membre_avatar = :avatar 
                WHERE membre_id = :id');
                $query->bindValue(':avatar',$nomavatar,PDO::PARAM_STR);
                $query->bindValue(':id',$id,PDO::PARAM_INT);
                $query->execute();
                $query->CloseCursor();
        }
 
        //Une nouveauté ici : on peut choisis de supprimer l'avatar
        if (isset($_POST['delete']))
        {
                $query=$db->prepare('UPDATE forum_membres
		SET membre_avatar=0 WHERE membre_id = :id');
                $query->bindValue(':id',$id,PDO::PARAM_INT);
                $query->execute();
                $query->CloseCursor();
        }
 
        echo'<h1>Modification terminée</h1><br />
		';
        echo'<p>Le profil a été modifié avec succès !</p>';
        echo'<p>Cliquez <a href="./index.php5" class="fMenu">ici</a> 
        pour revenir à la page d\'accueil</p>';
 
        //On modifie la table
 
        $query=$db->prepare('UPDATE forum_membres
        SET  membre_mdp = :mdp, membre_email=:mail, membre_msn=:msn, membre_siteweb=:website,
        membre_signature=:sign, membre_localisation=:loc, membre_nom=:nom, membre_prenom=:prenom
        WHERE membre_id=:id');
        $query->bindValue(':mdp',$pass,PDO::PARAM_INT);
        $query->bindValue(':mail',$email,PDO::PARAM_STR);
        $query->bindValue(':msn',$msn,PDO::PARAM_STR);
        $query->bindValue(':website',$website,PDO::PARAM_STR);
        $query->bindValue(':sign',$signature,PDO::PARAM_STR);
        $query->bindValue(':loc',$localisation,PDO::PARAM_STR);
        $query->bindValue(':id',$id,PDO::PARAM_INT);
		$query->bindValue(':nom',$nom,PDO::PARAM_STR);
		$query->bindValue(':prenom',$prenom,PDO::PARAM_STR);
        $query->execute();
        $query->CloseCursor();
    }
    else
    {
        echo'<h1>Modification interrompue:</h1><br />
		';
		
        echo'<p>Une ou plusieurs erreurs se sont produites pendant la modification du profil</p>';
        echo'<p>'.$i.' erreur(s)</p>';
        echo'<p>'.$mdp_erreur.'</p>';
        echo'<p>'.$email_erreur1.'</p>';
        echo'<p>'.$email_erreur2.'</p>';
        echo'<p>'.$msn_erreur.'</p>';
        echo'<p>'.$signature_erreur.'</p>';
        echo'<p>'.$avatar_erreur.'</p>';
        echo'<p>'.$avatar_erreur1.'</p>';
        echo'<p>'.$avatar_erreur2.'</p>';
        echo'<p>'.$avatar_erreur3.'</p>';
        echo'<p> Cliquez <a href="./admin.php5?cat=membres&amp;action=edit" class="fMenu">ici</a> pour recommencer</p>';
    }
} //Fin du else
    break;
 
default; //Si jamais c'est aucun de ceux là c'est qu'il y a eu un problème :o
echo'<p>Cette action est impossible</p>';
Hors ligne MisterXxX # Posté le 08/02/2012 à 02:48:01

Hello, très bon tuto.

Je note 15/20, à plusieurs endroit les explications sont trop pauvres et mal détaillées (exemple: éditer les membres via l'admin, perso j'ai laissé tombé car je n'ai pas su quoi faire).

En passant, si une âme charitable pourrait m'aider ça serai sympa

Voir tous les commentaires