User Online (Gäste werden nicht mehr gezählt)

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
hemfrie
Mitglied
Beiträge: 11
Registriert: 25.05.2004 12:51
Wohnort: Düsseldorf
Kontaktdaten:

User Online (Gäste werden nicht mehr gezählt)

Beitrag von hemfrie »

Hi zusammen,

ich habe für mein Forum ein Cronjob angelegt, mit dem ich stündlich alle User lösche, die sich innerhalb einer Stunde nicht freigeschaltet haben.

Die Mysql Query sieht wie folgt aus:

Code: Alles auswählen

$sql="DELETE FROM phpbb_users WHERE user_active='0' AND (UNIX_TIMESTAMP() - user_regdate)/3600 >1";
Durch das Löschen dieser User sind aber leider Inkonsistenzen in der Datenbank aufgetreten. Folge ist, dass auf der Forenstartseite die Anzeige der "User Online" nicht mehr funktioniert.

Insgesamt sind 2 Benutzer online: Ein registrierter, ein versteckter und kein Gast.


Es werden zwar noch alle registrierten und versteckten Benutzer gezählt, aber bei den Gästen wird immer 0 angezeigt, obwohl ich im Adminbereich sehen kann, dass dem nicht so ist.

Hat jemand eine Ahnung warum die Zählfunktion der Gäste durch meine Löschaktion beschädigt wurde?

:)
hemfrie
hemfrie
Mitglied
Beiträge: 11
Registriert: 25.05.2004 12:51
Wohnort: Düsseldorf
Kontaktdaten:

Beitrag von hemfrie »

Ich hab den Fehler gefunden. :D

In der Tabelle phpbb_users gibt es einen Usereintrag, der für alle Anonymen User (also Gäste) steht.

Genau dieser Usereintrag mit der user_id "-1" wurde natürlich auch von meinem Aufräumskript gelöscht. Damit vielen jetzt alle Gäste beim joinen der Tabellen "phpbb_users" und "phpbb_sessions" raus.

:)
hemfrie
Dennis63
Ehemaliges Teammitglied
Beiträge: 2597
Registriert: 02.07.2003 18:46

Beitrag von Dennis63 »

Bedenke auch, daß für die User je eine Gruppe angelegt wird, die auch gelöscht werden muss..

Grüße
Dennis
hemfrie
Mitglied
Beiträge: 11
Registriert: 25.05.2004 12:51
Wohnort: Düsseldorf
Kontaktdaten:

Beitrag von hemfrie »

Danke Dennis, das hätte ich sonst glatt vergessen.

Hier mal mein Script, falls jemand mal etwas ähnliches vor hat. Vielleicht sieht ja auch jemand noch einen Fehler :wink:

Code: Alles auswählen

include('connection.php');

// Es werden alle inaktiven User gelöscht, die sich nicht innerhalb einer Stunde freigeschaltet haben.

$sql="DELETE FROM phpbb_users WHERE user_active='0' AND user_id!='-1' AND (UNIX_TIMESTAMP() - user_regdate)/3600 >1";
mysql_query($sql);


//---------------------------------- löschen aller inaktiven User Gruppen ----------------------------//
$sql="SELECT phpbb_user_group.user_id AS id
FROM phpbb_user_group LEFT JOIN phpbb_users ON phpbb_user_group.user_id = phpbb_users.user_id
WHERE (((phpbb_users.user_id) Is Null));";

$result=mysql_query($sql);
while($row=mysql_fetch_array($result))
{
	$id.="'{$row['id']}'".',';
}

$all_id = preg_replace('/([^)]*),$/', '\\1', $id);

$sql="DELETE FROM phpbb_user_group WHERE user_id IN ($all_id)" or mysql_error();
mysql_query($sql);
//----------------------------------------------------------------------------------------------------//
:)
hemfrie
Acid
Ehrenadmin
Beiträge: 12195
Registriert: 26.04.2001 02:00
Wohnort: Berlin

Beitrag von Acid »

Für registrierte User gibt´s 3 Einträge beim phpBB.. in den Tabellen "users", "user_group" sowie in der Tabelle "groups". ;)

Da du jetzt sicherlich einige Fehler in diesen Bereichen hast, solltest du die Usereinträge mit dem DB MOD überprüfen.
hemfrie
Mitglied
Beiträge: 11
Registriert: 25.05.2004 12:51
Wohnort: Düsseldorf
Kontaktdaten:

Beitrag von hemfrie »

Danke für den Hinweis. Das werden ja immer mehr Tabellen :)

Ich habe ich jetzt das Skript noch etwas erweitert um die verwaisten Einträge in phpbb_groups zu löschen.

Code: Alles auswählen

include('connection.php');

// Es werden alle inaktiven User gelöscht, die sich nicht innerhalb einer Stunde freigeschaltet haben.

$sql="DELETE FROM phpbb_users WHERE user_active='0' AND user_id!='-1' AND (UNIX_TIMESTAMP() - user_regdate)/3600 >1";
mysql_query($sql);


//---------------------------------- löschen aller inaktiven User Gruppen ----------------------------//
$sql="SELECT phpbb_user_group.user_id AS id
FROM phpbb_user_group LEFT JOIN phpbb_users ON phpbb_user_group.user_id = phpbb_users.user_id
WHERE (((phpbb_users.user_id) Is Null));";

$result=mysql_query($sql);
while($row=mysql_fetch_array($result))
{
	$id.="'{$row['id']}'".',';
}

$all_id = preg_replace('/([^)]*),$/', '\\1', $id);

$sql="DELETE FROM phpbb_user_group WHERE user_id IN ($all_id)" or mysql_error();
mysql_query($sql);
//----------------------------------------------------------------------------------------------------//

$sql="SELECT phpbb_groups.group_id AS id
FROM phpbb_groups LEFT JOIN phpbb_user_group ON phpbb_groups.group_id = phpbb_user_group.group_id
WHERE (((phpbb_user_group.group_id) Is Null));";

$result=mysql_query($sql);
while($row=mysql_fetch_array($result))
{
	$id.="'{$row['id']}'".',';
}

$all_id = preg_replace('/([^)]*),$/', '\\1', $id);

$sql="DELETE FROM phpbb_groups WHERE group_id IN ($all_id)" or mysql_error();
mysql_query($sql);
jetzt müsste eigentlich alles sauber sein.

:)
hemfrie
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“