Anzahl der PMs begrenzen?

Begonnen von Seth, 21 Juni 2002, 08:23:23

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Seth

Hi,

ich hab mich mal gestern mit phpmyAdmin etwas durch die DB gewühlt und dabei festgestellt, dass einige User auf meiner Seite teilweise 50 PMs und mehr gespeichert haben! Gibt es eine Möglichkeit, die maximale Anzahl an PMs zu begrenzern?  :quest

Joschau

Hi Seth!

Eine einfache Lösung gibt es dafür nicht. Das würde größeren Programmieraufwand bedeuten. Aber eine Anregung ist das auf jeden Fall.

FrankySZ

Hi Seth,
der Möglichkeit nachzugehen, haben wir uns auch schon vorgenommen, allerdings waere das ein etwas groesser im Aufwand, wie Joschau schon geschrieben hat ...
Daher haben wir uns entschlossen sporadisch, wenn es zu viele werden, eine Adminmessage fuer 3 tage auf die site zu setzten, in dem ein loeschen der PM - Datenbank angekuendigt wird.
Diejenigen die ihre PM-Inhalte nicht verlieren moechten haben dann genuegend zeit zum sichern... und falls mal jemand im Urlaub ist auch kein Prob wir sichern jeden Tag die komplette Datenbank ...
greets Franky

OK, ich hab grad gesehen ich hab zwei Member deren PMs gehen schon auf die 100 zu!  :exclam:
Aber gibt es eein Script, das automatisch alle PMs löscht, die vor einem bestimmten Datum erstellt wurden? Sonst müsste ich mich durch hunderte von PMs wühlen...

Seth

Ups, Sorry hab vergessen mich anzumelden.  :puzz

Joschau

Speicher mal die folgende Datei als admindelete.php in das Verzeichnis /modules/Private_Messages/

Dann rufst Du es in der Adresszeile Deines Browsers mit

http://www.deinedomain.de/modules.php?mop=modload&name=Private_Messages&file=admindelete

auf und gibst das Datum ein, vor dem alle Messages gelöscht werden sollen...aber Vorsicht: Die datei tut das, was Du von Ihr erwartest, ohne Rückfrage! ;P

(An die Puristen unter Euch  :P : Ich weiß auch, dass die Datei in Aufbau und Platzierung nicht den Nuke-Standards entspricht, aber war ja auch nur ein Quickie :D )


<?

/************************************************************************/
/* PHP-NUKE: Web Portal System                                          */
/* ===========================                                          */
/*                                                                      */
/* Copyright (c) 2002 by Francisco Burzi (fbc@mandrakesoft.com)         */
/* http://phpnuke.org                                                   */
/*                                                                      */
/* With this file it´s possible, to delete older pm´s from the database */
/* Copyright: (c) 2002 Jochem Schausten                                 */
/* http://www.phpnuke-module.de                                         */
/*                                                                      */
/* This program is free software. You can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 2 of the License.       */
/************************************************************************/

if (!eregi("modules.php", $PHP_SELF)) {
    die ("You can't access this file directly...");
}

$index = 1;
require_once("mainfile.php");
$module_name = basename(dirname(__FILE__));
//get_lang($module_name);

define ("_PMDELETEDATE", "Datum, vor dem gelöscht werden soll:Format: YYYY-MM-DD");



function PMGetDeleteDate() {

   global $module_name;

   if (is_admin($admin)) :

      include ("header.php");
      OpenTable();
      echo "<form method=\"post\" action=\"modules.php?mop=modload&name=$module_name&file=admindelete\">\n"
         ."<b>"._PMDELETEDATE."</b> <input type=\"text\" size=4 maxlength=4 name=\"deletedate[0]\">$nbsp;<input type=\"text\" size=2 maxlength=2 name=\"deletedate[1]\"> <input type=\"text\" size=2 maxlength=2 name=\"deletedate[2]\">\n"
         ."<input type=\"hidden\" name=\"action\" value=\"pmdelete\">\n"
         ."<input type=\"submit\" value=\""._SUBMIT."\"></form>\n";

      CloseTable()
      include ("footer.php");


   else :

      die ("YOU can't access this file...");

   endif;

}


