Variablenübergabe bei verschiedenen PHP-Versionen

rolandgoebbel

Grünschnabel
Hallo!

Ich habe unter PHP 4.3.4 folgendes switch-case-Szenario zum Laufen gebracht:

PHP:
switch ($_GET['id']) {

	   case 1 :
	   $name = "vita";
	   $picture = $name;
	   $title = "Vita";
	   break;
	
	   case 2 :
	   $name = "publikationen";
	   $picture = $name;
   	   $title = "Publikationen";
	   break;

Später im HTML-Teil dieser PHP-Datei werden die Variablen ganz einfach per if und else abgefragt:

Code:
<a href="<?php echo $PHP_SELF."?id=1&subid=11"?>"
onMouseOut="MM_swapImgRestore()"
onMouseOver="MM_swapImage('vita','','../navigation/nav_vita_ro.gif',1)">
<?php if ($id==1) {?><img src="../navigation/nav_vita_ro.gif" height="25" border="0">
<?php } else { ?><img src="../navigation/nav_vita.gif"  height="25" border="0">
<?php } ?></a>

Der URL der funktionierenden Seite ist: http://www2.uni-jena.de/suckfuell/person/person.php?id=1&subid=11

Nun möchte ich mit der Seite auf einen neuen Server umziehen. Dort ist PHP 4.3.9 vorinstalliert.
Die neue URL lautet: http://www.msuckfuell.net/person/person.php?id=1&subid=11

Nun scheint hier die Variablenübergabe nicht zu funktionieren, so dass Menü und Untermenü im schwarzen Balken nicht richtig angezeigt werden. Der Quellcode ist jedoch identisch.
Komischerweise kann man z.B. über http://www.msuckfuell.net/person/person.php?id=2&subid=23 manuell die Unterseiten aufrufen.

Warum werden die über $_GET['id'] und $_GET['subid'] festgelegten Variablen später bei den eigentlich grundlegenden if- und else-Befehlen nicht übernommen?

Gruß,

Roland
 
Zuletzt bearbeitet:
Hallo!

Versuch es mal mit $_SERVER['PHP_SELF'] anstatt $PHP_SELF.
Möglicherweise ist bei dem neuen Hoster nämlich register_globals=OFF eingestellt.

Gruss Dr Dau
 
Hallo Dr Dau,

herzlichen Dank für deine schnelle Antwort. In der Tat: Beim alten Hoster ist register_globals=ON gesetzt, beim neuen Hoster =OFF, so wie du vermutet hast. Allerdings hat das Ersetzen von $PHP_SELF durch $_SERVER['PHP_SELF'] nicht weitergeholfen.

Ich habe aber gerade eine andere Lösung gefunden, die ich jedoch noch nicht ideal finde: Benenne ich meine .php-Datei einfach in .php3 um, so wird sie vom ebenfalls auf dem neuen Server installierten PHP 3 verarbeitet und alles funktioniert einwandfrei, so wie ich es mir vorstelle. Allerdings habe ich keine Lust, alle .php-Dateien nun manuell in .php3 umzubenennen. Außerdem: Warum sollte ich den Rückschritt vornehmen, wenn alles mit PHP 4.3.4 schon perfekt gelaufen ist?

Glaubst du, dass der Hoster (in diesem Fall STRATO) das Problem beheben kann, indem er für meine Domain register_globals=ON setzt?

Zum Nachprüfen der PHP-Infos auf altem und neuem Host:

ALT: http://www2.uni-jena.de/suckfuell/info.php
NEU: http://www.msuckfuell.net/info.php

Die neue, funktionierende PHP3-Version meiner Website findest du hier:
http://www.msuckfuell.net/person/person.php3?id=2&subid=21&pub=1
(klick dich einfach mal im schwarzen Menübalken durch).

Vielen Dank schon mal für die bisher geleistete Hilfe.
Gruß,

Roland
 
Den eigentlichen Link finde ich schon seltsam

<a href="<?php echo $PHP_SELF."?id=1&subid=11"?>"

versuch doch mal

<a href="<?php $_SERVER["PHP_SELF"]."?id=1&subid=11"?>";

KAnn auch sein das Du noch ein http:// davor schreiben musst bin mir da nun so spontan nicht so sicher.

des weiteren hier würde ich die Variablen aus der URL immer mit $_GET[" "] abrufen

<?php if($_GET["$id"]==1) {?><img src="../navigation/nav_vita_ro.gif" height="25" border="0">

Und was register Globals = on angeht , naja er hat sie schon aus guten Grund auf off gestellt , ich weiss selber noch nicht genau warum sie auf off stehen sollten . Aber soweit ich weiss hast du wenn sie auf on stehen nen riesen Tür geöffnet.
 
Zuletzt bearbeitet:
Hi Fips,

danke für den Vorschlag. Leider hat das Ersetzen von
if ($id==1) durch if($_GET["$id"]==1) nicht geholfen.
Stattdessen funktioniert das Menü jetzt auch auf meinem Testserver (PHP 4.3.4) nicht mehr richtig.
Woran könnte es noch liegen? Vielleicht doch an den auf OFF gesetzten register_globals?

Roland
 
Ja natürlich liegt das an den register_globals off ;)

Wenn oben in der URL nun steht ...?id=1

dann kannst du mit $id ausrufen lassen das es 1 ist , aber richtig wäre $_GET["id"] damit würdest du die Variable oben auslesen.
Huch mein Fehler , es muss doch heissen $_GET["id"] nicht $_GET["$id"] .
 
Problem gelöst!

Genau das war's!
Mit $_GET['id'] funktioniert es perfekt. (Ich habe übrigens die einfachen Anführungsstriche verwendet).

In diesem Sinne, herzlichen Dank euch allen für die tatkräftige Unterstützung.

Bis zum nächsten Mal,

Roland
 
Du solltest grundsätzlich mit den Superglobalen arbeiten (alte Scripte sind entsprechend zu ändern).
Dass dein Script bei deinem altem Hoster lief, zeigt nur dass er sich Support Anfragen erboster Kunden ersparen wollte.
Denn register_globals ist seit PHP 4.2.0 standardmässig auf off eingestellt, er hat es aber bei PHP 4.3.2 (wissentlich) auf on gestellt.

Mit $id hätte ich eigentlich auch sehen müssen..... war wohl doch schon etwas zu spät (früh). ;)
So weit ich weiss, ist es egal ob Du einfache oder doppelte Anführungsstriche nimmst..... ich nehme auch nur die einfachen.
Ich persönlich gebe $_SERVER['PHP_SELF'] i.d.R mit einem echo aus (z.b. bei Links).
Man könnte auch nur <? anstatt <?php schreiben, ich finde allerdings dass sich letzteres einfacher auffinden lässt, grad wenn der Code mehrere PHP Abschnitte hat..... besonders wenn dieser mitten im HTML ist, wie z.b. bei deinem Link.
 
Hallo Dr Dau,

genau das mit den Superglobalen habe ich jetzt gelernt.
Vielen Dank euch nochmal für die so rasche und gute Hilfe. Ihr seid wirklich Helden.

Gruß,

Roland
 
Zurück