mysql Befehl zum user löschen richtig?

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.
Antworten
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

mysql Befehl zum user löschen richtig?

Beitrag von Xwitz »

Hallo, ich habe auch mal wieder eine Frage. Folgender Befehl, für seit 7 Tagen nicht aktivierte user, ist doch richtig oder? Ich meine mit select funktioniert er ganz offensichtlich wie gewünscht aber bevor ich das select in ein delete abändere wollte ich vorsichtshalber mal nachfragen.

Code: Alles auswählen

$killdate = time() - 604800; //timestamp von vor 7 Tagen
$loser = mysql_query("SELECT user_id, user_active, user_regdate FROM phpbb_users WHERE user_active = 0 AND user_id != -1 AND user_regdate < ".$killdate);
Ich hatte erst vor die Daten einzulesen, noch mal mit php zu überprüfen und dann anhand der user_id zu löschen aber vermutlich ist das unnötig viel an Vorsicht.
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag von Olli Oberhausen »

Machs lieber so, sonst hast du noch überbleibsel in anderen tabellen und funktioniert auch mit mysql 3.23:

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$page_title = 'Benutzer löschen';
// Output page header
include($phpbb_root_path . 'includes/page_header.'.$phpEx);

	$killdate = time() - 604800;
	$sql = "SELECT user_id
	FROM " . USERS_TABLE . " 
	WHERE user_id <> " . ANONYMOUS . "
	AND user_active = 0 
	AND user_regdate < ".$killdate);
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain search results', '', __LINE__, __FILE__, $sql);
	}
	
	if ( $row = $db->sql_fetchrow($result) )
	{
		do
		{
			$user_array[] = $row['user_id'];
		}
		while ( $row = $db->sql_fetchrow($result) );
	}
	else
	{
		message_die(GENERAL_MESSAGE, 'Keine Benutzer zum löschen vorhanden');
	}

	
	foreach ($user_array as $user_id)
	{
		

		$sql = "DELETE FROM " . USERS_TABLE . "
			WHERE user_id = $user_id";
		if( !$db->sql_query($sql) )
		{
			message_die(GENERAL_ERROR, 'Could not delete user', '', __LINE__, __FILE__, $sql);
		}

		$sql = "DELETE FROM " . USER_GROUP_TABLE . "
			WHERE user_id = $user_id";
		if( !$db->sql_query($sql) )
		{
			message_die(GENERAL_ERROR, 'Could not delete user from user_group table', '', __LINE__, __FILE__, $sql);
		}
	}

	message_die(GENERAL_MESSAGE, count($user_array) . ' Benutzer gelöscht');

include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

?>
Olli
Neulich im Zoo: Papa, guck mal, da sind Linuxe...
KB-Suche :: db_update_generator :: phpMyAdmin
Winmerge :: Zend Studio
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

Beitrag von Xwitz »

Aah, die Inaktiven stehen auch noch in der user_group_table, die hätte ich vergessen. Danke. Also muß man die user_id zwangsweise auslesen.

Die Fehlermeldungen kann ich mir (wenn/sobald es geht) sparen oder ich sende sie per Email, denn die Datei wird per cronjop aufgerufen.

PS: Kann die user_id vom ANONYMOUS auch eine andere sein als -1? Kann ich da einfach ANONYMOUS hinschreiben, ist doch keine Variable?
Benutzeravatar
Olli Oberhausen
Mitglied
Beiträge: 561
Registriert: 22.10.2004 01:03
Wohnort: Oberhausen NRW
Kontaktdaten:

Beitrag von Olli Oberhausen »

Lass die (fehler)meldungen drin, die bekommste ja dann per mail...

ANONYMOUS ist keine Variable sondern eine konstante und ist definiert mit "-1" in der constants.php - nur zur erklärung.

Die ganze datei gehört natürlich mit unbekanntem namen isn phpbb root.

Aber teste mal lokal bevor du die online schiebst
Olli
Neulich im Zoo: Papa, guck mal, da sind Linuxe...
KB-Suche :: db_update_generator :: phpMyAdmin
Winmerge :: Zend Studio
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

Beitrag von Xwitz »

Die Datei liegt in einem Verzeichnis im root aber der Pfad ist angepaßt ('../'). Ob die Datei jemand anderes aufruft (wenn sie getestet ist und funktioniert) kann mir aber egal sein.

Danke für die Hilfe.
Antworten

Zurück zu „Coding & Technik“