Seite 1 von 1

admin_users.php - Bug beim Löschen von Usern ?

Verfasst: 05.03.2004 12:27
von fgh
Nach dem Update von PHP Version 4.2.2 auf Version 4.3.4 funktioniert das Löschen von Forumusern (phpBB 2.06) nicht mehr so wie zuvor. :(

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);
                        }

Das Problem liegt nicht bei SQL sondern:

Code: Alles auswählen

SQL:

DEBUG MODE

UPDATE phpbb_humanisten_posts SET poster_id = -1, post_username = '' WHERE poster_id = 49

Line : 90
an der Variable '$username', die leer ist.

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. :o

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

Verfasst: 05.03.2004 13:57
von Mister_X
admin_users.php
ersetze

Code: Alles auswählen

SET poster_id = " . DELETED . ", post_username = '$username'
mit

Code: Alles auswählen

SET poster_id = " . DELETED . ", post_username = '$HTTP_POST_VARS[username]'
Der Fehler ist mir jetzt wo du es sagst zum ersten Mal aufgefallen, da merkt man mal wie häufig ich Benutzer lösche ;)

Verfasst: 05.03.2004 18:51
von fgh
Mister_X hat geschrieben:admin_users.php
ersetze

Code: Alles auswählen

SET poster_id = " . DELETED . ", post_username = '$username'
mit

Code: Alles auswählen

SET poster_id = " . DELETED . ", post_username = '$HTTP_POST_VARS[username]'
Der Fehler ist mir jetzt wo du es sagst zum ersten Mal aufgefallen, da merkt man mal wie häufig ich Benutzer lösche ;)
Gut das ich nicht der einzige bin ;)

Das müsste eigentlich ein Bug sein. :roll: Habe das ganze unter:

http://www.phpbb.com/phpBB/viewtopic.php?t=178563

eingestellt. Mal sehen, ob die phpBB-Gurus reagieren.

Gruß Frank

Verfasst: 06.03.2004 01:23
von fgh
Habe Bug unter der Nummer 2482 offiziell angemeldet.

http://www.phpbb.com/bugs/bug.php?op=show&bugid=2482

Verfasst: 25.11.2005 19:43
von Loewenherz
Gibt es zu diesem Thema etwas neues? Oder muss ich den im Link empfohlenen Code einpflegen?

Verfasst: 28.11.2005 21:30
von Loewenherz
Okay, hat sich erledigt.

Code: Alles auswählen

SET poster_id = " . DELETED . ", post_username = '" . str_replace("\\'", "''", addslashes($this_userdata['username'])) . "'
scheint zu funktionieren. Vor der 2.0.18 hatte ich das Problem noch irgendwann...