Notice: Undefined offset: 2


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

AntonH

Grünschnabel
Hallo zusammen,

ich habe folgendes Problem.

Ich habe vor kurzem meine Website umgezogen und beim Aktualisieren folgende Notice bekommen: Notice: Undefined offset: 2 in /var/www/web24458962/html/files/game/wp-content/themes/game/header.php on line 3

PHP

1573684130626.png

Es handelt sich dabei laut Spezialisten um folgendes Problem:

Der Quelltext des Themes splittet die eingegebene URL am Slash auf und das erste Zeichen des 3. Elements in einen Großbuchstaben umwandelt.
Die Meldung besagt nun, dass gar kein 3. Element vorhanden ist. Für den Programmablauf scheint dies nicht problematisch zu sein,
da PHP dies dann durch einen Leer-String ersetzt, dies aber in der auftretenden Warning mitteilt.
Wie kann die gemeldete Datei dahingehend erweitert werden, dass vor der Verarbeitung eine Prüfung durchgeführt wird,
ob dieses 3. Element vorhanden ist, falls dem nicht der Fall ist, ein "Dummy"-Objekt anlegt?

Da ich keine Ahnung von PHP habe, bräuchte ich eure Hilfe.

Vielen Dank im Voraus
 

basti1012

Erfahrenes Mitglied
Ich bin zwar kein Experte aber ich würde isset() nutzen
PHP:
$uri=$_SERVER['PHP_SELF'];
$page_link=explode('/',$uri);
echo isset($page_link[2]) ?  ucfirst($page_link[2]) : 'kein treffer';
Ob das der richtige Weg ist weiß ich nicht aber es funktioniert.
Es gibt auch Leute die das einfach mit @ weg machen. Aber lass das das sein das ist dreck.
 

goto;

Erfahrenes Mitglied
Guten Morgen,

auf keinen Fall sollte @ zum unterdrücken verwendet werden.

Für den Programmablauf scheint dies nicht problematisch zu sein
Wenn es nicht benötigt wird, sollte es ausgebaut werden.

PHP:
$page_link[2]
Solche Sachen sind immer kritisch wenn man nicht sicherstellen kann, dass der Index auch existiert.
Wenn du PHP7 verwendest, kannst du an dieser Stelle auch den coalescing operator verwenden, dadurch wird der Code etwas schlanker und übersichtlicher. Andernfalls so wie basti bereits geschrieben hat.

PHP:
$myVariable = $page_link[2] ?? 'defaultString';
Viele Grüße
 

Yaslaw

n/a
Moderator
Wenn du PHP7 verwendest, kannst du an dieser Stelle auch den coalescing operator verwenden, dadurch wird der Code etwas schlanker und übersichtlicher. Andernfalls so wie basti bereits geschrieben hat.

PHP:
$myVariable = $page_link[2] ?? 'defaultString';
Kannte ich auch noch nicht. Wieder was gelernt. Merci
 

ComFreek

Mod | @comfreek
Moderator
Deine Art den Namen der aktuellen Seite herauszufinden (was ich annehme) hat ein paar Sicherheitsrisiken:

  • Technisch: Wenn du $page_name ohne Sanitization irgendwo ausgibst (sei es z. B. im HTML oder JS), bist du offen gegenüber XSS-Angriffen.
  • Eher "menschlich": Ich kann Leuten einfach eine URL mit handgecrafter URL geben, sowas wie https://example.com/umstrittenes-thema und "umstrittenes Thema" erscheint dann als Überschrift. Das kann dazu benutzt werden, deine Seite durch den Schmutz zu ziehen.
 

AntonH

Grünschnabel
Hallo basti, hallo goto, hallo ComFreek,

vielen Dank für die tollen Tipps und eure schnelle Rückmeldung.

Diese haben mir geholfen um das Problem zu lösen. Ich habe die Lösung von basti genommen.

Viele Grüße
Anton
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…