PHP - Supprimer un compte utilisateur

WRInaute occasionnel
Bonjour, je possède un site où des membres peuvent s'enregister. J'ai un "espace admin" où je peux gérer les membres, où entre autre je peux les supprimer. J'aimerais mettre un bouton dans les sessions des membres pour qu'ils puissent eux mêmes supprimer leur compte. Vous trouverez ci-dessous, les codes des pages qui me servent à supprimer un utilisateur. Quelqu'un saurait me dire comment réaliser ceci, à l'aide des codes ci-dessous? Merci.

Première page, où un champ me demande l'email, puis il faut cliquer sur supprimer.
Code:
<?
include("../templates/admin-header.txt");
?>
<center><table border="0" bordercolor="#00FF00">
              <tr>
                <td rowspan="6" width="483" valign="top">
                  <div align="left">

                    <form name="form1" method="post" action="userloschen2.php">
                      <table width="70%" border="0" align="center">
                        <tr>
                          <td width="50%">E-mail de l'utilisateur </td>
                          <td width="77%">
                            <input type="text" name="email" size="20" maxlength="50">
                          </td>
                        </tr>
                        <tr>
                          <td colspan="2">
                            <div align="center">
                              <input type="submit" name="Submit" value="Supprimer">
                            </div>
                          </td>
                        </tr>
                      </table>
                    </form>
                    <p align="center">&nbsp;</p>
    </div>
                </td>
              </tr>
            </table></center>


Seconde page, où un message de confirmation apparait pour dire que le membre a bien été supprimé.
Code:
<?
include("header.inc.php");
?>
<?
global $email;
        $query="DELETE FROM demo_a_accounts WHERE email='$email'";
        mysql_query($query);
?>
<?
include("../templates/admin-header.txt");
?>
<center>
  L'utilisateur avec l'adresse e-mail  <?php echo "$email"; ?> a &eacute;t&eacute; supprim&eacute; de la base de donn&eacute;e.
</center>
 
WRInaute passionné
Tu veux faire la suppression juste en donnant un email? N'importe qui pourra supprimer un compte comme ça?

Le global $email; dans le second script ne sert à rien.

Le
"DELETE FROM demo_a_accounts WHERE email='$email'";
devrait plus être :
"DELETE FROM demo_a_accounts WHERE email='".$_POST['email']."'";
Ca évitera déjà quelques problèmes.

Sinon à mon avis il faut revoir le fonctionnement car ça me parrait un peu bancal.
 
WRInaute occasionnel
Bonjour, merci de votre réponse. En fait je veux que chaque utilisateur puisse supprimer son compte à partir de son espace membre et c'est pour ça que je cherche comment faire pour qu'ils puissent supprimer que leur compte, et pas ceux des autres...
 
WRInaute passionné
Tu dois avoir un identifiant non?

Tu fais un bouton supprimer avec un lien du genre :
me_supprimer.php?id=<l'id de ton membre>

Dans me_supprimer.php tu vérfie que c'est bien la bonne personne (par rapport à celle connectée), si oui tu la supprimes.

