eigentlich bat mich ein Kunde vor einiger Zeit darum, dieses einzubauen. Dabei sind mir einige Punkte aufgefallen im admin_user_register.php, die ich gerne hier auflisten möchte.
1. Unnötige Abfrage der Board Konfiguration
- An zwei Stellen des Scriptes (Zeile 32ff. und 85ff.) werden Konfigurationen des Boards per SQL-Queries abgerufen und die $board_config gesetzt. Dies ist unnötig, da ziemlich am Anfang des Scriptes das pagestart.php included wird, welches die common.php (und somit unter anderem die komplette $board_config - Zeile 210ff. in der common.php) läd. Zumal im Script selber auch Konfigurationseinstellungen benutzt werden, die gar nicht via Query im Script abgefragt wurden. Somit verliert sich der Sinn dieser 2 Queries noch mehr.
- An drei Stellen (Zeilen 195, 202 & 211) kommen If-Bedingungen vor, die eine Variable setzen, die später gar nicht verwendet wird. Ein Beispiel: if ( !($result = $db->sql_query($sql, BEGIN_TRANSACTION)) ) wo doch völlig if ( !($db->sql_query($sql, BEGIN_TRANSACTION)) ) genügt.
- In Zeile 50 und 51 werden bbcode.php und functions_post.php included. Beim ersten dachte ich, es würde für die Signatur benötigt. Kurz darauf stellte ich fest, dass beim Admin Register Mod gar keine Signatur gesetzt wird. Das Includen des zweiten Scriptes ist mir total schleierhaft. Ich kann mir nicht im Geringsten vorstellen, wozu die Funktionen, die in functions_post.php drin sind, bei einer Registrierung dienen sollen. Fakt ist, beide Dateien werden included ohne das eine Nutzung statt findet.
- Im ersten INSERT (beim USERS_TABLE Scriptzeile 193ff.) wird die Zelle user_actkey (Aktivierungsschlüssel bei EMail-Validation) mit dem Wert 'user_actkey' gesetzt. Dies ist in mehrfacher Hinsicht nutzlos. Der User wird sowieso sofort als 'aktiviert' gespeichert und benötigt somit keinen Aktivierungsschlüssel. Zudem besteht dieser Schlüssel normalerweise aus einem MD5 Hash, der ein 32 Byte langer, alphanumerischer String ist. Zu guter Letzt wird diese Zelle überschrieben, sobald der User sich ein neues Passwort schicken lässt, oder seine EMailadresse ändert.
- In Zeile 111 bis 119 wird überprüft, ob der User eingeloggt ist. Dies ist eine normale Schutzfunktion im usercp_register.php, die verhindert, dass eingeloggte Benutzer auf "Registrieren" gehen können. In einem Admin-Script hat dieser Part wenig Sinn, der Admin wird kaum sich selber registrieren.
- An 5 Stellen des Scriptes wird geprüft, ob $mode den Wert 'register' hat. Dieses Script ist ausschliesslich für die Registrierung gedacht, somit kann der andere Modus 'editprofile' gar nicht vorkommen. Diese If-Anweisung könnte entfernt werden, weil sie immer den Wert TRUE ergibt.
- Ab Zeile 178 wird erst per MAX(user_id) AS total die höchste user_id ermittelt und dann weiter unten mit 1 addiert, um die user_id zu erhalten, die der neue Benutzer bekommen wird. Dies ist auch innerhalb des Queries möglich, indem man einfach MAX(user_id)+1 AS total schreibt.
Klar, das Script ist von 2004, funktioniert und lässt Admins neue User registrieren. Jedoch ist es im Punkto Performance und sinnvoller Kürzung noch erheblich verbesserungswürdig. Mein Posting soll auch nicht als "Rumnörgeln" dienen, sondern Defizite aufzeigen und die Ausbesserung anregen.
Viele Grüße,
Tekin