
Konkret wird bei Postings von gelöschten Usern nicht mehr der ehemalige Username mit dem Status Gast angezeigt, sondern nur noch Gast. Die Ursache dafür habe ich in der admin_users.php gefunden:
Ein User wird im phpbb mit einer numerischen user_id referenziert. Die eigentlichen Usereinträge (Username, Passwort, email-Adresse, etc) sind in der Usertabelle enthalten. Alle anderen Tabellen referenzieren mit der user_id auf die usertabelle.
Wenn ein User gelöscht wird, müssen der Datenbank-Konsistenz wegen alle Referenzen gelöscht werden. Das heißt, die Einträge für die user_id werden mit mit dem Wert -1 (deleted) überschrieben oder der Datensatz ganz gelöscht. Zu Schluß wird der User in der users Tabelle gelöscht.
Damit man Postings auch weiter noch gelöschten Usern zuordnen kann, haben die Entwickler in der Postingtabelle neben der eindeutigen poster_id ein redundantes Text Datenfeld post_username eingefügt. Dieses ist normalerweise leer.
Bei Löschen eines Users wird das Datenfeld post_username aller Postings, die vom zu löschenden User stammen, mit dessen Username gesetzt.
Code: Alles auswählen
$sql = "UPDATE " . POSTS_TABLE . "
SET poster_id = " . DELETED . ", post_username = '$username'
WHERE poster_id = $user_id";
if( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not update posts for this user', '', __LINE__, __FILE__, $sql);
}
Code: Alles auswählen
SQL:
DEBUG MODE
UPDATE phpbb_humanisten_posts SET poster_id = -1, post_username = '' WHERE poster_id = 49
Line : 90
Deshalb habe ich mir mal den Code von admin_users.php näher angeschaut.

Zu meiner Überraschung habe ich festgestellt, das '$username' überhaupt nicht richtig gesetzt wird.

Wenn admin_users.php ohne Optionen aufgerufen wird, verzweigt das Programm zur “Default User selection box”. Nach Auswahl des Users wird die Programmdatei rekursiv aufgerufen. Dann geht admin_users.php in den edit mod. Nach der Auswahl der Option "User löschen" wird admin_users.php ein weiteres mal mit dem save mod und der option deleteuser aufgerufen.
Wenn man sich den Programmcode genau anschaut wird die Variable '$username' in dieser Verzweigung überhaupt nicht gesetzt sondern nur mit isset überprüft.
Was mich verrwirrt ist, das admin_users.php vor dem PHP Update funktioniert hat. Ich bin immer davon ausgegangen, das alle Variablen beim erneuten Aufruf der Programmdatei mit HTTP_POST oder HTTP_GET übergeben werden müssen. ?
Habe ich da was Übersehen oder ist das ein Bug ?
Habt Ihr ähnlich gelagerte Probleme nach einem update von PHP ?
Gruß Frank