Administration de l'espace membre

Attention, depuis PHP 5.5.0, certaines extensions SQL sans doute utilisées dans ce tutoriel peuvent être obsolètes et seront supprimées dans le futur, vous devez donc adapter les codes! Exemples ici.
Dans cette partie du tutoriel sur la création d'un espace membre, nous allons créer la page dédié à l'administration de celui-ci. Cette page va se nommer "auth-admin.php" et devra avoir les fonctions suivantes :
  • Modifications des profils.
  • Suppressions des profils.
  • Bannissement des comptes.
  • Suppressions des images.
Suivez l'ordre des codes donnés dans cette page sans rien ajouter en plus. Quand un code est à placer dans un endroit spécifique, celui-ci vous est indiqué.

La page "auth-admin.php" part du gabarit suivant :
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; UTF-8" />
    <meta http-equiv="Content-Language" content="fr" />
    <title>Administration</title>
    <link type="text/css" href="auth-style.css" rel="stylesheet"/>
    </head>
 
    <body>
 
    <div id="cadre">
 
    <?php include('auth-menu.php');?>
 
    <h1>Administration</h1>
 
    </div>
 
    <noscript><div class="erreur"><b>Votre navigateur ne prend pas en charge JavaScript!</b> Veuillez activer JavaScript afin de profiter pleinement du site.</div></noscript>
 
    </body>
    </html>
