Author Topic: [Mod] User can delete his own account / User kann seinen Account löschen  (Read 45884 times)

0 Members and 1 Guest are viewing this topic.

b.o.fan

  • Guest
Hello, i found out how the user can delete the own account. This Mod was on the old board. The User i don´t no...
make a backup before edit the files:

files to edit:


./member.php
./template/<your language>/user_logininfo.html OR .templates/<your language>/member_editprofile.html


files to dreate:

./template/<your language>/member_deleteaccount.html


open member.php

find:
Code: [Select]
//-----------------------------------------------------
//--- Clickstream -------------------------------------
//-----------------------------------------------------

add before:
Code: [Select]
//-----------------------------------------------------
//--- Delete Account ----------------------------------
//-----------------------------------------------------
if ($action == "deleteaccount"){
  $passwort=$HTTP_POST_VARS[passwort];
  $progress=$HTTP_POST_VARS[progress];
  $user_id=$user_info['user_id'];
  $user_name=$user_info['user_name'];
  if ($progress == 1){
    if(md5($passwort) == $user_info['user_password']){
      // Group Sachen
      $sql = "DELETE FROM ".GROUP_MATCH_TABLE."
              WHERE user_id = $user_id";
      $site_db->query($sql);
      $sql = "SELECT group_id
              FROM ".GROUPS_TABLE."
              WHERE group_name = '$user_name' AND group_type = ".GROUPTYPE_SINGLE;
      if ($groups_row = $site_db->query_firstrow($sql)) {
        $sql = "DELETE FROM ".GROUPS_TABLE."
                WHERE group_id = ".$groups_row['group_id']." AND group_type = ".GROUPTYPE_SINGLE;
        $site_db->query($sql);

        $sql = "DELETE FROM ".GROUP_ACCESS_TABLE."
                WHERE group_id = ".$groups_row['group_id'];
        $site_db->query($sql);
      }
      //Lighbox
      $sql = "DELETE FROM ".LIGHTBOXES_TABLE."
              WHERE user_id = $user_id";
      $site_db->query($sql);
      //Update Images
      $sql = "UPDATE ".IMAGES_TABLE."
              SET user_id = ".GUEST."
              WHERE user_id = $user_id";
      $site_db->query($sql);
      //Update Comments
      $sql = "UPDATE ".COMMENTS_TABLE."
              SET user_id = ".GUEST.", user_name = '$user_name'
              WHERE user_id = $user_id";
      $site_db->query($sql);
      //Delete User
      $sql = "DELETE FROM ".USERS_TABLE."
              WHERE user_id = ".$user_id."";
      if($site_db->query($sql)) {
        $msg = "<b>".$user_name." your account with the ID: ".$user_id." successfully one deleted.</b>";
        $site_sess->logout($user_info['user_id']);
        header("Location: ".$site_sess->url(ROOT_PATH."index.php?msg=".$msg.""));
      }else{
        $msg = "<b>Your account could not be deleted please turn you to a Admin, thereby the account to be manually deleted can!!!</b>";



      }
    }else{
      $msg= "The account could not be deleted, since the password is wrong. Please it tries again.";
    }
    $content = $site_template->parse_template("member_deleteaccount");
  }else{
    $content = $site_template->parse_template("member_deleteaccount");
  }
}

then create a new .html named: member_deleteaccount.html

Code: [Select]
<form method="post" action="{url_member}" enctype="multipart/form-data" onsubmit="submit.disabled=true;">
  <table width="100%" border="0" cellspacing="0" cellpadding="1">
    <tr>
      <td valign="top" class="head1">
        <table width="100%" border="0" cellpadding="4" cellspacing="0">
          <tr>
            <td valign="top" class="head1">delete Account</td>
          </tr>
          <tr>
            <td class="row2">It harms that you want to leave us!!!<p>Please your password enters for safety reasons:<input type="password" name="passwort" class="input" size="20"></td>
          </tr>
        </table>
      </td>
    </tr>
  </table><center>
  <input type="hidden" name="action" value="deleteaccount">
  <input type="hidden" name="progress" value="1">
  <input type="submit" name="submit" value="delete Account :-(" class="button">
  <input type="reset" name="reset" value="ohh not :-)" class="button"onClick="window.open('{url_home}', '_top');">
</form>

