include versagt auf localhost!

trekmaster

Grünschnabel
Hallo!

Ich habe eine Seite namens index.php erstellt und folgenden Code in den Links eingefügt:
--------------------------------
<a href="./index.php?contentid=main" target="_parent">Startseite</a>
<a href="./index.php?contentid=impressum" target="_parent">Impressum</a>
--------------------------

Hier ist das div-tag, in das die zwei externen Files namens impress.php und main.php, die oben mit den Variablen "impressum" und "main" deklariert wurden, included werden sollen:
----------------------------------
<div style="width:650px; height:435px;">

<?php
if($contentid=="")
{include("./main.php");}
if($contentid=="main")
{include("./main.php");}
if($contentid=="impressum")
{include("./impress.php");}
?>

</div>
----------------------------------

Der Haken an der Sache ist, dass der Vorgang nur online funktioniert. Auf meinem lokal installierten Apache 1.3 Server hingegen wird zwar die Startseite (main) geladen, jedoch passiert beim Klick auf Impressum gar nichts, selbst, wenn ich den Link in einem neuen Fenster öffnen lasse, erscheint nur wieder die Startseite wie beim normalen Aufruf von index.php. Hat jemand eine Ahnung, was da falsch läuft!? :rolleyes:
 
Original geschrieben von kniedel
ach und verwende nicht

PHP:
$contentid


sondern

PHP:
$_GET['contentid']


Ok, wo müsste ich das denn rein theoretisch in meinem Code-Beispiel einsetzen!? Sähe das so z.B. aus: $contentid=$_GET['impressum']. An welche Stelle käme das?
Im übrigen habe ich das Problem auf andere Art gelöst. Man muss in der "php.ini" den Eintrag "register_globals" auf "On" setzen. Dieser war bei mir auf "Off" gesetzt. Das erklärt wohl auch, warum es online und nicht lokal bei mir auf dem Rechner funktioniert hat. Mein Code ist soweit also in Ordnung. Wäre trotzdem schön, wenn wir das mit dem GET noch schnell lösen könnten.
 
Da hat aber einer das Prinzip noch nicht verstanden.

Wenn du register_globals auf on setzt, wird unter anderen (!) für jede deiner Werte, die du über http://www.foo.com?value=abc an deine Seite übergibst eine Variable angelegt: $value

Ist es auf off, musst du sie über $_GET["value"] ansprechen. $_GET stell also deinen Query-String dar.

Wenn in deinem Fall, die Variable $contentid bei register_globals=on verfügbar ist, wie muss man denn dann dein $_GET-Array indizieren?

:rolleyes:
 
Versuche es mal so
Achtun das ./ ist ? Versuch mal ../

PHP:
<?php

if (file_exists("./$contentid")) 
{ include ("./$contentid") }
if($contentid==FALSE)
{ include("./main.php"); }


?>
 
Tja, jetzt hat man mir gesagt, dass das mit dem register_global="On" absoluter Murks ist und lediglich schlechten Code verarbeiten soll, gar ein Sicherheitsrisiko darstellt! Was ist dran?

Hättet Ihr noch ein konkretes Beispiel speziell mit $_GET? Das wird mir von allen Seiten vorgeschlagen.
 
Register globals:On ist ein Sicherheitsrisiko, weil du nie weisst, woher eine Variable kommt.

Stell dir vor, eine login.php.....Abfrage nach Benutzername und Passwort:
Code:
if($name='richtigerName'&&$pass='richtigerPass')
{
$eingelocht=true;
}

if(isset($eingelocht))
{
echo 'Wieviel Geld möchten Sie überweisen?';
}
Ich bräuchte nur login.php?eingelocht=blabla aufrufen.....und wäre drinnen.

Du wirst jetzt sagen....so einen Quatsch macht doch keiner...aber bist du sicher, dass alle deine Skripte dagegen abgesichert sind? Ich würde bei mir nicht drauf wetten:-)
 
genau, register globals sollten lieber aus bleiben ;)
aber nun nochmal zur erklärung:
PHP:
switch ($_GET['contentid']) {
	case "main": include("./main.html"); break;
	case "impressum": include("./impressum.html"); break;
	default: include("./main.php"); break;
}

Ein Link zum Impressum sieht dann so aus:
Code:
http://www.deineseite.de/index.php?contentid=impressum

wobei default eingesetzt wird wenn deine $_GET['contentid'] nix beinhaltet.
 
Zurück