Seite 1 von 1

Alle User auf einmal löschen, Beiträge erhalten

Verfasst: 28.11.2004 19:39
von galileo
Hallo,

ich soll wegen eines Eigentümerwechsels des Forums alle registrierten User löschen.
Deren Beiträge allerdings sollen komplett erhalten bleiben.
Nun gibt es ja die Möglichkeit, alle User einzeln übers Admin Panel zu löschen, richtig?
Gibt es auch eine Möglichkeit, alle User auf einmal zu löschen und trotzdem alle Beiträge zu erhalten?
Wäre toll, wenn ihr einen Weg wüßtest.

Danke im Voraus.

Viele Grüße
Galileo

Verfasst: 28.11.2004 20:11
von marino
es gibt die möglichkeit ALLE user mit einem schlag zulöschen
allerdings wird bei diesem vorgang auch der "anonymus" also der gast gelöscht was sich weniger gut auswirken dürfte
deswegen währe es von vorteil wenn du ein backup deiner datenbank hast .... in dieser musst du die einträge der tabelle phpbb_users suchen ...
ganz speziell brauchst du den der in etwa so aussieht

Code: Alles auswählen

INSERT INTO phpbb_users VALUES ('-1','0','Anonymous','','xxxxxxxxxx','38','185','xxxxxxx','xxxxxx','0','3'
,'0.00',NULL,'','','0','0','0',NULL,'0','0','0','0','1','1','1','0','1','0','1','0',NULL,
'','0','','','','',NULL,'',NULL,'','','','','','','','xxxxxxx','0','1','1','1','2','2','1','1','1',
'1','1','1','1','1','1','0','999999','0','0','0','xxxxxx','617558','3010','18047',
'0','7','1','5','1','1','0','xxxxxx','0','0',NULL,'0','0','','xxxxxxx');
den suchst du ... erstmal und kopierst ihn per strg+c

danach gehst du in deine datenbank (phpmyadmin)und LEERST die tabelle phpbb_users NICHT löschen sondern nur LEEREN .... als nächstes gehst in deiner Datenbank (immer noch im phpmyadmin) auf SQL und trägst dort den befehl ein den du dir kopiert hast.. damit definierst du gleich den gäste"status" neu

wenn das alles geklappt hat dürfte es in deinem board keine reg.user nehr geben .. bei allen beiträgen müsste "Gast" als verfasser stehen .
der neue "besitzer" des forums meldet sich regulär an (GANZ WICHTIG die registrierung MUSS auf freischaltung per mail oder "ohne aktivierung " stehen .. da ja keine aktivierung des accounts durch einen admin möglich währe...
nach der registrierung muss dann der beue besitzer sein user_level in der datenbank .. (wieder tabelle phpbb_users ) ändern ... und zwar von 0 (gäste und reg.user ) auf 1 .. solange er das nicht tut bekommt er KEINEN zugriff zum acp ...


edit : stell bevor du das alles machst sicherheitshalber mal alle rechte für alle foren auf "ALLE" ein so das dort auch gäste posten könnten ... hab die erfahrung bei userlöschung gemacht das auch in bereichen in denen nur reg.user posten können zwar nach der löschung von usern zwar "Gast" als author angegeben wird .. aber man weiss ja nie was so alles passiert *g


noch ein hinweis : da auch geschriebene texte dem urheberrecht unterliegen solltest du erstmal bei den reg.usern abklären ob der neue besitzer die texte im forum weiter verwenden darf , auch wenn der verfasser selber nicht mehr in dem board angemeldet sein sollte ..

Edit: Zeilenumbrüche hinzugefügt (Schumi)

Verfasst: 28.11.2004 20:25
von galileo
Danke für die Hilfe.

Werde das ersteinmal testweise nachvollziehen.
Hatte das auch schon einmal gemacht; natürlich aber nicht den Anonymus gesichert.

Verfasst: 28.11.2004 22:23
von marino
tja wenn du den auch löscht geht nix weil es dann ja niemanden mehr gibt der das forum sehen darf ...

Verfasst: 29.11.2004 13:37
von galileo
Jo. Wenigstens war ich so schlau und habe ein Testforum eingerichtet und nicht in den heißen Daten rumgepfuscht.

Verfasst: 18.12.2004 16:05
von galileo
specially @marino

muss die Aufgabe nun erst durchführen und habe es entsprechend versucht. Nun ist es leider so, dass, nachdem ich "Anonymus" wieder eingefügt habe, nur noch ein einziger Beitrag zu sehen ist.
Nicht jedoch die restlichen Einträge.

Genauer gesagt. In der Kategorienübersicht tauchen die hier 11 Testbeiträge beim entsprechenden Testforum auf. Gehe ich jedoch ins Forum, sehe ich eben nur noch eines; mit Antworten = 0.

Hast du hierzu irgendwelche Ideen? Oder jemand anderes?
Brauche natürlich alle anderen Beiträge auch wieder. :(

Verfasst: 19.12.2004 13:10
von QCO
IMHO ist das vorgeschlagene Verfahren deutlich zu einfach gefasst; es reicht nicht, wenn du die Nutzer aus der DB löschst, du musst gleichzeitig auch bei jedem einzelnen Post den Verfasser ändern, damit die Struktur des phpbb erhalten bleibt. Denn bei jedem Post wird mittels einer poster_id der User referenziert, von dem der Post stammt.

Das ganze Verfahren kannst du über ein kleines phpbb-Skript laufen lassen.
Nur eine erste Idee. Ohne langes Nachdenken, austesten oder Garantie. Unbedingt vorher Backup machen...

Code: Alles auswählen

<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

$sql = "SELECT user_id, username FROM " . USER_TABLE . " WHERE user_id<>" . ANONYMOUS;
if ( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Konnte User nicht auslesen', '', __LINE__, __FILE__, $sql);
}

while( $user = $db->sql_fetchrow($result) )
{
	$user_id = $user['user_id'];
	$username = phpbb_clean_username($user['username']);
	$sql = "UPDATE " . POSTS_TABLE . " SET poster_id=" . ANONYMOUS . ", post_username='$username' WHERE poster_id=$user_id";
    if ( !$db->sql_query($sql) )
    {
        message_die(GENERAL_ERROR, 'Konnte Post nicht ändern. Wahrscheinlich ist der Autor dieses Skripts zu blöd...', '', __LINE__, __FILE__, $sql);
    }
    echo "Posts von <b>$username</b> geändert; ";


	$sql = "DELETE FROM " . USERS_TABLE . " WHERE user_id=$user_id";
    if ( !$db->sql_query($sql) )
    {
        message_die(GENERAL_ERROR, 'Konnte User nicht löschen. Wahrscheinlich ist der Autor dieses Skripts zu blöd...', '', __LINE__, __FILE__, $sql);
    }
    echo "<b>$username</b> wurde gelöscht.</br>";
}
echo "</br></br>Fertig.";
?>

Verfasst: 27.12.2004 21:59
von galileo
OK. Danke dir. Werde es testen.

Verfasst: 27.12.2004 22:05
von andreasOymann
Den admin solltest du vielleicht ebenfalls erhalten ;)

ersetze

Code: Alles auswählen

$sql = "SELECT user_id, username FROM " . USER_TABLE . " WHERE user_id<>" . ANONYMOUS; 
mit

Code: Alles auswählen

$sql = "SELECT user_id, username FROM " . USER_TABLE . " WHERE user_id > '2'";
Abschließend solltest du den DB-Maintenance-Mod über die DB laufen lassen, damit auch die topic-starter entsprechend angepasst werden.

A.