if you want show the link DELETE ACCOUNT in the user_logininfo.html
then open the user_logininfo.html and find:
Code: [Select]
&raquo; <a href="{url_control_panel}">{lang_control_panel}</a><br />
add after:
Code: [Select]
&raquo; <a href="./member.php?action=deleteaccount">Delete Account</a><br />
if you want show the link DELETE ACCOUNT in the member_editprofile.html
then open the member_editprofile.html and find:
Code: [Select]
<form method="post" action="{url_member}" enctype="multipart/form-data">
add above this:
Code: [Select]
<center><a href="./member.php?action=deleteaccount">Delete Account</a></center><br />
thats all. Uplod the files. for testing create a new user and delete him on his controlpanel. DONT use your User. it deletes all!!!!  :twisted:

--------------------
----Deutsch-------
--------------------

so kann der User seinen Account löschen.

Macht vorher einen Backup bevor ihr die Dateien ändert!!!

zubearbeitene Dateien:


./member.php
./template/<your language>/user_logininfo.html ODER .templates/<your language>/member_editprofile.html


zu erstellende Dateien:

./template/<your language>/member_deleteaccount.html

öffne member.php

finde:
Code: [Select]
//-----------------------------------------------------
//--- Clickstream -------------------------------------
//-----------------------------------------------------

füge davor ein:
Code: [Select]
//-----------------------------------------------------
//--- Delete Account ----------------------------------
//-----------------------------------------------------
if ($action == "deleteaccount"){
  $passwort=$HTTP_POST_VARS[passwort];
  $progress=$HTTP_POST_VARS[progress];
  $user_id=$user_info['user_id'];
  $user_name=$user_info['user_name'];
  if ($progress == 1){
    if(md5($passwort) == $user_info['user_password']){
      // Group Sachen
      $sql = "DELETE FROM ".GROUP_MATCH_TABLE."
              WHERE user_id = $user_id";
      $site_db->query($sql);
      $sql = "SELECT group_id
              FROM ".GROUPS_TABLE."
              WHERE group_name = '$user_name' AND group_type = ".GROUPTYPE_SINGLE;
      if ($groups_row = $site_db->query_firstrow($sql)) {
        $sql = "DELETE FROM ".GROUPS_TABLE."
                WHERE group_id = ".$groups_row['group_id']." AND group_type = ".GROUPTYPE_SINGLE;
        $site_db->query($sql);

        $sql = "DELETE FROM ".GROUP_ACCESS_TABLE."
                WHERE group_id = ".$groups_row['group_id'];
        $site_db->query($sql);
      }
      //Lighbox
      $sql = "DELETE FROM ".LIGHTBOXES_TABLE."
              WHERE user_id = $user_id";
      $site_db->query($sql);
      //Update Images
      $sql = "UPDATE ".IMAGES_TABLE."
              SET user_id = ".GUEST."
              WHERE user_id = $user_id";
      $site_db->query($sql);
      //Update Comments
      $sql = "UPDATE ".COMMENTS_TABLE."
              SET user_id = ".GUEST.", user_name = '$user_name'
              WHERE user_id = $user_id";
      $site_db->query($sql);
      //Delete User
      $sql = "DELETE FROM ".USERS_TABLE."
              WHERE user_id = ".$user_id."";
      if($site_db->query($sql)) {
        $msg = "<b>".$user_name." dein Account mit der ID: ".$user_id." wurde erfolgreich gelöscht</b>";
        $site_sess->logout($user_info['user_id']);
        header("Location: ".$site_sess->url(ROOT_PATH."index.php?msg=".$msg.""));
      }else{
        $msg = "<b>Dein Account konnte nicht gelöscht werden bitte Wende dich an einen Admin, damit der Account manuell gelöscht werden kann!!!</b>";



      }
    }else{
      $msg= "Der Account konnte nicht gelöscht werden, da das Passwort falsch ist. Bitte versuche es noch einmal.";
    }
    $content = $site_template->parse_template("member_deleteaccount");
  }else{
    $content = $site_template->parse_template("member_deleteaccount");
  }
}

erstelle eine neue .html namens member_deleteaccount.html

Code: [Select]
<form method="post" action="{url_member}" enctype="multipart/form-data" onsubmit="submit.disabled=true;">
  <table width="100%" border="0" cellspacing="0" cellpadding="1">
    <tr>
      <td valign="top" class="head1">
        <table width="100%" border="0" cellpadding="4" cellspacing="0">
          <tr>
            <td valign="top" class="head1">Account löschen</td>
          </tr>
          <tr>
            <td class="row2">Schade, dass du uns verlassen willst!!!<p>Bitte gib aus Sicherheitsgründen dein Passwort ein:<input type="password" name="passwort" class="input" size="20"></td>
          </tr>
        </table>
      </td>
    </tr>
  </table><center>
  <input type="hidden" name="action" value="deleteaccount">
  <input type="hidden" name="progress" value="1">
  <input type="submit" name="submit" value="Account löschen :-(" class="button">
  <input type="reset" name="reset" value="Doch nicht :-)" class="button"onClick="window.open('{url_home}', '_top');">
