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
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.
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 ...
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...
Ups, Sorry hab vergessen mich anzumelden. :puzz
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]
ehrlich gesagt funzt dein quickie auch gar nicht!!!
kannst du es nochmal neu schicken??
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;
}
?>
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 :)
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
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
Hi, also erstmal Danke! :thumbup:
Aber sobald ich auf den Submit-Button klicke, erscheint "Sorry, such file doesn't exist..."!
Hast Du es auch in das Verzeichnis von den Private_Messages kopiert?
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:
yo, optimal!!!
ES FUNZT.
Danke
[Editiert am 23/6/2002 von Havard]
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?
@ Lord:
Das sollte wohl kein problem sein...wenn ich den Admin-bereich für das PM einrichte, werde ich Deine Anmerkung berücksichtigen.