Gelöschte Beiträge eines Users wieder herstellen?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Holger2
Mitglied
Beiträge: 18
Registriert: 30.05.2003 09:49

Gelöschte Beiträge eines Users wieder herstellen?

Beitrag 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
mr.no-name
Mitglied
Beiträge: 1883
Registriert: 20.10.2003 12:07
Wohnort: Hannover

Beitrag 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ß :-?
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag 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.....
Benutzeravatar
MrMind
Mitglied
Beiträge: 464
Registriert: 29.11.2003 17:14
Wohnort: Darmstadt/Odw
Kontaktdaten:

Beitrag 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
Selbst ist der Coder
Coder unter Linux
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

dein SQL Statment kann net gehen @Mr Mind :wink:
Matzelein
Mitglied
Beiträge: 925
Registriert: 17.04.2004 11:14
Kontaktdaten:

Beitrag von Matzelein »

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!
Benutzeravatar
MrMind
Mitglied
Beiträge: 464
Registriert: 29.11.2003 17:14
Wohnort: Darmstadt/Odw
Kontaktdaten:

Beitrag 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
Selbst ist der Coder
Coder unter Linux
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag 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:
Matzelein
Mitglied
Beiträge: 925
Registriert: 17.04.2004 11:14
Kontaktdaten:

Beitrag 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:
http://pollunity.com - Pollerize in between!
Holger2
Mitglied
Beiträge: 18
Registriert: 30.05.2003 09:49

Beitrag 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
Antworten

Zurück zu „Coding & Technik“