function PMDelete ($HTTP_POST_VARS) {

   global $prefix, $dbi, $admin;

   if (is_admin($admin)) :
      while (list($key, $val) = each($HTTP_POST_VARS)) $$key = $val;
      $deletetime = $deletedate[0]."-".$deletedate[1]."-".$deletedate[2];
      include ("header.php");
      OpenTable();

      if (!sql_query ("DELETE FROM ".$prefix."_priv_msgs WHERE msg_time < $deletetime", $dbi) {

         echo mysql_error();

      } else {

         $rows = mysql_affected_rows();
         echo $rows." messages deleted";

      }
      CloseTable()
      include ("footer.php");

   else :

      die ("YOU can't access this file...");

   endif;

}

switch ($action) {

   case "pmdelete":
   PMDelete($HHTP_POST_VARS);
   break;
   
   default:
   PMGetDeleteDate();
   break;
   
}


?>

[Editiert am 6/21/2002 von Joschau]

Havard

ehrlich gesagt funzt dein quickie auch gar nicht!!!

kannst du es nochmal neu schicken??

Joschau

Tja, man sollte eben nie erst kopieren und dann testen ... ähem  :redhead:

Jetzt aber, zumindest bei mir mit dem VKP von hier, hat es funktioniert...


<?

/************************************************************************/
/* PHP-NUKE: Web Portal System                                          */
/* ===========================                                          */
/*                                                                      */
/* Copyright (c) 2002 by Francisco Burzi (fbc@mandrakesoft.com)         */
/* http://phpnuke.org                                                   */
/*                                                                      */
/* With this file it´s possible, to delete older pm´s from the database */
/* Copyright: (c) 2002 Jochem Schausten                                 */
/* http://www.phpnuke-module.de                                         */
/*                                                                      */
/* This program is free software. You can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 2 of the License.       */
/************************************************************************/

if (!eregi("modules.php", $PHP_SELF)) {
    die ("You can't access this file directly...");
}

$index = 1;
require_once("mainfile.php");
$module_name = basename(dirname(__FILE__));
//get_lang($module_name);

define ('_PMDELETEDATE', 'Datum, vor dem gelöscht werden soll:<br>Format: YYYY-MM-DD');



function PMGetDeleteDate() {

   global $module_name, $admin;

   if (is_admin($admin)) :

      include ("header.php");
      OpenTable();
      echo "<form method=\"post\" action=\"modules.php?mop=modload&name=$module_name&file=admindelete\">\n"
         ."<b>"._PMDELETEDATE."</b> <input type=\"text\" size=4 maxlength=4 name=\"deleteyear\"> <input type=\"text\" size=2 maxlength=2 name=\"deletemonth\"> <input type=\"text\" size=2 maxlength=2 name=\"deleteday\">\n"
         ."<input type=\"hidden\" name=\"action\" value=\"pmdelete\">\n"
         ."<input type=\"submit\" value=\""._SUBMIT."\"></form>\n";

      CloseTable();
      include ("footer.php");


   else :

      die ("YOU can't access this file...");

   endif;

}


function PMDelete ($HTTP_POST_VARS) {

   global $prefix, $dbi, $admin;

   if (is_admin($admin)) :
      while (list($key, $val) = each($HTTP_POST_VARS)) $$key = $val;
      $deletetime = "'$deleteyear-$deletemonth-$deleteday 00:00'";
      include ("header.php");
      OpenTable();

      if (!sql_query ("DELETE FROM ".$prefix."_priv_msgs WHERE msg_time < $deletetime", $dbi)) {

         echo mysql_error();

      } else {

         $rows = mysql_affected_rows();
         echo $rows." messages deleted<br>";

      }
      CloseTable();
      include ("footer.php");

   else :

      die ("YOU can't access this file...");

   endif;

}

switch ($action) {

   case "pmdelete":
   PMDelete($HTTP_POST_VARS);
   break;

   default:
   PMGetDeleteDate();
   break;

}


?>

DarkBoy

HI
 schnell antwort :)
  es geht  aber wie gott es will hat es in meiner  testumgebeung  auch einiges mehr gelöscht :))
 
 Also  Joschau lass  uns  noch mal  testen  vor dem nächsten  code  :)  ich kann den genauen Fehler net nachvollziehen auf der schnelle ,     dein Ziel wird jedenfaslls   sauber  erfüllt :)  nur leider mit nicht  nachvollizioehbaren folgen :D
  OK   morgen mehr :)

Joschau

Von ausgetestet war auch nie die Rede :D

aber mal im Ernst:

Bei mir löscht er auf die Minute genau alle PM vor dem Löschdatum, alle danach läßt er in Ruhe (auch die PM, die eventuell an dem Löschdatum um 00:00 Uhr gepostet wurde.

Ich hab allerdings nicht getestet, was er mit inkorrekten Daten macht, kann mir aber eigentlich nicht vorstellen, dass dies zu unvorhersehbaren Problemen führt. Beschreib doch bitte mal annähernd, was er bei Dir mehr gelöscht hat.

Greetz

Jochem

DarkBoy

Hi
 wenn ich da mal so genau wüsste :)  aber nach einem  KLickversuch und wieder einspielen  passierte nichts :) also nehme ich an das  es an einem  Fehler in meinem Modul war :)   den jetzt geht es  anscheinend ohne  probleme :)
ich nehme das einfach momentan  als   NUKE das unbekannte wesen hin :)  da ich keinen Ansatz habe  warum ddas passiert ist

Seth

Hi, also erstmal Danke!  :thumbup:
Aber sobald ich auf den Submit-Button klicke, erscheint "Sorry, such file doesn't exist..."!

Joschau

Hast Du es auch in das Verzeichnis von den Private_Messages kopiert?

Seth

Puh, Sorry!
Ja ich hab sie in das richtige Verzeichnis kopiert, hab sie jetzt nochmal auf den Server geladen und jetzt geht's!
Danke nochmal!  :thumbup:

Havard

yo, optimal!!!

ES FUNZT.

Danke

[Editiert am 23/6/2002 von Havard]

LordNoire

Wäre es nicht möglich dieses Script zu automatisieren?
So dass es (z.B bei AdminLogIn) automatisch ALLE PM's löscht die älter sind als 30 Tage???

Wär das nicht ein Ansatz, der nicht so aufwendig ist?

Joschau

@ Lord:

Das sollte wohl kein problem sein...wenn ich den Admin-bereich für das PM einrichte, werde ich Deine Anmerkung berücksichtigen.