</form>

wenn du den Link "account löschen" in der user_lofininfo.html haben willst
öffne user_logininfo.html und finde
Code: [Select]
&raquo; <a href="{url_control_panel}">{lang_control_panel}</a><br />füge danch ein:
Code: [Select]
&raquo; <a href="./member.php?action=deleteaccount">Account löschen</a><br />
falls du das in dem kontrollzentrum haben willst dann finde in der member_editprofile.html:
Code: [Select]
<form method="post" action="{url_member}" enctype="multipart/form-data">
füge davor ein:
Code: [Select]
<center><a href="./member.php?action=deleteaccount">Account löschen</a></center>
Das war alles.
Tip: wenn du das testen willst, lege vorher einen Testaccount an. ;-)



b.o.fan

Offline V@no

  • If you don't tell me what to do, I won't tell you where you should go :)
  • Global Moderator
  • 4images Guru
  • *****
  • Posts: 17.849
  • mmm PHP...
    • View Profile
    • 4images MODs Demo
IMHO this should be done through control panel and not through login form...;)
Your first three "must do" before you ask a question:
Please do not PM me asking for help unless you've been specifically asked to do so. Such PMs will be deleted without answer. (forum rule #6)
Extension for Firefox/Thunderbird: Master Password+    Back/Forward History Tweaks (restartless)    Cookies Manager+    Fit Images (restartless for Thunderbird)

b.o.fan

  • Guest
ohh yeah. i look in the templates. and i will change this.
oki?
@ Vano i´ve changed this @ 16.03.2005 at 23.59...

Offline Null

  • Pre-Newbie
  • Posts: 1
    • View Profile
Hi,

Will this mod also delete all the users pictures/ categories? And will he get a warning like: Deleting your account will also delete al you pictures! Or can this easely be implemented? And how?

Thx

Offline JensF

  • Addicted member
  • ******
  • Posts: 1.028
    • View Profile
    • http://www.terraristik-galerie.de
Hi,

Will this mod also delete all the users pictures/ categories? And will he get a warning like: Deleting your account will also delete al you pictures! Or can this easely be implemented? And how?

Thx

Now, thats my Question, too!
Mit freundlichem Gruß
Jens Funk



-> Sorry for my bad English <-

b.o.fan

  • Guest
//...........................
//......ENGLISH.........
//...........................

it delete only the USER-Data. not the picture, etc.

that was your question?

//...........................
//......DEUTSCH........
//............................
es löscht nur die USER-Daten. Nicht die Bilder, etc.

das war deine Frage?

Offline Stoleti

  • Hero Member
  • *****
  • Posts: 574
    • View Profile
the ideial is this delete all from that user (account/pictures)  :roll:

Offline IcEcReaM

  • Hero Member
  • *****
  • Posts: 714
    • View Profile
    • My little Testboard
bin mir zwar jetzt nicht genau sicher,
da ich den code jetzt nicht kenne, von diesem mod,
aber wenn am ende des scripts die weiterleitung über header() erfolgt,
dann ist nach der weiterleitung die variable $msg (also dein text) nicht mehr vorhanden,
da es ja ein neuer aufruf der seite ist.
mögliche lösung wäre, das ganze über ne session bassierte ausgabe zu machen.
gibt hier im forum sicher das ein oder andere beispiel dafür.
Coding is a everlasting competition between programmers who tries to write larger, better and idiot-safe programs and the universe producing larger and stupider idiots...
...so far the universe won
bump

Offline IcEcReaM

  • Hero Member
  • *****
  • Posts: 714
    • View Profile
    • My little Testboard
Nur mal der Verständis wegen:
Du hast ein Skript nennen wir es delete.php,
womit der user gelöscht wird,
und dann wird er per header() wieder auf die Startseite geleitet?

ahh ok, hab mir jetzt mal die zeit genommen,
das skript von oben anzuschauen.

also vergiss das ganze mit der session basierten ausgabe,
hab jetzt erst gesehen, dass die lösch meldung per variable übergeben,
und dann auf der startseite angezeigt wird.
deine $msg variable kannst du folgendermassen verändern:

