Links gehen nicht?

$_GET ist ein globales Array (das heist doch so oder? :D) welches alle per URL übergebenen Werte enthällt.

Diese müssen also erstmal aus dem Array ausgelesen werden, damit sie verfügbar sind. (man könnte $_GET['section'] aber auch genauso direkt in den Switch reinschreiben)

Das ganze ist bei deaktivieren register_globals wichtig, wenn register_globals aktiviert ist werden die übergebenen Werte automatisch in die Variablen reingeschrieben.
Der Kompatibilität wegen sollte man immer davon ausgehen dass register_globals deaktiviert ist.
 
Ah OK! Das löst ein sehr großes Problem von mir!

register_globals Off Off :):)

stand in der php(info) in xampp

Der Quellcode ist doch soweit in ordung? oder kann man es NOCH leichter machen? ich denke nicht oder? sollte ich die iframes mit css machen?
 
Also leichter... ich denke nein. Zumindest fällt mir spontan nicht simpleres ein was nicht um einiges mehr Code fabrizieren würde.

Der Quellcode ist so ansonsten in Ordnung. Zumindest kann ich gerade nichts finden was mich stört, bin aber auch schon sehr Müde um diese Uhrzeit.

Ob du die iframes mit CSS machen willst bleibt eigentlich dir überlassen. Jeder hat andere Wege zum Ziel zu kommen, und solange diese Valide sind und auf den 5 großen Browsern (Firefox, Opera, IE6, IE7, Safari) funktionieren ist meiner Meinung nach alles erlaubt ;)
 
Nur noch so als kleine Anmerkung, obwohl sich das Thema schon erledigt hat:
Also leichter... ich denke nein
Da du die Seite includest, wo der case genau der Selbe ist, kann man es vereinfachen und ne menge Code sparen!
Beispiel:
PHP:
case "kliniken": include("kliniken.php"); break;
Du siehst: case klinken = include("kliniken.php")

Was man daraus machen könnte aber allerdings auch ein risiko darlegen könnte, da man externen Code einschleusen könnte:

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Schule für Kranke in Stuttgart</title>
 
<link rel="stylesheet" type="text/css" href="style.css">
 
</head>
<body>
 
<?
//hier ist die fehlende Zeile
$page = $_GET['section'];
$page .= ".php";
include($page);

?>

</body>
</html>
Damit hängst du an deinen Übergabe Parameter ein ".php" an und includest diese Seite dann. Alternativ könntest du auch prüfen, ob diese Datei vorhanden ist, um ggf. einen 404 Error ausgeben lassen, sollte sie nicht vorhanden sein!
Aber ich weise noch mal auf das Sicherheitsrisiko hin, das mit dieser Variante verbunden ist!

MfG djjada
 
Damit hängst du an deinen Übergabe Parameter ein ".php" an und includest diese Seite dann. Alternativ könntest du auch prüfen, ob diese Datei vorhanden ist, um ggf. einen 404 Error ausgeben lassen, sollte sie nicht vorhanden sein!
Aber ich weise noch mal auf das Sicherheitsrisiko hin, das mit dieser Variante verbunden ist!
Mit diesem Algorithmus eröffnest du allerdings wieder die Schwachstellen, die mit der Positivliste im switch-Konstrukt beseitigt wurden. Denn es findet keine Validierung des eingegebenen Werts statt, was ja gerade die Schwachstelle ausmacht, da jeglicher Wert ungeprüft übernommen wird.

Wenn allerdings etwa mehr Flexibilität gefordert ist, könnte Folgendes dies bieten:
PHP:
$array = array(
	'foobar1' => '/foo.php',
	'foobar2' => '/foo/bar.html',
	// …
);

if( !isset($_GET['section']) || !isset($array[$_GET['section']]) || !file_exists($array[$_GET['section']]) ) {
	if( !is_readable($array[$_GET['section']]) ) {
		header($_SERVER['SERVER_PROTOCOL'].' 500 Internal Server Error');
		echo 'Interner Serverfehler.';
		// exit;
	} else {
		header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
		echo 'Die angeforderte Ressource wurde nicht gefunden.';
		//exit;
	}
} else {
	include $array[$_GET['section']];
}
 
Zurück