Seite 1 von 2

Gelöschte Beiträge eines Users wieder herstellen?

Verfasst: 24.11.2004 22:48
von Holger2
Hallo zusammen,
ich habe seit einigen Monaten ein 2.0.4 Forum laufen und jetzt ist folgendes passiert:

Ein User hat aus Frust seine fast 100 Beiträge über Nacht gelöscht.
D.h. er hat über die [Edit]-Funktion alle Beitragstexte gelöscht und überall "xyz" reingeschrieben.
Das ist jetzt natürlich ärgerlich, da das Forum jetzt ein bischen aussieht wie ein Schweizer Käse und einige Beiträge in der Luft hängen, da man den Ursprungsbeitrag nicht mehr lesen kann.
Dies möchte ich für die Zukunft verhindern und habe einen MOD gefunden (Edit_Delete_only_last_post), der es dem User nur erlaubt seinen zuletzt geschriebenen Beitrag zu editieren. Ebenso möchte ich die Beiträge dieses einen Users wieder herstellen.

Nun zu meinem Problem:
Ich mache wöchentlich ein vollständiges Struktur- und Daten-Backup, sodass ich die Beiträge dieses Users alle noch in der Sicherung habe.
Da ich von der Löschaktion erst nach einigen Tagen erfahren habe, sind eine ganze Reihe von Beiträgen nach dem Zeitpunkt der Sicherung hinzu gekommen. Diese Beiträge würde ich verlieren, wenn ich die Sicherung komplett zurückspiele und das Board somit auf einen alten Stand zurücksetze. Das möchte ich verhindern.

Meine Frage:
Wie kann ich mit Hilfe der Backup SQL-Datei nur die Beiträge eines Users in die Datenbank zurück schreiben?

Vielen Dank für Eure Unterstützung!
Holger2

Verfasst: 25.11.2004 00:02
von mr.no-name
Ich hoffe, dass du dich zumindest etwas mit phpMyAdmin auskennst?

Denn das müsste eigentlich folgendermaßen gehen:
Du müsstest ein Backup der Datenbank über phpMyAdmin einsehen (kannst du ja in eine leere Datenbank oder eben lokal am eigenen PC einspielen)
Schaue die User-ID des betroffenen Users in der Tabelle "phpbb_users" nach
Gehe in die Tabelle "phpbb_posts" und gebe folgendes als SQL-Abfrage ein: SELECT * FROM `phpbb_posts` WHERE `poster_id` = x
(x ist hier die User-ID des Users)
Jetzt werden dir die Post-IDs aller Posts dieses Users angezeigt.
In der Tabelle "phpbb_posts_text" kannst du dir dann zu den jeweiligen Posts die Texte raussuchen und in deine aktuelle Datenbank übertragen...

Dies ist natürlich sehr kompliziert und aufwändig, aber so würde es gehen ;)
Vielleicht weiß ja jemand, wie man das entweder automatisieren kann, oder einen einfacheren Weg.
Ansonsten viel Spaß :-?

Verfasst: 25.11.2004 00:15
von Blutgerinsel
Och gewiss kann man sich seine eigenen Workarounds bauen ist aber in Anbetracht des Aufwandes in keinem Verhältnis....

Was interessieren mich User? Ich würde einfach alle Einträge kicken die der Typ jemals geschrieben hat dann vielleicht den DB Maintenance Mod starten um die Inkonsesdenz der DB zu bereinigen könnte möglicherweise Last_post_id u. Ä. mit von betroffen sein.....

Verfasst: 25.11.2004 15:37
von MrMind
Naja es gibt nun mal unteranderem Supportforen, bei denen ein fehlerhafter Beitrag starke auswirkungen haben kann. @Blutgerinsel

@Topic

So ähnlich wie mr.no-name würde ich das auch machen, blos mit einem unterschied:

Erstelle in deiner jetzigen Datenbank zwei zusätzliche Tabellen:

phpbb_posts2 und phpbb_posts_text2

(glaube so sollte das aufgebaut sein, komme grad nicht in mein phpMyAdmin rein, sorry)