Comme d'habitude, nous commençons par ouvrir une session avant le DOCTYPE puis nous vérifions les sessions en cours avant de se connecter à la base de données :
<?php
//ouverture de session
session_start();
//on vérifie si les 2 sessions sont présentes
if(isset($_SESSION['pseudo']) && isset($_SESSION['pass'])){
    include("auth-data_bd.php");
    connexion_bd();
Ceci fait, nous allons chercher en BD tout ce qui correspond à l'utilisateur et qui ne peut être qu'un administrateur :
     //on va chercher tout ce qui correspond à l'utilisateur
    $affiche = mysql_query("SELECT * FROM LOGIN WHERE pseudo='".mysql_real_escape_string(stripcslashes($_SESSION['pseudo']))."' AND pass='".mysql_real_escape_string($_SESSION['pass'])."' AND valide='".mysql_real_escape_string(1)."' AND statut='".mysql_real_escape_string(1)."'");
    $result = mysql_fetch_assoc($affiche);
Si le "statut" est différent de "1", ce n'est pas un admin. alors on éjecte l'utilisateur :
    //si le statut ne retourne pas 1, ce n'est pas un admin..on éjecte l'utilisateur
    if(mysql_num_rows($affiche) == 0)
    {
        echo 'Il n\'y a rien à voir ici!<script type="text/javascript"> window.setTimeout("location=(\'index.php?dec=close\');",3000) </script>'; return false;
    }
 Puis on extrait tout :
    //http://php.net/manual/fr/function.extract.php
    extract($result);
    //on libère le résultat de la mémoire
    mysql_free_result($affiche);
    ?>
Sous le "H1" débute le code et nous commençons par la mise en place d'un formulaire :
<form name="form" method="POST">
Ensuite, nous sélectionnons tout les membres et nous affichons textuellement le nombre d'inscrit(s) :
    <?php
    //on sélectionne tout les membres
    $membre = mysql_query("SELECT id, pseudo FROM LOGIN WHERE statut='0' ORDER BY pseudo ASC");
 
    if(mysql_num_rows($membre)<=1){
    echo '<label>Nombre d\'inscription : </label>'.mysql_num_rows($membre).' membre<br/>';
    }
    if(mysql_num_rows($membre)>1){
    echo '<label>Nombre d\'inscriptions : </label>'.mysql_num_rows($membre).' membres<br/>';
    }   
    //si pas de résultat
    if(mysql_num_rows($membre) == 0)
    {
        echo '<div class="erreur">Aucunes données!</div>';
    }
Si la requête retourne quelque chose ( 1 ou plusieurs membres), on case le résultat dans une liste déroulante :
    //si résultat, on case les membres dans une liste
    else{   
    echo '     <label for="membre">Sélection du Membre : </label>     <select name="membre" onchange="javascript:submit(this)">     <option value="Sélectionner un membre">Sélectionner un membre</option>';
        while($liste = mysql_fetch_array($membre)){
 
            echo '<option value="'.$liste['id'].'" ';
            if(isset($_POST["membre"]) && $_POST["membre"]==$liste['id']){echo "selected='selected'";}
            echo '>'.$liste['pseudo'].'</option>';
        }
    echo '</select><br/>';   
    }
Si vous ne l'avez pas remarqué, on utilise la fonction "onchange="javascript:submit(this)"" sur le "select" de la liste déroulante qui va nous permettre lors de la sélection d'un membre de recharger automatiquement la page et donc d'effectuer une seconde requête pour sélectionner toutes les infos. du membre.
    //si il y a eu sélection dans la liste
    if(isset($_POST["membre"]) && $_POST["membre"]!='Sélectionner un membre'){
        //on sélectionne tout les membres
        $selection = mysql_query("SELECT * FROM LOGIN WHERE id='".mysql_real_escape_string($_POST["membre"])."'");
        while($resultat = mysql_fetch_array($selection)){
            //on stock tout dans des variables
            $id_membre = $resultat['id'];
            $pseudo_membre = $resultat['pseudo'];
            $pass_membre = $resultat['pass'];
            $email_membre = $resultat['email'];
            $valide_membre = $resultat['valide'];
            $statut_membre = $resultat['statut'];
            $date_membre = date("d/m/Y",strtotime($resultat['date']));
        }
        //on affiche le reste du formulaire avec les infos du membre sélectionné
        ?>
Les données du membre sélectionné étant à présent disponible, ont les affichent dans le reste du formulaire :
        <label for="pseudo">Pseudo : </label>
        <input type="text" name="pseudo" maxlength="20" value="<?php echo htmlspecialchars($pseudo_membre);?>" /><br/>
 
        <label for="pass">Mot de Passe :
        </label><input type="password" name="motdepass" maxlength="20" value="<?php echo htmlspecialchars($pass_membre);?>" /><br/>
 
        <label for="email">Email : </label>
        <input type="text" name="email" maxlength="50" value="<?php echo htmlspecialchars($email_membre);?>" /><br/>
 
        <label for="validation">Validation : </label> 
        <select name="validation">
        <option value="0" <?php if($valide_membre==0){ echo "selected='selected'"; }?>>Non validé</option>
        <option value="1" <?php if($valide_membre==1){ echo "selected='selected'"; }?>>Validé</option>
        <option value="2" <?php if($valide_membre==2){ echo "selected='selected'"; }?>>Banni</option>
        </select><br/>
 
        <label for="statut">Statut : </label> 
        <select name="statut">
        <option value="0" <?php if($statut_membre==0) echo "selected='selected'";?>>Membre</option>
        <option value="1" <?php if($statut_membre==1) echo "selected='selected'";?>>Admin</option>
        </select><br/>    
 
        <?php
        //si le membre a une image, on affiche un formulaire permettant de garder ou supprimer celle-ci
        if (file_exists('auth-photos/'.$id_membre.'.jpg')){
            echo '<label for="avatar">Supprimer l\'image :</label>             <select name="image" />             <option value="non">Non</option>             <option value="oui">Oui</option>             </select><br/>';
        }
        ?>
 
        <label for="pseudo">Inscrit le : </label>
        <?php echo $date_membre;?><br/>
 
        <label for="action">Action : </label>
        <input type="submit" name="Envoyer" value="Envoyer" />
        <input name="Effacer" value="Effacer" type="reset" />   
        </form>
        <br/>
Si le membre possède une image, on l'affiche :
        <?php
        //on affiche l'image du membre si il en possède une
        if (file_exists('auth-photos/'.$id_membre.'.jpg')){
            echo '<div style="margin-left: 350px;"><img align="middle" class="avatar" alt="avatar" src="auth-photos/'.$id_membre.'.jpg"/></div>';
        }
        ?>
On met en place un lien permettant de supprimer le membre :
        <h2>Supprimer le membre <?php echo $pseudo_membre;?></h2>
        <ul style="margin-left: 350px;">
        <li><a href="auth-admin.php?supmembre=<?php echo $id_membre;?>">Supprimer le membre <?php echo $pseudo_membre;?></a></li>         </ul>
Ceci fait, on ferme la boucle if(isset($_POST["membre"])... qui englobe tout l'affichage du formulaire :
        <?php
        //on ferme if(isset($_POST["membre"]) && $_POST["membre"]!='Sélectionner un membre'){
    }
On passe maintenant au traitement des données et on vérifie dans un premier temps si l'administrateur souhaite supprimer le membre sélectionné :
    //suppression du membre
    if(isset($_GET['supmembre'])){
    //on supprime le membre
    $supprime_membre = mysql_query("DELETE FROM LOGIN WHERE id = ".$_GET['supmembre']."");
    //si erreur
    if (!$supprime_membre) {
                die('Requête invalide : ' . mysql_error());
            }
            //si ok
            else{
            //si le membre a une image, on la supprime
        if (file_exists('auth-photos/'.$_GET['supmembre'].'.jpg')){
            unlink('auth-photos/'.$_GET['supmembre'].'.jpg');
        }
        //on informe et on redirige
        echo '<div class="ok">Membre supprimé avec succès. Redirection en cours...</div><script type="text/javascript"> window.setTimeout("location=(\'auth-admin.php\');",3000) </script>';
    }
}
Le code est je pense suffisamment commenté alors nous passons directement à la partie modification du profil du membre.

Si l'admin. a "envoyé" le formulaire (action de validation) , c'est qu'il y a eu modification du profil du membre. On vérifie donc si le pseudo ou l'email ont été modifiés et on compare avec ce qu'il y a en BD pour éviter les doublons :
    //modification du membre
    if(isset($_POST['Envoyer'])){
//on sélectionne tout les pseudo et email
            $donnees = mysql_query("SELECT pseudo, email FROM LOGIN") or die ('Erreur :'.mysql_error());
            while($result1 = mysql_fetch_array($donnees)){
                //si le pseudo posté est différent du pseudo actuel du membre, le pseudo a alors été modifié
                //et si le pseudo posté correspond à un pseudo déjà présent en bd, on informe
                if($_POST['pseudo']!=$pseudo_membre && $_POST['pseudo']==$result1['pseudo']){
                    echo '<div class="erreur">Ce pseudo « '.$_POST['pseudo'].' » est utilisé!</div>'; return false;
                }
                //idem pour l'email
                if($_POST['email']!=$email_membre && $_POST['email']==$result1['email']){
                    echo '<div class="erreur">Cet email « '.$_POST['email'].' » est utilisé!</div>'; return false;
                }               
}
Si c'est bon, on passe à la vérification de tout les autres champ :
            //si pseudo vide
        if(empty($_POST['pseudo'])){
            echo '<div class="erreur">Veuillez saisir un pseudo!</div>';
        }
        //si mot de passe vide
        else if(empty($_POST['motdepass'])){
            echo '<div class="erreur">Veuillez saisir un mot de passe!</div>';
        }
        //si l'email vide
        else if(empty($_POST['email'])){
            echo '<div class="erreur">Veuillez saisir un email!</div>';
        }
        //si l'email est invalide
        else if (!preg_match("$[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST['email'])){
            echo '<div class="erreur">Veuillez saisir un email valide!</div>';
        }
        //si la validité du compte est vide
        else if($_POST['validation']==''){
            echo '<div class="erreur">Veuillez saisir la validité du compte du membre!</div>';
        }   
        //si le statut du membre est vide
        else if($_POST['statut']==''){
            echo '<div class="erreur">Veuillez saisir le statut du membre!</div>';
        }
Si tout est une fois de plus correcte, on modifie les données du membre :
        //tout est ok, on modifie les données
        else{
            $modif = mysql_query("UPDATE LOGIN SET pseudo='".mysql_real_escape_string(stripcslashes($_POST['pseudo']))."', pass='".mysql_real_escape_string(stripcslashes($_POST['motdepass']))."', email='".mysql_real_escape_string(stripcslashes($_POST['email']))."', valide='".mysql_real_escape_string(stripcslashes($_POST['validation']))."', statut='".mysql_real_escape_string(stripcslashes($_POST['statut']))."' WHERE id='".mysql_real_escape_string($id_membre)."'");
Dans le cas d'une erreur d'enregistrement, on crie ^^ :
            //Si il y a une erreur
            if (!$modif) {
                die('Requête invalide : ' . mysql_error());
            }
Si il n'y a pas d'erreur et que l'admin. souhaite supprimer l'image du membre :
            else{
                //on supprime l'image si besoin
                if (file_exists('auth-photos/'.$id_membre.'.jpg') && $_POST['image']=="oui"){
                    unlink('auth-photos/'.$id_membre.'.jpg');
                }
Le traitement des données étant terminé, on informe l'admin., on le redirige vers cette même page et on ferme tout :
                //message de confirmation
                echo '<div class="ok">Profil du membre modifié avec succès. Redirection en cours...</div><script type="text/javascript"> window.setTimeout("location=(\'auth-admin.php\');",3000) </script>';
            }
        }
    }
    ?>
Pour terminer cette page, on ferme la connexion à la base de données ainsi que la session déclaré en début de page (code à placer sous la balise </html>) :
    <?php
    //fermeture de la BD
    close_bd();
    //on boucle la session du haut de page
  }
?>
 Voila, ce tutoriel sur "Comment créer un espace membre" est à présent terminé et libre à vous d'y ajouter des fonctions supplémentaire afin de l'adapter à vos besoins.

Administration de l'espace membre
Voir/déposer un commentaire (0) | Signaler un problème