Seite 2 von 2
Verfasst: 26.10.2006 17:23
von der-rene
Hallo
@ Miriam,
nun habe auch 2 Tage getestet du hast recht durch den cronjob wird jedes mal der kompletthe thread gelöscht und nächsten tag ein anderer der die selbe thread id hat.
Mhhm wie mache ich das nun gescheit?
LG René
Verfasst: 26.10.2006 17:48
von Miriam
IOch habe noch einmal auf diesem Forum geschaut. Es scheint entgegen der Aussage dort doch nicht so ganz automaisch gelöscht zu werden. Ein Anhaltspunkt dafür könnte sein, dass der Thread eine neue Erstellzeit hat und jetzt von einem anderen Administrator eröffnet wurde.
Welche "Lösung" hast Du denn nun gewählt, Rene?
Verfasst: 26.10.2006 18:25
von der-rene
Also die die letzen 2 Sondermüll Threads habe ich (eigentlich die Mods) dann immer von Hand neu erstellt.
Weil ja der andere weg war. Da unsere "Textvorlage" weg war haben wir ein anderen genommen und dann nachinein den ersten Beitrag (von Katrin) umgeändert als sie meine Textvorlage wieder hatte.
Hatte dein Code von Seite eins benutzt.
LG René
-----
Code: Alles auswählen
?php
// hier den relativen Pfad zur config.php des Forums eintragen
include ("./phpBB2/config.php");
// Parameter für Topic_ID ANPASSEN!!
$topic_to_clean = 22;
// Parameter für minimale Postinganzahl im Topic.
// Es bleibt nur das Starterposting erhalten.
$j = 0;
/*** DO NOT CHANGE CODE BEYOND THIS LINE ***/
$db = @MYSQL_CONNECT($dbhost,$dbuser,$dbpasswd)
or die ("Konnte keine Verbindung zur Datenbank herstellen");
$db_check = @MYSQL_SELECT_DB($dbname);
$posts_to_kill = '';
$sql = "SELECT post_id
FROM `" . $table_prefix . "posts`
WHERE `topic_id` = '" . $topic_to_clean . "'
ORDER BY post_id ASC";
if ( !($result = mysql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Konnte die Postdaten nicht auslesen', '', __LINE__, __FILE__, $sql);
}
$kill_post = array();
while ( $row = mysql_fetch_array($result) ) {
$kill_post[] = $row['post_id'];
}
array_shift($kill_post);
if (count($kill_post) > $j) {
for ($i=0; $i<(count($kill_post)-$j); $i++) {
$posts_to_kill .= (($i+1)<(count($kill_post)-$j)) ? ($kill_post[$i] . ",") : $kill_post[$i];
}
$sql = array();
$sql[] = "DELETE FROM `" . $table_prefix . "posts_text`
WHERE `post_id` IN ($posts_to_kill)";
$sql[] = "DELETE FROM `" . $table_prefix . "posts`
WHERE `post_id` IN ($posts_to_kill)";
for( $i = 0; $i < count($sql); $i++ ) {
if( !$result = mysql_query ($sql[$i]) ) {
$error = mysql_error();
}
}
}
$db_close = @MYSQL_CLOSE($db);
?>
Verfasst: 26.10.2006 19:46
von Miriam
Okay, das sollte jetzt aber funzen....
Finde in meinem Code:
Code: Alles auswählen
$sql[] = "DELETE FROM `" . $table_prefix . "posts`
WHERE `post_id` IN ($posts_to_kill)";
danach füge ein:
Code: Alles auswählen
$sql[] = "UPDATE `" . $table_prefix . "topics`
SET `topic_last_post_id` = `topic_first_post_id`,
`topic_views` = 0,
`topic_replies` = 0,
`topic_vote` = 0,
`topic_moved_id` = 0
WHERE `topic_id` = " . $topic_to_clean;
Also bei mir geht es jetzt... Und das Posting ist nicht weg, es steht immer noch in der DB. Aber es wird nicht angezeigt....
Es sollte keine Probleme machen. Falls doch jag' doch mal den
DB Maintenance Mod drüber.
Verfasst: 26.10.2006 19:59
von der-rene
so ist das jetzt richtig?
#!/usr/bin/php4 -q
<?php
// hier den relativen Pfad zur config.php des Forums eintragen
include ("/home/www-data/heiratsfreu/phpBB2/config.php");
// Parameter für Topic_ID ANPASSEN!!
$topic_to_clean = 22691;
// Parameter für minimale Postinganzahl im Topic.
// Es bleibt nur das Starterposting erhalten.
$j = 0;
/*** DO NOT CHANGE CODE BEYOND THIS LINE ***/
$db = @MYSQL_CONNECT($dbhost,$dbuser,$dbpasswd)
or die ("Konnte keine Verbindung zur Datenbank herstellen");
$db_check = @MYSQL_SELECT_DB($dbname);
$posts_to_kill = '';
$sql = "SELECT post_id
FROM `" . $table_prefix . "posts`
WHERE `topic_id` = '" . $topic_to_clean . "'
ORDER BY post_id ASC";
if ( !($result = mysql_query($sql)) ) {
message_die(GENERAL_ERROR, 'Konnte die Postdaten nicht auslesen', '', __LINE__, __FILE__, $sql);
}
$kill_post = array();
while ( $row = mysql_fetch_array($result) ) {
$kill_post[] = $row['post_id'];
}
array_shift($kill_post);
if (count($kill_post) > $j) {
for ($i=0; $i<(count($kill_post)-$j); $i++) {
$posts_to_kill .= (($i+1)<(count($kill_post)-$j)) ? ($kill_post[$i] . ",") : $kill_post[$i];
}
$sql = array();
$sql[] = "DELETE FROM `" . $table_prefix . "posts_text`
WHERE `post_id` IN ($posts_to_kill)";
$sql[] = "UPDATE `" . $table_prefix . "topics`
SET `topic_last_post_id` = `topic_first_post_id`,
`topic_views` = 0,
`topic_replies` = 0,
`topic_vote` = 0,
`topic_moved_id` = 0
WHERE `topic_id` = " . $topic_to_clean;
$sql[] = "DELETE FROM `" . $table_prefix . "posts`
WHERE `post_id` IN ($posts_to_kill)";
for( $i = 0; $i < count($sql); $i++ ) {
if( !$result = mysql_query ($sql[$i]) ) {
$error = mysql_error();
}
}
}
$db_close = @MYSQL_CLOSE($db);
?>
Das was lila ist habe ich eine frage , wieso ist das doppelt? ist doch doppelt odeR?
lg und danke rené
Verfasst: 26.10.2006 20:17
von Miriam
Lies es langsam und du siehst den Unterschied... Und es sollte hinter das 2te lila gefärbte.

Aber so sollte es auch gehen.
Verfasst: 26.10.2006 20:24
von der-rene
oh mann post und post_text hätte ich lesen sollen
so nun muss ich warten bis morgen der cronjob anläuft leider habe ich ein paar logging probleme das heist eine /var/log/cron etc finde ich leider ned und in der /var/log/message finde ich nur
Oct 26 14:43:37 heiratsfreu -- MARK --
und in der syslog alles mögliche
ich bin mal am suchen und lernen
Verfasst: 26.10.2006 20:34
von Miriam
Du kannst doch die Datei manuell ausführen....
Verfasst: 26.10.2006 20:48
von der-rene
dann ist aber doch der thread weg oder?
muss ich halt backup von der db machen denke ich
also:
heiratsfreu:/home/admin# /etc/cron.daily/killsondermuell
ergebnis:
http://heirats-freu.de/phpBB2/viewtopic.php?t=22734
1 startposting ... so wie ich es haben wollte:-)
danke dafür!
Verfasst: 26.10.2006 21:04
von Miriam
Na also....