Variable lässt sich nicht global aufrufen

Johnnii360

Erfahrenes Mitglied
Servus!

Ja, ich bins mal wieder mit einem Problemchen, wo ich net weiterkomme. ;)

Und zwar habe ich hier eine Variable die sich $ItemTitle nennt. Diese möchte ich gerne via $GLOBALS['ItemTitle'] aufrufen. Leider sagt mir aber PHP geht nicht.

Ich denke das Problem liegt darin, dass ich die Variable in einer inkludierten Seite definiere. Ausgelesen wird sie dann auf der Hauptseite. Was mich jedoch wundert ist, dass die andere Variable, die ich in der switch-Anweisung definiere ordnungsgemäß auslesbar ist.

Hier der Code:

Titel-Tag:
HTML:
<title><?php echo $GLOBALS['ItemTitle']." - ".$GLOBALS['siteTitle']." - ";?>jotoma.de</title>

Ein Teil der Switch-Anweisung:
PHP:
switch(@$_GET['site'])
{
    case "ShowBlog":
		$site = "blog_show";
		$sideBar = "blog";
		$siteTitle = "Blog";
		break;
}

Hier die include-Funktion, die dann die Seite inkludiert:
PHP:
function site_include($site)
{
	include("config.inc.php");
	include($site);
}

Ich hab jetzt schon zig Sachen versucht. Ich hab's mittels "global $ItemTitle" versucht, dass Ganze in der Switch lesbar zu machen, in eine Session zu packen (mag aber die Suchmaschine wieder nicht), via Javascript (mag SEO auch nicht), auf Google gesucht... Hat alles nix geholfen.

Hat sonst noch jemand von Euch eine Idee?

Vielen Dank schon mal im Voraus!
 
http://php.net/manual/de/function.include.php hat gesagt.:
Wenn eine Datei eingebunden wird, wird für den enthaltenen Code der gleiche Geltungsbereich für Variablen übernommen, der für die Zeile gilt, die den include-Befehl aufruft.


Du includest die Datei innerhalb einer Funktion, somit ist die Variable die du in der inkludeten Datei erstellst nicht global, sie ist nur innerhalb der Funktion site_include sichtbar.
 
Hallo, ich bin da etwas anderer Meinung. $GLOBALS ist immer global, daher heißt die Variable auch so. Da ändert auch eine includierte Datei nichts dran. Viel wichtiger und interessanter an dieser Problemstellung ist, zu welchem Zeitpunkt der Laufzeit wird $GLOBALS['ItemTitle'] mit einem Wert versorgt und wann (code-technisch später oder früher) wird sie gelesen? Das geht aus deiner Beschreibung nicht ganz hervor. Befindet sich

PHP:
<title><?php echo $GLOBALS['ItemTitle']." - ".$GLOBALS['siteTitle']." - ";?>jotoma.de</title>

vor oder nach dem du das Script includierst, das die $GLOBALS füllt?
 
Zuletzt bearbeitet:
Hmm, stimmt, das habe ich noch gar nicht beachtet. Also $GLOBALS['ItemTitle'] wird schon davor ausgelesen, bevor die Seite inkludiert wird.
 
Hmm, ja schon, nur wie? :D Selbst wenn ich das in eine Funktion packe, wird ja schon vorher die Funktion aufgerufen, bevor auf der inkludierten Seite $ItemTitle definiert wird. Deshalb bin ich ja am rätseln und hab keine Ahnung wie ich das ändern kann. ;)
 
Ich verstehe dein Problem nicht ganz: Was verhindert denn die Ausgabe von

PHP:
<title><?php echo $GLOBALS['ItemTitle']." - ".$GLOBALS['siteTitle']." - ";?>jotoma.de</title>

nach dem das andere Script includiert wurde?
 
Achso, ja da meldet PHP dann das hier:
PHP:
<b>Notice</b>:  Undefined index: ItemTitle in <b>D:\Web\projekte\2013\jotoma.de\index.php</b> on line <b>13</b>
Ist ja das komische. Ich definiers ja mit
PHP:
$ItemTitle = htmlspecialchars($Blog['title']);
in der inkludierten Datei.
 
Ok, fassen wir das mal zusammen:

- Du hast in der index.php im oberen Teil den HTML-Code stehen, der für den Kopf der Website notwendig ist (unter anderem auch der Title-Tag).
- Danach hast du eine Switch-Case in der du entscheiden lässt, welches Script includiert werden soll
- Innerhalb der includierten Scripts legst du den Title-Tag fest.

Das kann so nicht funktionieren. Du kannst das Problem nur dadurch lösen, das du die Switch-Anweisung oberhalb der HTML-Ausgabe für den Seiten-Kopf positionierst. Was passiert, wenn du das machst? Geben die includierten PHP-Scripts auch HTML-Code aus?
 
Zurück