Par contre attention si ces membres ont posté des messages ou autre ça peut foutre le bordel (tout dépend comment c'est codé).
 
WRInaute discret
Bacteries a dit:
"DELETE FROM demo_a_accounts WHERE email='".$_POST['email']."'";
addslashes($_POST['email']) serait un peu mieux même mais vu que c'est pour son propre compte, mieux vaut passer par les ID.

Et pour éviter de "foutre le bordel" dans ta base de données, assure-toi de bien comprendre chaque ligne de la page 'userloschen2.php' avant d'en faire une adapté pour tes membres (=> sauvegarde de la base de donnée et tests en local hautement recommandés ;)).
 
WRInaute occasionnel
Ben en fait je n'y connais absolument rien en PHP donc je pensais mettre un bouton "Supprimer mon compte" et lorsque qu'un membre appuie sur ce bouton, un script supprime l'email de l'utilisateur de la base de donnée (comme je peux le faire à partir de l'espace administrateur). Et comme ça, il n'y a pas de risque pour qu'un utilisateur supprime autre que son compte. Lorsque l'on rentre dans l'espace membre, un code PHP indique l'email de l'utilisateur, il dit "echo $num3;". Puis-je réaliser la supprssion à partir de cela? Merci.
 
WRInaute occasionnel
Le fichier "userloschen 2" a le code suivant :
Code:
<?
include("header.inc.php");
?>
<?
global $email;
        $query="DELETE FROM demo_a_accounts WHERE email='$email'";
        mysql_query($query);
?>
<center>
  L'utilisateur avec l'adresse e-mail  <?php echo "$email"; ?> a &eacute;t&eacute; supprim&eacute; de la base de donn&eacute;e.
</center>

Comment faire pour "stocker" la valeur "echo $num3;" dans la valeur "$email" pour que sur une page de l'espace membre, la valeur "echo $num3;" (email du membre) soit stocké dans "$email" , puis qu'en cliquant sur un lien, la page userloschen 2 s'ouvre et réalise la suppression???
 
WRInaute occasionnel
C'est bon, j'y suis arrivé, voilà comment j'ai fais :
Dans l'espace membre, en cliquant sur "Editer votre compte", j'ai ajouté un bouton "Supprimer" pour supprimer le compte :

Code:
<p align="center" class="Style44">
<span style="font-family: verdana; font-size: 14px; font-weight: bold">
<u>Supprimer mon compte (recup&eacute;ration impossible) : </u></span></p>
<table border="0" bordercolor="#00FF00">
<tr>
<td rowspan="6" width="483" valign="top"><div align="left">
<form name="form1" method="post" action="../compte-supprime.php">
<table width="70%" border="0" align="center">
<tr>
<td width="50%">&nbsp;</td>
<td width="77%"><input name="email" type="hidden" value="<?php echo $row3[3]; ?>" size="20" maxlength="50">                          </td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="Supprimer">
</div></td>
</tr>
</table>
</form>
<p align="center">&nbsp;</p>
</div></td>
</tr>
</table>

Si le membre clique sur le bouton, une page s'ouvre pour lui dire que son compte a été supprimé, voici le code :

<?
include("admin/header.inc.php");
?>
<?
global $email;
$query="DELETE FROM demo_a_accounts WHERE email='$email'";
mysql_query($query);
?>

<p align="center" class="Style44"><u>Compte supprim&eacute;e </u></p>
<blockquote>
<p align="center" class="Style46 Style37"><strong>L'utilisateur avec l'adresse e-mail <?php echo "$email"; ?> a &eacute;t&eacute; supprim&eacute; de la base de donn&eacute;e.</strong></p>
</blockquote>
<p class="Style46 Style37">&nbsp;</p>
 
WRInaute discret
Dans l'espace membre, en cliquant sur "Editer votre compte", j'ai ajouté un bouton "Supprimer" pour supprimer le compte :
"J'ai ajouté : c'est du passé composé ?
...tu n'as pas peur toi :D

Déjà $email ne devrait rien retourner normalement, s'il retourne quelque chose, c'est que ton serveur à de fortes chances de presenter des failles de sécurité (mais c'est une autre histoire).

Ensuite ton script est à retirer tout de suite de ton site. Je sais pas le nombre de visiteurs que tu as mais un jour ou l'autre la faille est toujours découverte. Imagine qu'un membre modifie le champ email par le tiens : il supprime ton compte. Et maintenant, plus dangeureux encore, il modifie le champs email par ' OR 1 OR email='
=>
"DELETE FROM demo_a_accounts WHERE email='' OR 1 OR email=''"; (<=> SUPRIMME DE demo_a_accounts QUAND email est vide OU toujours OU email est vide)
=>
Tu n'aura plus aucun membre...

donc à la place de
$query="DELETE FROM demo_a_accounts WHERE email='$email'";
tu devrais mettre ca normalement :
$query='DELETE FROM demo_a_accounts WHERE email=\''.addslashes($_POST['email']).'\'';

et même plus, tu devrais trouver un moyen d'identifier chaque personne sans passer par un champ de formulaire. (fait voir le code php de header.inc.php si tu veux je regarderai)


.
 
WRInaute occasionnel
Bonjour, en fait l'utilisateur ne peux pas changer l'email du compte à modifier, il est inscrit dans un champ de texte masqué. Il peux juste cliquer sur "Supprimer", ce qui entraîne la suppression de son compte... Je ne vois pas comment un utilisateur peut donc supprimer le compte d'un autre, puisque qu'il n'a pas à rentrer d'email mais seulement à cliquer sur un bouton. Dîtes le moi si je me trompe, merci d'avance.
 
WRInaute discret
gcvoiron a dit:
Dîtes le moi si je me trompe, merci d'avance.
:D tu te trompe mais rassure toi, tu n'es pas le premier à faire cette erreur ;)

tout ce qui est envoyé par le navigateur du client est modifiable par le client. Je le sais très bien car je dévelloppe plusieurs programme en c# qui utilisent ces possibiltés ;) (mais nul besoin de programmer pour le faire, un novice peut très bien copier ta page de formulaire sur un autre site et la modifier de là bas en appelant http://www.example.net/compte-supprime.php
 
WRInaute occasionnel
Dans header.inc.php, il y a juste cela :
<?php
$db = mysql_pconnect("********", "********", "****");
mysql_select_db("********",$db);
?>
 
WRInaute discret
D'après ce que j'ai vu en mp, ca donnerai alors ca :
Code:
<?php
include("header.inc.php");
mysql_query("DELETE FROM demo_a_accounts WHERE id='$userid'") or die('erreur avec mysql');

//idéalement, il faudrait executer ici le script de déconnexion pour eviter que la personne reste connecté alors que son compte n'existe plus.
?>

<p align="center" class="Style44"><u>Compte supprim&eacute;e </u></p>
<blockquote>
<p align="center" class="Style46 Style37"><strong>Votre compte a bien &eacute;t&eacute; supprim&eacute; de la base de donn&eacute;e.</strong></p>
</blockquote>
<p class="Style46 Style37">&nbsp;</p

(header.inc.php serait alors different de admin/header.inc.php ?)
 
WRInaute occasionnel
Mais en fait, avec votre code, comment l'utilisateur fait pour surpprimer sa session? Il n'y bouton, ni lien...
 
WRInaute discret
comme avant mais ce qui est en rougen'est plus utile :
gcvoiron a dit:
<p align="center" class="Style44">
<span style="font-family: verdana; font-size: 14px; font-weight: bold">
<u>Supprimer mon compte (recup&eacute;ration impossible) : </u></span></p>
<table border="0" bordercolor="#00FF00">
<tr>
<td rowspan="6" width="483" valign="top"><div align="left">
<form name="form1" method="post" action="../compte-supprime.php">
<table width="70%" border="0" align="center">
<tr>
<td width="50%">&nbsp;</td>
<td width="77%"><input name="email" type="hidden" value="<?php echo $row3[3]; ?>" size="20" maxlength="50"> </td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="Submit" value="Supprimer">
</div></td>
</tr>
</table>
</form>
<p align="center">&nbsp;</p>
</div></td>
</tr>
</table>

ou directement un lien vers :
"../compte-supprime.php"
 
WRInaute occasionnel
Donc dans ma page "Editer votre compte", je mets :
Code:
<p align="center" class="Style44"> 
<span style="font-family: verdana; font-size: 14px; font-weight: bold"> 
<u>Supprimer mon compte (recup&eacute;ration impossible) : </u></span></p> 
<table border="0" bordercolor="#00FF00"> 
<tr> 
<td rowspan="6" width="483" valign="top"><div align="left"> 
<form name="form1" method="post" action="../compte-supprime.php"> 
<table width="70%" border="0" align="center"> 
<tr> 
<td width="50%">&nbsp;</td> 
<td width="77%"> </td> 
</tr> 
<tr> 
<td colspan="2"><div align="center"> 
<input type="submit" name="Submit" value="Supprimer"> 
</div></td> 
</tr> 
</table> 
</form> 
<p align="center">&nbsp;</p> 
</div></td> 
</tr> 
</table>

Et dans compte-supprime.php, je mets ce qu'il y a ci-dessous?
Code:
<?php 
include("header.inc.php"); 
mysql_query("DELETE FROM demo_a_accounts WHERE id='$userid'") or die('erreur avec mysql'); 

//idéalement, il faudrait executer ici le script de déconnexion pour eviter que la personne reste connecté alors que son compte n'existe plus. 
?> 

<p align="center" class="Style44"><u>Compte supprim&eacute;e </u></p> 
<blockquote> 
<p align="center" class="Style46 Style37"><strong>Votre compte a bien &eacute;t&eacute; supprim&eacute; de la base de donn&eacute;e.</strong></p> 
</blockquote> 
<p class="Style46 Style37">&nbsp;</p>
 
WRInaute occasionnel
Bonjour, ça ne marche pas au niveau du fichier "Editer votre compte". Etant donné que j'ai supprimé la ligne "<input name="email" type="hidden" value="<?php echo $row3[3]; ?>" size="20" maxlength="50">", il ne sait pas quel email faut supprimer... La page de confirmation s'ouvre correctement mais le compte n'est pas supprimé.
 
WRInaute discret
Change ca alors :
<?php
require_once("header.inc.php");
mysql_query("DELETE FROM demo_a_accounts WHERE id='$userid'") or die('erreur avec mysql');

//idéalement, il faudrait executer ici le script de déconnexion pour eviter que la personne reste connecté alors que son compte n'existe plus.
?>

<p align="center" class="Style44"><u>Compte supprim&eacute;e </u></p>
<blockquote>
<p align="center" class="Style46 Style37"><strong>Votre compte a bien &eacute;t&eacute; supprim&eacute; de la base de donn&eacute;e.</strong></p>
</blockquote>
<p class="Style46 Style37">&nbsp;</p>
et mets compte-supprime.php dans le même dossier que dans celui de la page "Editer votre compte"
 
WRInaute occasionnel
Ca ne marche toujours pas. Mais lorsque j'arrive sur la page qui doit supprimer le compte, compte-supprime.php, comment cette page sait quel compte il faut supprimer?
 
WRInaute discret
Ce que j'ai compris dans le fichier que tu m'a passé c'est que $userid était defini dans header.inc.php (celui qui est dans le même dossier que cette page et pas le même que admin/header.inc.php).

A la limite montre-moi le header.inc.php en question mais comme je crois pas à la magie et que sur ton fichier, il appel $userid dès les premieres lignes et qu'il n'est pas defini, il ne peut l'etre que dans le seul fichier inclus avant, càd header.inc.php. :)
 
WRInaute occasionnel
Par mesure de sécuritée, il faut une confirmation que c'est bien l'utilisateur du compte qui supprime son compte. J'ai donc fait le CODE ci-dessous, mais il ne marche pas. Sauriez-vous m'expliquer pourquoi? Merci.

Page supprimer.php, là où on demande l'email et le mot de passe :

Code:
<form method="post" action="supprimer-ok.php">
<blockquote>
<p><span class="Style44">
<input name="sid" type="hidden" id="sid" value="<?php echo $sid; ?>">
</span> </p>
</blockquote>
<table width="400" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<input name="passneu" type="text" size="30">
</TR>
<tr>
<input name="emailneu" type="text" size="30">
</TR>
<blockquote><p><center>
<input name="submit" type="submit" value="Supprimer mon compte">
</center></p></blockquote>
</form>

Page supprimer-ok.php, qui doit réaliser la suppression :

Code:
<?php
require('../header.inc.php');

if ( isset($_POST) && (!empty($_POST['passneu'])) && (!empty($_POST['emailneu'])) ) {

  extract($_POST);  

  $sql = "SELECT password FROM demo_a_accounts WHERE email = '".addslashes($emailneu)."'";
  $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
  

  if (mysql_num_rows($req) > 0) {
     $data = mysql_fetch_assoc($req);
    

    if ($passneu == $data['password']) {
      $suppression = true;
    }
  }
}


if ($suppression) {
	require('../prepend.inc.php');
	$requete = "delete from demo_a_accounts where email=emailneu";

}
else {
  echo 'Une erreur est survenue, veuillez r&eacute;essayer !'; 
}
?>
 
Discussions similaires
Haut