Seite 1 von 3
phpBB 2.0.21 - Fehler in der session.php
Verfasst: 06.10.2006 16:13
von x16
Ich habe eine meiner IP Adressen eben mal Testweise gebann. Wenn ich dann ins Forum gehen will kommt nur die Meldung:
Muss doch aber heißen:
Code: Alles auswählen
Du wurdest von diesem Forum verbannt.
Kontaktiere den Administrator, um mehr Informationen zu erhalten.
Der Fehler leigt in der sesion.php:
Code: Alles auswählen
if ( $ban_info['ban_ip'] || $ban_info['ban_userid'] || $ban_info['ban_email'] )
{
message_die(CRITICAL_MESSAGE, 'You_been_banned');
}
Habs geändert in:
Code: Alles auswählen
if ( $ban_info['ban_ip'] || $ban_info['ban_userid'] || $ban_info['ban_email'] )
{
message_die(CRITICAL_MESSAGE, $lang['You_been_banned']);
}
Leider war das wohl nicht richtig, denn dann kommt gar keine Nachricht mehr. Wer weiß weiter? Ist das denn noch niemanden aufgefallen???

Verfasst: 06.10.2006 16:37
von Olli Oberhausen
message_die(CRITICAL_MESSAGE, 'You_been_banned'); ist schon richtig, da das Array $lang erst in init_userprefs geladen wird und das kommt nach session_pagestart....
trotzdem sollte in der funktion message_die der text ersetzt werden.
Funktioniert allerdings nicht wenn der debug mode an ist.
Olli
Verfasst: 06.10.2006 16:40
von gn#36
Eigentlich sollte das beides funktionieren.
Denn in der Funktion message_die wird an der Stelle
Code: Alles auswählen
if ( $msg_code != CRITICAL_ERROR )
{
if ( !empty($lang[$msg_text]) )
{
$msg_text = $lang[$msg_text];
}
geprüft ob ein derartiger Eintrag in der Sprachvariablen enthalten ist. Wenn nicht wird eben der übergebene Text ausgegeben. Da es sich um den Typ CRITICAL_MESSAGE handelt wird dies auch so ausgeführt, wenn trotzdem der Text nicht aus der $lang genommen wird dann kann das nur heißen dass er sich nicht dort befindet --> Entweder fehlt die Sprachdatei komplett (wurde noch nicht includiert) oder in der Datei fehlt der entsprechende Eintrag.
Der Message Typ ist daran schuld, dass message_die nicht die Userdaten initialisiert:
Code: Alles auswählen
if( empty($userdata) && ( $msg_code == GENERAL_MESSAGE || $msg_code == GENERAL_ERROR ) )
{
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
}
allerdings sollte dann eigentlich die Default Board Sprache gewählt werden oder wenn die nicht existiert (weil z.B. die Board_config auch noch nicht eingelesen wurden) dann wird Englisch als Standardsprache gewählt:
Code: Alles auswählen
if ( !defined('HEADER_INC') && $msg_code != CRITICAL_ERROR )
{
if ( empty($lang) )
{
if ( !empty($board_config['default_lang']) )
{
include($phpbb_root_path . 'language/lang_' . $board_config['default_lang'] . '/lang_main.'.$phpEx);
}
else
{
include($phpbb_root_path . 'language/lang_english/lang_main.'.$phpEx);
}
}
Verfasst: 06.10.2006 16:48
von Olli Oberhausen
Aber vorher wird mit:
Code: Alles auswählen
if ( $debug_text != '' )
{
$msg_text = $msg_text . '<br /><br /><b><u>DEBUG MODE</u></b>' . $debug_text;
}
der $msg_text verändert...
So sollte es funktionieren:
Code: Alles auswählen
session.php
### Ersetze:
//
// Add on DEBUG info if we've enabled debug mode and this is an error. This
// prevents debug info being output for general messages should DEBUG be
### Mit:
if ( $msg_code != CRITICAL_ERROR )
{
if ( !empty($lang[$msg_text]) )
{
$msg_text = $lang[$msg_text];
}
}
//
// Add on DEBUG info if we've enabled debug mode and this is an error. This
// prevents debug info being output for general messages should DEBUG be
EDIT: Hat sich erledigt - siehe weiter unten.
Verfasst: 06.10.2006 16:53
von gn#36
Nicht ganz, denn die Debug informationen werden nur angehängt wenn es sich um einen GENERAL_ERROR oder CRITICAL_ERROR handelt:
if ( DEBUG && ( $msg_code == GENERAL_ERROR || $msg_code == CRITICAL_ERROR ) )
{
if ( $debug_text != '' )
{
$msg_text = $msg_text . '<br /><br /><b><u>DEBUG MODE</u></b>' . $debug_text;
}
}
Dies ist aber hier nicht der Fall.
Ansonsten macht das Replacement natürlich vorher trotzdem mehr Sinn.
Verfasst: 06.10.2006 17:04
von Olli Oberhausen
Irgendwie überschneiden wir uns immer
Hast natürlich recht - aber wodran liegts dann wohl???
Kein eintrag in der Sprachdatei?
Olli
Verfasst: 06.10.2006 17:10
von x16
Also bei mir ist der Eintrag in beiden Sprachdateien drin. Trotzdem gibt er nur "You_been_banned" aus.
In meiner session.php ist leider keine Stelle mit:
Code: Alles auswählen
//
// Add on DEBUG info if we've enabled debug mode and this is an error. This
// prevents debug info being output for general messages should DEBUG be
Wat nun?
Verfasst: 06.10.2006 17:14
von Olli Oberhausen
War die functions.php, hatte sich aber eh erledigt und werd ich rausnehmen.
Verfasst: 06.10.2006 17:39
von x16
Ach so. Gut ähh und kann ich da jetzt noch was probieren?
Sonst übernehme ich in die Session.php den Text aus der lang_main.php manuel. Und fertig ist dat Ding!!!
Wäre zwar ne blöde und unpraktische Lösung, aber naja. Also wenn ihr noch was wisst, bin ich bereit.
Verfasst: 06.10.2006 17:44
von gn#36
Gute Frage. Vielleicht schaltest du zum Testen mal error_reporting(E_ALL); ein, das gibt dann auch die Benutzung uninitialisierter Variablen aus. Bringt aber vermutlich auch nicht viel, da die Stelle die eine Fehlermeldung ausspuckt dann vermutlich in der Functions.php in der message_die Funktion sein wird.
Die Userdaten sollten auch in der $userdata vorhanden sein, da diese VOR dem Ban Check aus der DB geholt werden:
Code: Alles auswählen
if (isset($sessiondata['autologinid']) && (string) $sessiondata['autologinid'] != '' && $user_id)
{
$sql = 'SELECT u.*
FROM ' . USERS_TABLE . ' u, ' . SESSIONS_KEYS_TABLE . ' k
WHERE u.user_id = ' . (int) $user_id . "
AND u.user_active = 1
AND k.user_id = u.user_id
AND k.key_id = '" . md5($sessiondata['autologinid']) . "'";
if (!($result = $db->sql_query($sql)))
{
message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql);
}
$userdata = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
$enable_autologin = $login = 1;
}
else if (!$auto_create)
{
$sessiondata['autologinid'] = '';
$sessiondata['userid'] = $user_id;
$sql = 'SELECT *
FROM ' . USERS_TABLE . '
WHERE user_id = ' . (int) $user_id . '
AND user_active = 1';
if (!($result = $db->sql_query($sql)))
{
message_die(CRITICAL_ERROR, 'Error doing DB query userdata row fetch', '', __LINE__, __FILE__, $sql);
}
$userdata = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
$login = 1;
}
Vorschlag wäre: Lade erst noch mal die Sessions.php neu hoch und probier das dann aus. Hast du evtl. Änderungen an der Datei gemacht (Mods o.ä.)? Ich habe das Bannen bei mir mit den Standard Einstellungen probiert und es funktioniert einwandfrei.