statt
Code: [Select]
$msg = "<b>".$user_name." your account with the ID: ".$user_id." successfully one deleted.</b>";
nimmst du:
Code: [Select]
$msg = "<b>".$user_name.$lang['delete_mod_1'].$user_id.$lang['delete_mod_2']."</b>";

$lang['delete_mod_1'] = " your account with the ID: ";
$lang['delete_mod_2'] = " successfully one deleted.";

die beiden lang variablen kannst du dann in deine main.php packen.
Coding is a everlasting competition between programmers who tries to write larger, better and idiot-safe programs and the universe producing larger and stupider idiots...
...so far the universe won
bump

Offline IcEcReaM

  • Hero Member
  • *****
  • Posts: 714
    • View Profile
    • My little Testboard
eigentlich sollte erst genannte methode auch funktionieren,
allerdings muss in der aufgerufenen seite dann auch der $msg parameter wieder korrekt ausgelesen werden,
gerade wenn register_global_off ist.
Coding is a everlasting competition between programmers who tries to write larger, better and idiot-safe programs and the universe producing larger and stupider idiots...
...so far the universe won
bump

Offline Stoleti

  • Hero Member
  • *****
  • Posts: 574
    • View Profile
the ideial is this delete all from that user (account/pictures)  :roll:

or clean all data (pms,comments,pics,forum posts)  8)

Offline IWS_steffen

  • Full Member
  • ***
  • Posts: 128
    • View Profile
    • Kreuzfahrtschiffe gestern und heute
Hallo,


das Skript läuft bei mir auch soweit stabil. Super....

Die Idee mit der Bestätigung finde ich auch gut, um ein versehendliches Löschen auszuschließen.

Gruß Steffen

Offline JensF

  • Addicted member
  • ******
  • Posts: 1.028
    • View Profile
    • http://www.terraristik-galerie.de
Werden denn jetzt mittlerweile alle Daten gelöscht (User Bild, PMS etc.) ??? Oder verschwindet nur der User???

Coll wäre auch noch wenn man im ACP einstellen kann ob Bilder und Komentare mit gelöscht werden sollen oder nicht. Der Admin sagt also Bilder mit löschen oder nicht!
Mit freundlichem Gruß
Jens Funk



-> Sorry for my bad English <-

Offline Chicco

  • Full Member
  • ***
  • Posts: 211
    • View Profile
    • The Picture World
Also ich finde, das der User selbst entscheiden sollte, ob seine Bilder sowie Kommentare weiterhin bestehen bleiben dürfen oder ebenfalls gelöscht werden sollen. Schließlich hat auch nur er die Rechte auf seine Bilder bzw. sind es seine Bilder. Wenn er also nicht möchte, das seine Bilder noch bestehen obwohl er selbst kein Mitglied mehr ist, so sollten die Bilder auch gelöscht werden können! 8O

Ich habe mir mittlerweile eine Löschfunktion eingebaut, bei dem der User ein einfaches Formular ausfüllen muss. Dabei muss er sein Usernamen, sein momentanes Passwort sowie seine Mailadresse mit angeben. Darunter kann er per Radio-Buttons noch entscheiden, ob seine Bilder und Kommentare ebenfalls gelöscht werden sollen oder bleiben dürfen.

Ich bekomme als Admin dann diese Mail, checke kurz ob das Passwort stimmt indem ich mich als dieser User einlogge und lösche dann im ACP den User mit oder ohne Bilder und Kommentare.

So behalte ich als Admin auch den Überblick, WER seine Mitgliedschaft beendet hat und ob die Bilder noch bestehen oder nicht. Bei einer vollautomatischen Kündigung hat man nach einer Weile doch kein Plan mehr, wer wann gekündigt hatte. Oder? :?

Der User bekommt automatisch eine Antwortmail zugeschickt, das ich seine Kundigung bekommen habe. Ein zusätzliches Bemerkungsfeld, bei dem der User noch angeben kann, warum er seine Mitgliedschaft kündigt, kommt noch nachträglich rein.


Wissen ist MACHT! Nix zu wissen macht aber auch nix! ;-)

Gruß
Ch¿cco

Offline Alonso

  • Newbie
  • *
  • Posts: 17
    • View Profile
    • Haustierpics.de
@Chicco

Diese Variante würde mir auch gut gefallen haste das schon fertig ?
Dumm ist nur der der Dummes tut