Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste
Fehlerprotokollierung "Undefined array key "language" "
#1
Hallole,

seit über zwei Jahren ist in einem Template wie folgt eingebunden:
PHP-Code:
<if ($mybb->user['language'] == 'deutsch_du'then>
zeige es in Deutsch
</if>
<if (
$mybb->user['language'] == 'english'then>
zeige es in Englisch
</if> 
was auch nach Umstellung von PHP-7 auf PHP-8 fehlerfrei korrekt funktioniert.

Seit der Umstellung auf PHP-8 wird zu den beiden IF-Zeilen je folgende Fehlermeldung protokolliert:
Zitat:Undefined array key "language" 
die Funktion ist jedoch (trotz der Fehlermeldung) nicht beinträchtigt.

Was ist zu tun damit die Fehlermeldung nicht mehr gegeben ist?

Vorab besten Dank für jegliche Tipps und Hinweise.
Sollte ich der Ansicht sein helfen zu können biete ich Hilfe(n) an!  ...ich bitte jedoch nicht darum helfen zu dürfen!
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner] ♦ [PlugIns]
Zitieren
#2
1. Es ist nur eine "Warning", kein Fehler, also absolut nicht schlimm, nur nervig.
2. Wenn das Array-Element 'language' nicht definiert ist, macht auch die IF-Abfrage keinen Sinn. Es wundert mich, dass es korrekt funktioniert.
3. Das Problem wird definitiv im Plug-In Template Conditionals zu suchen sein.

Was sagt, das PHP-Log?
In welcher Zeile tritt die Warnung auf und wie lautet dieser Code?
Falls keine Warnungen protokolliert werden, füge temporär folgende PHP-Function in die index.php oder global.php hinzu - irgendwo am Anfang der Datei. Somit werden alle PHP-Meldungen zur Laufzeit erfasst:
<?php
error_reporting(E_ALL);
?>
Nach Diagnose einfach wieder entfernen.

[ETS]
MyBB + innovative Themes:
NokiaPort.de Forum Nokia-Traditionsforum seit 2006.
Live Escape Game Forum Diskussionsplattform für Escape-Rooms.
Unlösbares Problem, Dilemma? -> das Nötel Smile
Zitieren
#3
(02.08.2023, 15:51)[ExiTuS] schrieb: 1. Es ist nur eine "Warning", kein Fehler, also absolut nicht schlimm, nur nervig.
Das sehe ich anders. Es deutet hier auf jeden Fall auf einen Programmierfehler hin, denn...
(02.08.2023, 15:51)[ExiTuS] schrieb: Es wundert mich, dass es korrekt funktioniert.
...das kann nicht sein. Wenn der Fehler auftritt, also keine Sprache definiert ist (was laut der Meldung auf jeden Fall passieren kann), kann weder der deutsche noch der englische Text angezeigt werden.

Wenn man nicht sicher ist, ob das Array das Attribut überhaupt enthält, muss man dies z.B. mit isset() abfangen.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#4
Natürlich ist diese Warnung das Resultat eines Programmierfehlers.
Du bestätigst auch das eigentliche Problem... Es muss an diesem Plug-In liegen.
Besser wäre zu wissen, was das PHP-Log ausgibt.

[ETS]
MyBB + innovative Themes:
NokiaPort.de Forum Nokia-Traditionsforum seit 2006.
Live Escape Game Forum Diskussionsplattform für Escape-Rooms.
Unlösbares Problem, Dilemma? -> das Nötel Smile
Zitieren
#5
(02.08.2023, 16:39)StefanT schrieb:
(02.08.2023, 15:51)[ExiTuS] schrieb: 1. Es ist nur eine "Warning", kein Fehler, also absolut nicht schlimm, nur nervig.
Das sehe ich anders. Es deutet hier auf jeden Fall auf einen Programmierfehler hin, denn...
(02.08.2023, 15:51)[ExiTuS] schrieb: Es wundert mich, dass es korrekt funktioniert.
(02.08.2023, 16:39)StefanT schrieb: ...das kann nicht sein.
Ist aber so. Warum sollte ich etwas schreiben wenn es nicht so ist?
(02.08.2023, 16:39)StefanT schrieb: Wenn der Fehler auftritt, also keine Sprache definiert ist (was laut der Meldung auf jeden Fall passieren kann), kann weder der deutsche noch der englische Text angezeigt werden.
Dieser Sachstand ist abgefangen mit
PHP-Code:
<if (empty($mybb->user['language'])) then>
zeige etwas
</if> 
(02.08.2023, 16:39)StefanT schrieb: Wenn man nicht sicher ist, ob das Array das Attribut überhaupt enthält, muss man dies z.B. mit isset() abfangen.
die Variable
PHP-Code:
$mybb->user['language'
wird doch seitens MyBB zur Verfügung gestellt!?

Im MyBB-Fehlerprotokoll steht ledglich:
Zitat:Warning Undefined array key "language"
mit Angabe der Zeile im zugehörigen Template (hier: header).

Unter 7.4 ergab der PHP-Syntax keine Fehlermeldungen, erst unter PHP-8. Die Funktion ist jeeoch unter PHP-7 und PHP-8 gegeben.

Wie bereits geschrieben werden keine weiteren Fehlermeldungen (im PHP-Log keine Einträge) ausgegeben.

Die Speicherung eines PHP-Fehler habe im mal in das PlugIn phpptl.php V2.2.1 eingebunden und erhalte dann:
Code:
PHP Deprecated:  preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /www/htdocs/w01e22fe/neustart.gfkv.at/testforum/inc/functions.php on line 5708
PHP Deprecated:  Creation of dynamic property phptpl_templates::$parsed_cache is deprecated in /www/htdocs/xxxxxx/inc/plugins/phptpl.php(100) : eval()'d code on line 18

Lade ich mir die aktuelle Version 2.3.7 herunter, kommen noch mehr Fehler:
Code:
PHP Deprecated:  preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /www/htdocs/xxxxx/inc/functions.php on line 5708
PHP Deprecated:  Creation of dynamic property phptpl_templates::$parsed_cache is deprecated in /www/htdocs/xxxxx/inc/plugins/phptpl.php(73) : eval()'d code on line 9
PHP Deprecated:  strtr(): Passing null to parameter #1 ($string) of type string is deprecated in /www/htdocs/xxxxx/inc/plugins/phptpl.php on line 117
PHP Deprecated:  strtr(): Passing null to parameter #1 ($string) of type string is deprecated in /www/htdocs/xxxxx/inc/plugins/phptpl.php on line 117
PHP Deprecated:  strtr(): Passing null to parameter #1 ($string) of type string is deprecated in /www/htdocs/xxxxx/inc/plugins/phptpl.php on line 117
Zeile wiederholt sich 30 mal
Sollte ich der Ansicht sein helfen zu können biete ich Hilfe(n) an!  ...ich bitte jedoch nicht darum helfen zu dürfen!
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner] ♦ [PlugIns]
Zitieren
#6
(03.08.2023, 17:08)Gerti schrieb: Ist aber so. Warum sollte ich etwas schreiben wenn es nicht so ist?
Die Fehlermeldung belegt eindeutig, dass es in bestimmten Situationen nicht funktionieren kann. Wink
(03.08.2023, 17:08)Gerti schrieb: die Variable
PHP-Code:
$mybb->user['language'
wird doch seitens MyBB zur Verfügung gestellt!?
Sie ist nicht dafür geeignet die Sprache des Forums abzufragen, da sie nur für registrierte Nutzer überhaupt vorhanden ist und leer oder ungültig sein kann. Das MyBB nutzt eine ganz andere Variable:
PHP-Code:
$mybb->settings['bblanguage'
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#7
(03.08.2023, 18:48)StefanT schrieb:
(03.08.2023, 17:08)Gerti schrieb:
PHP-Code:
$mybb->user['language'
Sie ist nicht dafür geeignet die Sprache des Forums abzufragen...

(03.08.2023, 18:48)StefanT schrieb: Das MyBB nutzt eine ganz andere Variable:
PHP-Code:
$mybb->settings['bblanguage'
Soweit nachvollziehbar.

Da es jedoch für Gäste mit
PHP-Code:
<if ($mybb->user['language'] == 'deutsch_du'then>
zeige es in Deutsch
</if>
<if (
$mybb->user['language'] == 'english'then>
zeige es in Englisch
</if>
<if (empty(
$mybb->user['language'])) then>
zeige Info Deutsch/Englisch
</if> 
funktioniert, es wird lediglich seit PHP-8 die Warnmeldung protokolliert, ergeben sich auf Grundlage Deiner Ausführung nachstehende Fragen:

a) wie kann/könnte man
PHP-Code:
$mybb->user['language'
allgemein verfügbar machen? bzw.

b) die Warnmeldung, da die korrekte Funktion gegeben ist, verhindern?
> durch die Warnmeldungen wird das Logfile logischwerweise aufgeblasen
>> Aktuell habe ich mit "@" vor den jeweiligen "eval" die Warnmeldung ausgeblendet, was sicherlich nicht der Weisheit letzter Schluss sein sollte. Dadurch bleibt jedoch zumindest das Logfile entlastet.

c) Alternativ einen anderen Lösungsvorschlag?

Es müsste doch für "a" sicherlich ein Lösungsweg zu finden sein.
Sollte ich der Ansicht sein helfen zu können biete ich Hilfe(n) an!  ...ich bitte jedoch nicht darum helfen zu dürfen!
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner] ♦ [PlugIns]
Zitieren
#8
Du hast den einfachsten Lösungsweg vergessen: Du nutzt stattdessen einfach die besser geeignete Variable:
PHP-Code:
$mybb->settings['bblanguage'
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#9
Nein, habe ich nicht vergessen. Die Definition
PHP-Code:
$mybb->settings['bblanguage'
ist doch fix definiert.

Ich weiß doch im Vorfeld nicht ob es sich beim Forenbesucher (Gast) um einen deutsch, französich, ungarisch oder englisch sprechenden Gast habendelt. Genau aus diesem habe ich mit Flaggensymbolen die Sprachwahl - gilt nur für Gäste - definiert.

Was seit Jahren funktionierte wäre mit Deiner basisorientierten Lösung eine Downgrade ..wie erklärt man das dem Forenbetreiber Wink ? z.B. MyBB hat sich verschlechtert weil es sich nicht mehr mit den modernen Anforderungen von PHP-8 im Einklang befindet?
Sollte ich der Ansicht sein helfen zu können biete ich Hilfe(n) an!  ...ich bitte jedoch nicht darum helfen zu dürfen!
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner] ♦ [PlugIns]
Zitieren
#10
(04.08.2023, 17:01)Gerti schrieb: Was seit Jahren funktionierte wäre mit Deiner basisorientierten Lösung eine Downgrade
Ist das deine Vermutung oder hast du es tatsächlich einmal ausprobiert? Das MyBB nutzt in der global.php genau diese Variable um das korrekte Sprachpaket zu laden:
PHP-Code:
$lang->set_language($mybb->settings['bblanguage']); 
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  modcp Fehlermeldung ARRAY stefius 3 1.330 29.06.2019, 05:31
Letzter Beitrag: stefius
  array_merge(): Argument #2 is not an array hkkp 20 4.776 18.05.2015, 10:02
Letzter Beitrag: hkkp
Question Smilies werden nicht angezeigt (/Array) gleichi 4 2.579 23.10.2014, 01:06
Letzter Beitrag: gleichi