Gelöschte Beiträge eines Users wieder herstellen?
Gelöschte Beiträge eines Users wieder herstellen?
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
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
-
- Mitglied
- Beiträge: 1883
- Registriert: 20.10.2003 12:07
- Wohnort: Hannover
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ß
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ß

- Blutgerinsel
- Mitglied
- Beiträge: 1801
- Registriert: 19.07.2004 18:53
- Wohnort: Landkreis Ulm
- Kontaktdaten:
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.....
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.....
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:
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
@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
Mfg
MrMind
Selbst ist der Coder
Coder unter Linux
Coder unter Linux
- Blutgerinsel
- Mitglied
- Beiträge: 1801
- Registriert: 19.07.2004 18:53
- Wohnort: Landkreis Ulm
- Kontaktdaten:
Gibt es einen Mod, zur Vorbeugung eines solchen Falles, der es einem erlaubt, einen Beitrag nur x Stunden zu editieren?
http://pollunity.com - Pollerize in between!
Dann sag doch auch warum net. Es war ja nur ne IdeeBlutgerinsel hat geschrieben:dein SQL Statment kann net gehen @Mr Mind

Musste mal suchen, aber wenn net => Es ist net schwer.Matzelein hat geschrieben:Gibt es einen Mod, zur Vorbeugung eines solchen Falles, der es einem erlaubt, einen Beitrag nur x Stunden zu editieren?
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');
Mfg
MrMind
Selbst ist der Coder
Coder unter Linux
Coder unter Linux
- Blutgerinsel
- Mitglied
- Beiträge: 1801
- Registriert: 19.07.2004 18:53
- Wohnort: Landkreis Ulm
- Kontaktdaten:
Ganz einfach weil man Table Verknüpfungen nicht mit Datenmanipulationen verknüpfen kann....MrMind hat geschrieben:Dann sag doch auch warum net. Es war ja nur ne Idee![]()
Aber dann sollte man auch das gleich über MySQL erledigen....Schließlich gibt es Data_ADD, Date_SUB und INTERVAL nicht umsonstMrMind hat geschrieben: 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.MrMind hat geschrieben:Musste mal suchen, aber wenn net => Es ist net schwer.Matzelein hat geschrieben:Gibt es einen Mod, zur Vorbeugung eines solchen Falles, der es einem erlaubt, einen Beitrag nur x Stunden zu editieren?
Musst lediglich beim posting.php sowas in der Art abfragen:
Also sowas in der Art, denke aber mal das du die posttime und lastedittime erst noch aus der DB auslesen musst.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');

http://pollunity.com - Pollerize in between!
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
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