Felix Riesterer: Von JS dynamisch erzeugter Inhalt kommt nicht an PHP-Variablen heran

Beitrag lesen

problematische Seite

Lieber borisbaer,

die Variable $uri wird direkt am Anfang der Seite erstellt, noch vor dem DOCTYPE.

$uri = explode( '/', $_SERVER['REQUEST_URI'] );

aha. Explode ist für mich in solchen Fällen so etwas wie ein rotes Tuch. Folgender Code ist für mich oft der Grund, warum ich das anders löse:

print_r(explode('/', '/abc/def'));
Array
(
    [0] => 
    [1] => abc
    [2] => def
)

Für mich ist der Index 0 im obigen Beispiel oft unerwünscht, da er leer ist. In Deinem Anwendungsfall hier mag das anders sein, aber in solchen Fällen benutze ich dann preg_split:

print_r(preg_split('~/~', '/abc/def', -1, PREG_SPLIT_NO_EMPTY));
Array
(
    [0] => abc
    [1] => def
)

OK, gehen wir einmal davon aus, dass Dein String genau so zerlegt wird, wie Du das willst.

$page = 'Demon’s Souls';

OK, klare Sache.

Die index.php sieht folgendermaßen aus:

<?php
$page = 'Demon’s Souls';
$heading = 'Demon’s Sou<span style="letter-spacing: .35em;">l</span>s';
include $_SERVER['DOCUMENT_ROOT'] . '/index.php';
?>

Wenn ich mich recht erinnere, sollte man für include-Anweisungen keine Pfade aufgrund von _SERVER[DOCUMENT_ROOT] verwenden. Keine Ahnung, wo ich vor Jahren gelesen hatte, warum das ein Sicherheitsproblem sein könnte. Jedenfalls verwende ich die magische Konstante __DIR__ für Dateipfade. Sie ist das Verzeichnis, in welchem die PHP-Datei liegt, in der die Konstante jeweils benutzt wird (daher magisch). Vielleicht willst Du das auch tun.

Aber: Warum includiert sich die Datei index.php selbst? Oder verstehe ich die include-Anweisung falsch und es handelt sich um eine andere index.php?

Das Problem ist, dass beim dynamischen Laden des Inhalts die beiden Variablen plötzlich undefined sind.

Dein JavaScript tut irgendwelche Dinge. Dabei kommt fetch() zum Einsatz. Warum Du das verwendest, erschließt sich mir nicht. Ich hätte beim Klick auf die Registerkarten ein anderes Verhalten erwartet, nämlich dass ich zu einem neuen Dokument gelange, welches der Browser komplett neu lädt. Dein JavaScript scheint aber diesen Vorgang empfindlich zu stören. Dabei passiert dann offensichtlich das von Dir beschriebene Verhalten.

Mein Netzwerk-Tab meldet, dass ein Script /scripts/page.js in Zeile 31 Position 9 etwas tut. Klicke ich darauf, steht da fetch( 'subpages/' + href ). Für die game-Unterseite wird also die Adresse /games/demons-souls/subpages/game geladen. Das ist eine andere Adresse als /games/demons-souls/game oder nur /games/demons-souls/. Und was der jeweilige Unterschied ist und was das alles soll, und warum Du dazu ganze sieben (7!) JavaScript-Dateien lädst, das weißt Du sicherlich am besten.

Kann es sein, dass die Script-Datei in subpages beim Fetchen unter anderen Voraussetzungen geparst wird, weil Dein initiales PHP-Script dann fehlt? Wird sie etwa direkt als Hauptscript geladen, ohne von woanders zuerst inkludiert zu werden?

Liebe Grüße

Felix Riesterer