Veuillez vous connecter ou créer un compte pour suivre ce topic
Ce topic est suivi par: DarkShoka, quiqou55
Auteur Sujet: Supprimer un compte PHP

DarkShoka

Messages: 21

Bonjour ou bonsoir,

J'ai un espace membre sur mon site et j'aimerai que quand la personne clique sur "Supprimer mon compte" cela l'amene vers une autre page ou il devra cocher une case de confirmation et valider pour que son compte soit supprimer de la bdd.

Merci de votre aide Sourire
Publicité

tancraft65

Messages: 29

tu peut Supprimer ton compte par phpmyadmin

DarkShoka

Messages: 21

Je sais mais je veux que ce soit un utilisateur qui puisse le supprimer

tancraft65

Messages: 29

ok

quiqou55

Messages: 23

Il suffit de créer un lien vers une page php comme par exemple supprimer_compte.php?id=userid et ensuite dans ton fichier tu peut utiliser la requete sql DELETE : 
<?php
   $id = $_GET['id'];
   $bdd = new PDO("mysql:dbname=******;host=******;charset=utf8")
   $bdd->prepare("DELETE FROM membres WHERE id = ?")->execute( array($id) );
   
   $redirect_url = "/";
   header("Location: {$redirect_url}");
   exit;

TheFlameflo

Messages: 305

