Ahoi,
ich habe noch einen Fehler gemacht beim Einbau von Tekins Snippet in den Bantron-Mod, genauer gesagt in die
admin_user_bantron.php.
Und zwar kommt es zu einem Fehler, wenn ich
1. einen User für 5 Minuten sperre
2. innerhalb dieser 5 Minuten im Bantron auf "Bearbeiten" der Sperre klicke
3. die Sperrzeit von 5 Minuten auf "immer" ändere
So sieht der Fehler aus:
Couldn't set banrank on the banned user
DEBUG MODE
SQL Error : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
UPDATE phpbb_users SET user_oldrank = user_rank, user_rank = '99' WHERE user_id =
Line : 209
File : admin_user_bantron.php
Zur Behebung des Fehlers mache - wenn Du die in
diesem Beitrag beschriebenen Änderungen nachvollzogen hast - in der
admin_user_bantron.php folgendes:
SUCHE:
Code: Alles auswählen
if (!$db->sql_query ($sql)) {
message_die (GENERAL_ERROR, "Couldn't update ban information", "", __LINE__, __FILE__, $sql);
}
$banrank = 99; // Hier die ID des Spezialranges einsetzen, den gebannte User erhalten sollen.
// Setzen des neuen Spezialranges für den gebannten User
$sql = "UPDATE ". USERS_TABLE ."
SET user_oldrank = user_rank, user_rank = '$banrank'
WHERE user_id = ". $user_list[$i];
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, "Couldn't set banrank on the banned user", "", __LINE__, __FILE__, $sql);
}
ERSETZE DURCH:
Code: Alles auswählen
if (!$db->sql_query ($sql)) {
message_die (GENERAL_ERROR, "Couldn't update ban information", "", __LINE__, __FILE__, $sql);
}
// Experiment
$sql = "SELECT ban_userid FROM ". BANLIST_TABLE .
" WHERE ban_id = " . $HTTP_POST_VARS['ban_id'];
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Couldn't gain userid of the banned user", "", __LINE__, __FILE__, $sql);
}
$ban_update = $db->sql_fetchrow($result);
$banrank = 99; // Hier die ID des Spezialranges einsetzen, den gebannte User erhalten sollen.
// Setzen des neuen Spezialranges für den gebannten User
$sql = "UPDATE ". USERS_TABLE ."
SET user_oldrank = user_rank, user_rank = '$banrank'
WHERE user_id = ". $ban_update['ban_userid'];
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, "Couldn't set banrank on the banned user", "", __LINE__, __FILE__, $sql);
}
Wenn man solche Änderungen in Bezug auf die Sperrzeit durchführt, hat es aber zur Folge, dass sowohl beim user_rank als auch beim user_oldrank 99 eingetragen wird. In der Folge erhält der User bei der Entsperrung nicht mehr seinen alten Rang zurück.
Da aber zumindest ich nicht mit Rängen sondern mit Usergruppen arbeite und diesbezüglich einige Mods eingebaut habe, hilft ein einfacher Trick: Beim Entsperren wird nicht mehr der alte Rang wieder hergestellt, sondern der entsperrte User erhält im Feld user_rank einfach den Wert 0: In der Folge erscheint unter seinem Namen wieder der Rang, der mit der Usergruppe des Entsperrten assoziiert wird.
So sieht die Änderung in rogers Code dafür aus:
admin_user_bantron.php
SUCHE
Code: Alles auswählen
foreach ($HTTP_POST_VARS['ban_delete'] as $ban_id) {
$sql = "SELECT ban_userid FROM ". BANLIST_TABLE .
" WHERE ban_id = $ban_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Couldn't gain userid of the unbanned user", "", __LINE__, __FILE__, $sql);
}
$unban = $db->sql_fetchrow($result);
$sql = "UPDATE ". USERS_TABLE ."
SET user_rank = user_oldrank
WHERE user_id = ". $unban['ban_userid'];
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, "Couldn't set normal rank on the unbanned user", "", __LINE__, __FILE__, $sql);
}
ERSETZE DURCH:
Code: Alles auswählen
foreach ($HTTP_POST_VARS['ban_delete'] as $ban_id) {
// Alter Rang für User, die über Bantron wieder entbannt werden
$sql = "SELECT ban_userid FROM ". BANLIST_TABLE .
" WHERE ban_id = $ban_id";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Couldn't gain userid of the unbanned user", "", __LINE__, __FILE__, $sql);
}
$unban = $db->sql_fetchrow($result);
// $sql = "UPDATE ". USERS_TABLE ."
// SET user_rank = user_oldrank
// WHERE user_id = ". $unban['ban_userid'];
$sql = "UPDATE ". USERS_TABLE ."
SET user_rank = 0
WHERE user_id = ". $unban['ban_userid'];
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, "Couldn't set normal rank on the unbanned user", "", __LINE__, __FILE__, $sql);
}
// Alter Rang für User, die über Bantron wieder entbannt werden
Hier ist die komplette Datei:
admin_user_bantron.php
Ist alles ein bisschen verwirrend. Aber zumindest bei mir klappt es nun. Da ich aber etliche Mods eingebaut habe, die in dieses System eingreifen, weiß ich nicht, inwieweit es auch bei anderen klappen könnte.
Dir noch einmal danke für die Hilfe, roger!
LG, IPB_Flüchtling
EDIT: Irgendwie vermute ich, dass ich überhaupt keinen user_oldrank benötige. Wenn jemand gesperrt wird, erhält er den user_rank 99 und die Anzeige "gesperrt". Wird jemand wieder entsperrt, erhält er den user_rank 0. Zumindest bei mir ist das so. Habe aber, wie gesagt, einige Mods eingebaut.