Danach fütterst du diese 2 Tabellen die identisch aussehen sollten, wie die orginalen blos mit einer 2 am Ende, mit dem alten Inhalte (sprich öffne deine SQL-Datei in einem Text-Editor und suche dir die Einträge heraus und passe die Tabellennamen an, so das es in die Temporäre Tabelle gesichert wird und nicht in der Orginalen).

Danach suchst du dir die ID des Users heraus.

Und nun machste folgende SQL-Anweisung:

Code: Alles auswählen

UPDATE phpbb_posts_text p SET p.posts_text = p2_posts_text LEFT JOIN phpbb_posts_text2 p2 ON p.user_id = p2.user_id WHERE user_id = X
Ich habe dies nicht getestet. Evtl. mal lokal testen. Weiß nämlich jetzt net aus dem FF ob die LEFT JOIN auch in einer UPDATE Anweisung klappt.

Mfg
MrMind

Verfasst: 25.11.2004 19:18
von Blutgerinsel
dein SQL Statment kann net gehen @Mr Mind :wink:

Verfasst: 25.11.2004 21:29
von Matzelein
Gibt es einen Mod, zur Vorbeugung eines solchen Falles, der es einem erlaubt, einen Beitrag nur x Stunden zu editieren?

Verfasst: 26.11.2004 09:32
von MrMind
Blutgerinsel hat geschrieben:dein SQL Statment kann net gehen @Mr Mind :wink:
Dann sag doch auch warum net. Es war ja nur ne Idee ;)
Matzelein hat geschrieben:Gibt es einen Mod, zur Vorbeugung eines solchen Falles, der es einem erlaubt, einen Beitrag nur x Stunden zu editieren?
Musste mal suchen, aber wenn net => Es ist net schwer.

Musst lediglich beim posting.php sowas in der Art abfragen:

Code: Alles auswählen

if(($HTTP_GET_VARS['posttime'] || $HTTP_GET_VARS['lastedittime']) >= (time()-3600) && $HTTP_GET_VARS['mode'] == 'editpost')
message_die('Du kannst Beiträge nur innerhalb von einer Stunde editieren');
Also sowas in der Art, denke aber mal das du die posttime und lastedittime erst noch aus der DB auslesen musst.

Mfg
MrMind

Verfasst: 26.11.2004 11:36
von Blutgerinsel
MrMind hat geschrieben:Dann sag doch auch warum net. Es war ja nur ne Idee ;)
Ganz einfach weil man Table Verknüpfungen nicht mit Datenmanipulationen verknüpfen kann....
MrMind hat geschrieben: Also sowas in der Art, denke aber mal das du die posttime und lastedittime erst noch aus der DB auslesen musst.
Aber dann sollte man auch das gleich über MySQL erledigen....Schließlich gibt es Data_ADD, Date_SUB und INTERVAL nicht umsonst :wink:

Verfasst: 26.11.2004 12:39
von Matzelein
MrMind hat geschrieben:
Matzelein hat geschrieben:Gibt es einen Mod, zur Vorbeugung eines solchen Falles, der es einem erlaubt, einen Beitrag nur x Stunden zu editieren?
Musste mal suchen, aber wenn net => Es ist net schwer.

Musst lediglich beim posting.php sowas in der Art abfragen:

Code: Alles auswählen

if(($HTTP_GET_VARS['posttime'] || $HTTP_GET_VARS['lastedittime']) >= (time()-3600) && $HTTP_GET_VARS['mode'] == 'editpost')
message_die('Du kannst Beiträge nur innerhalb von einer Stunde editieren');
Also sowas in der Art, denke aber mal das du die posttime und lastedittime erst noch aus der DB auslesen musst.
Danke vielmals, nur klappt das irgendwie noch nicht so ganz, da ich nicht weiß, wo genau ich das einfügen muss. :roll:

Verfasst: 28.11.2004 10:14
von Holger2
Vielen Dank an alle,
die sich meinem Problem angenommen haben!
Ich werde mal einen der Adventssonntage nutzen, um mit Euren Tipps weiter zu kommen.

@Matzelein
Den MOD, mit dem ich solche Löschaktionen zukünftig verhindern möchte findet man hier:
http://www.phpbb.de/moddb/mod.php?id=159

Viele Grüße
Holger2