Ce que quiqou55 a proposé, c'est vraiment pas mal, mais si tu veux qu'il puisse le faire seul, il faudra l'adapter comme ça :
$bdd = new PDO("mysql:dbname=******;host=******;charset=
   $bdd->prepare("DELETE FROM membres WHERE id = ?")->execute( array($_SESSION['id']) );   

Il ne te reste qu'à l'adapter selon tes besoins.

PrimFX
Membre Premium

Messages: 114

Très bonnes réponses de @quiqou55 et @TheFlameflo Sourire
J'ajouterai qu'il serait bien de proposer également une étape de confirmation de suppression du compte, histoire de ne pas supprimer de compte par erreur x) et que si tu as par exemple un système de commentaires sur ton site, il faudra penser à gérer les comptes supprimés (affichage d'un message style "Compte supprimé" à la place du pseudo, avatar par défaut, etc.) Clin d'oeil

Marius

Messages: 138

Bonjour, je ne comprend pas ce qui a été fait et je voudrais faire la meme chose ..

TheFlameflo

Messages: 305

En gros Marius, c'est pour que l'utilisateur se supprime lui-même.
Alors, je te conseille de créer un lien "Supprime ton compte !" et d'y inclure ça :
$bdd = new PDO("mysql:dbname=******;host=******;charset=
$bdd->prepare("DELETE FROM membres WHERE id = ?")->execute( array($_SESSION['id']) );   
La première ligne, c'est le connexion à la base de données et la deuxième la requête qui supprime le compte.
Par contre, je te propose d'adapter le système pour voir si l'utilisateur est connecté et le plus important est de mettre un système de confirmation avant de supprimer le compte !


Marius

Messages: 138

Oki, merci, je croyais qu'il fallait autre chose ; j'ai fait le système de confirmation déjà. Merci Grand sourire Le compte est bien supprimé, mais comment puis-je faire pour que, quand l'utilisateur essaye de se connecter, cela me marque : compte supprimé ? Sachant que si une personne s'inscrit et se connecte pour la première mais avec de mauvais identifiants, cela me marque mon erreur : identifiants erronés. Et je voudrais que quand on supprime et qu'on se reconnecte après, sa mette en erreur : Compte supprime.
Voila, merci de votre aide !

DarkShoka

Messages: 21

Ok merci beaucoup a vous trois Sourire

TheFlameflo

Messages: 305

En fait, si tu décides d'afficher "Compte supprimé", il y a plusieurs choses que tu dois faire :
Faire de nouvelles vérifications à la connexion
Ajouter une "case" dans ta bdd avec supprimé ou non.

Mais si tu y tiens, tu dois faire le test à la connexion voir si le compte est supprimé avant de faire la connexion et si c'est le cas, NE PAS le connecter mais afficher le message.
Je crois t'avoir mis sur une piste qui pourrait marcher, te reste plus qu'à créer le système !

Nobodief

Messages: 73

Tu pourrais faire encore mieux pour éviter les problèmes et le bordel dans tes colonnes :

  • Tu ne supprime pas les comptes, mais tu peux créer une colonne status qui défini l'état du compte (0 = non activé / 1 = activé / 2 = sans-propriétaire).
  • Lors de l'inscription de l'utilisateur tu vérifie par ordre (Asc) tous les comptes qui sont sans propriétaire et s'il y'en à tu fait une update à la place de l'insert pour qu'un nouvel utilisateur prennent le compte sans propriétaire en réinitialisant bien-sur les anciennes valeurs du compte. (Cela t'évite de passer d'un identifiant 11 à 90, comme sa tu gardera toujours un ordre d'identifiant croissant (1,2,3,4,5,6,7), si jamais il n'y à pas de compte sans propriétaire tu fait une insert.
  • Pense aussi éventuellement à intégrer un système de dernière connexion avec une date, pour vérifier si le compte est bel est bien inactif et qu'il ne s'agit pas d'un problème de champ, comme sa si un problème est rencontré (par exemple un compte utilisateur qui n'est pas sans propriétaire et qui à été actif récemment, mais qu'il l'est dans la base de donnée tu fait une update du compte concerné pour rétablir le bug).

DarkShoka

Messages: 21

<html>
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="" />
<!--[if lte IE 7]>
<link rel="stylesheet" href="style_ie.css" />
<![endif]-->
        <title>Supprimer Compte</title>
    </head>
    <body>
            <?php
            $sup="SUPPRIMER";
            session_start();
            if(isset($_SESSION['id']))
            {
                    if(isset($_POST['valider']))
                    {
                if(($_POST['confirmer']) == $sup)
                {
                       $id = $_GET['id'];
                       $bdd = new PDO("mysql:dbname=*****;host=127.0.0.1;charset=utf8");
                       $bdd->prepare("DELETE FROM espace_membre WHERE id = ?")->execute( array($id) );               
                       
                       header("Location: *****.php");
                       exit;
                }
                else
                {
                    ?>
                        <p id="erreur">Veillez écrire SUPPRIMER dans le champ de texte pour supprimer votre compte</p>
                    <?php
                }
                    }
            }   
            else
            {
                header("Location: *****.php");
            }
            ?>
                <form method="POST" action="">
                    <input type="text" id="confirmer" name="confirmer" />
                    <input type="submit" value="Confirmer" name="velider" />
                </form>
    </body>
</html>


Ce code ne marche pas HELP !
Publicité

Nobodief

Messages: 73

Prenez l'habitude de créer vos accès à la base de données dans un dossier protéger avec un htaccess, puis faites en l'appel dans vos pages avec un require_once et la session_start() se place toujours en début de page. :
<?php    
     $hostname   = "localhost";
    $databaseuser  = "root";
    $databasepassword    = "";
    $database   = "nom de la base de données";

    $bdd = new PDO('mysql:host='.$hostname.';dbname='.$database.'', ''.$databaseuser.'', ''.$databasepassword.'');
     $bdd->exec("SET CHARACTER SET utf8");
?>


<?php session_start();
require_once('database.php');
?>
<html> 
    <head> 
        <meta charset="utf-8" /> 
        <link rel="stylesheet" href="" /> 
<!--[if lte IE 7]> 
<link rel="stylesheet" href="style_ie.css" /> 
<![endif]--> 
        <title>Supprimer Compte</title> 
    </head> 
    <body> 
            <?php 
            $sup="SUPPRIMER"; 
         
            if(isset($_SESSION['id'])) { 
                if(isset($_POST['valider'])) { 
                    if($_POST['confirmer'] == $sup) { 
                       $id = $_GET['id']; 
                       $supression = $bdd->prepare("DELETE FROM espace_membre WHERE id = ?");
                  $supression->execute(array($id));                                       
                       header("Location: *****.php"); 
                       exit; 
                    } else {
                  $erreur = '<p id="erreur">Vous devez écrire SUPPRIMER !</p>';
               }
                } else { 
                $erreur = '<p id="erreur">Veillez écrire SUPPRIMER dans le champ de texte pour supprimer votre compte</p>';  
            }
         } else {
            header('Location: ***.php')
         }
            ?> 
                <?php if(isset($erreur)) { echo $erreur; } ?>
            <form method="POST" action=""> 
                    <input type="text" id="confirmer" name="confirmer" /> 
                    <input type="submit" value="Confirmer" name="velider" /> 
                </form> 
    </body> 
</html> 

DarkShoka

Messages: 21

J'en suis à là et toujours bloqué:

<?php session_start();
?>
<html> 
    <head> 
        <meta charset="utf-8" /> 
        <link rel="stylesheet" href="" /> 
<!--[if lte IE 7]> 
<link rel="stylesheet" href="style_ie.css" /> 
<![endif]--> 
        <title>Supprimer Compte</title> 
    </head> 
    <body> 
            <?php                   
                      
            if(isset($_SESSION['id'])) { 
                if(isset($_POST['valider'])) { 
                    if($_POST['confirmer'] == "SUPPRIMER") { 
                       $bdd = new PDO("mysql:dbname=studentseeker;host=127.0.0.1;charset=utf8"); 
                       $bdd->prepare("DELETE FROM espace_membre WHERE id = ?")->execute( array($id) );
                       header("Location: studentseeker.php"); 
                       exit;
                    } else {
                  $erreur = '<p id="erreur">Vous devez écrire SUPPRIMER !</p>';
               }
                } else { 
                $erreur = '<p id="erreur">Veillez écrire SUPPRIMER dans le champ de texte pour supprimer votre compte</p>';  
            }
         } else {
            header('Location: studentseeker.php');
         }
            ?> 
                <?php if(isset($erreur)) { echo $erreur; } ?>
                        <form method="POST" action=""> 
                            <input type="text" id="confirmer" name="confirmer" /> 
                            <input type="submit" value="Confirmer" name="valider" /> 
                        </form> 
    </body> 
</html> 


Veuillez vous connecter ou créer un compte pour poster une réponse