Seite 1 von 2

Benutzer löschen per sql-Befehl

Verfasst: 25.12.2005 12:36
von bluejay
Hallo Leute,

ich habe eine Frage:

Ist es möglich, in einem phpbb-Forum Benutzer per sql-Befehl aus der Datenbank zu löschen, oder gibt es dann Probleme, zum Beispiel mit anderen Daten in der Datenbank, die mit dem Benutzernamen verbunden sind, z.B. der Emailadresse, die dann nicht mehr neu verwendet werden kann?

Ich möchte gerade mein Forum umstrukturieren und alle Benutzer löschen, die nicht einer bestimmten Benutzergruppe angehören (die in der Gruppe sind die einzigen, die das Forum im Moment noch aktiv nutzen, da ich irgendwann alles außer dem "privaten" Teil des Forums geschlossen habe).

Anstatt nun über 900 Benutzer per Hand zu löschen habe ich mich gefragt, ob man das nicht auch per sql-Befehl kann. Leider kenne ich mich mit sql nicht allzu gut aus und habe Angst, was kaputtzumachen.

Es geht wie gesagt darum, alle Benutzer zu löschen, die nicht einer bestimmten Benutzergruppe angehören. Kann mir jemand den sql-Befehl dafür nennen?

Vielleicht gibt es ja auch einen MOD, mit dem man so was machen kann, wenn jemand einen Hinweis hat, wäre ich dankbar. Habe aber noch nichts entsprechendes gefunden.

Kann mir jemand weiterhelfen?

Danke, auch für dieses tolle Forum und Frohe Weihnachten!
:grin:

Matthias

Verfasst: 25.12.2005 13:28
von S2B
Mit einem Query geht das nicht, du könntest das allerdings von einem php-Script erledigen lassen...
In der groupcp.php findest du ein Query, um alle Benutzer einer Gruppe auflisten zu lassen. Das musst du ein bisschen abändern, sodass es alle Benutzer anzeigt, die nicht zu dieser Gruppe gehören. Dann musst du nur noch auf jeden Benutzer die Lösch-Query's aus der admin/admin_users.php anwenden.

ursprünglicher Code:

Code: Alles auswählen

	//
	// Get user information for this group
	//
	$sql = "SELECT u.username, u.user_id, u.user_viewemail, u.user_posts, u.user_regdate, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_msnm, ug.user_pending 
		FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug
		WHERE ug.group_id = $group_id
			AND u.user_id = ug.user_id
			AND ug.user_pending = 0 
			AND ug.user_id <> " . $group_moderator['user_id'] . " 
		ORDER BY u.username"; 
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Error getting user list for group', '', __LINE__, __FILE__, $sql);
	}

	$group_members = $db->sql_fetchrowset($result); 
	$members_count = count($group_members);
	$db->sql_freeresult($result);
abgeändert könnte das dann ungefähr so aussehen:

Code: Alles auswählen

	$group_id = <deineGruppenID>;
	//
	// Get user information for this group
	//
	$sql = "SELECT u.user_id 
		FROM " . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug
		WHERE ug.group_id = $group_id
			AND u.user_id <> ug.user_id
			AND ug.user_pending = 0"; 
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Error getting user list for group', '', __LINE__, __FILE__, $sql);
	}

	while ($row = $db->sql_fetchrow($result));
	{
		<deinLöschbefehl>
	}
	$db->sql_freeresult($result);
An die Stelle von <deineGruppenID> kommt die ID der Gruppe, deren Mitglieder nicht gelöscht werden sollen. An die Stelle von <deinLöschbefehl> kommt der Befehl zum Löschen des Users (siehe admin/admin_users.php).

Hinweis: Der Code ist absolut ungetestet, deswegen solltest du ihn zuerst an einem lokalen Forum o.Ä. testen. :wink:

Edit: Sorry, ich hab grad gemerkt, dass das gar nicht funktioniert. :oops: Ich überlege mir was anderes... :wink:

Verfasst: 26.12.2005 13:16
von S2B
Und nächster Versuch (dieses Mal sogar getestet): http://www.s2b-project.de/files/user_delete.php.txt :wink:

Verfasst: 26.12.2005 17:20
von bluejay
Dank Dir!

Das werde ich gleich mal testen!

Liebe Grüße

Matthias

Verfasst: 28.12.2005 09:37
von bluejay
Hallo!

Bin doch erst jetzt (nach Weihnachten) dazu gekommen, mir das näher anzuschauen.

Wie genau kann ich das nun anwenden? (Sorry, wenn die Frage blöd scheint, bin noch Neuling mit php.)

Kann ich die php-Datei (nach Entfernen der .txt-Endung) auf meinen Webspace hochladen, und sie dann über den Internet-Explorer aufrufen, nachdem ich mich als Admin in meinem Forum eingeloggt habe?

Oder wie macht man so etwas?

Viele Grüße und vielen Dank!

Verfasst: 28.12.2005 10:45
von S2B
Genau so machst du es. Vorher musst du nur noch die Variable $group_id in der Datei anpassen. In ihr muss die Gruppe stehen, deren Mitglieder nicht gelöscht werden sollen. :wink:

Verfasst: 28.12.2005 11:00
von mad-manne
Hi .. ohne dass ich mir das angesehen hätte :oops:
Du hast schon daran gedacht, dass auch die Zuordnungen zu den "persönlichen Gruppen" in der phpbb_user_group-Tabelle bereinigt werden sollten :roll:

Nur so als Erinnerung ...
Manne.

Verfasst: 28.12.2005 11:09
von S2B
S2B hat geschrieben:[...] Dann musst du nur noch auf jeden Benutzer die Lösch-Query's aus der admin/admin_users.php anwenden. [...]
no comment. :roll:

Verfasst: 28.12.2005 12:09
von mad-manne
Hey .. das war nicht böse gemeint! Und ich hatte ja extra darauf hingewiesen, dass ich mir die konkrete Lösung nicht angesehen hatte.

Mir fehlte nur beim Überfliegen der Hinweis auf dieses "Problem" deshalb mein nett gemeinter Tipp. Sorry, wenn das falsch rüberkam!

Gruss,
Manne.

Verfasst: 28.12.2005 15:41
von S2B
mad-manne hat geschrieben:Sorry, wenn das falsch rüberkam!
Es kam absolut gar nicht falsch rüber. Nur fände ich es ganz gut, wenn du vorher meinen Beitrag durchlesen würdest, denn dort wurde ja darauf hingewiesen (dass du dir die Lösung anschaust, verlangt ja niemand :wink: ).
Abgesehen davon ist das Benutzergruppen-"Problem" bei weitem nicht das einzige, was zusätzlich beachtet werden muss, denn sonst wäre das Löschen eines Benutzers nur mit einfachen Queries kein Problem. :wink: