includen mit switch

annaloga

Grünschnabel
Hallo Forum.

Ich möchte eines eurer Tuts verwenden.



Es geht um das includen mit switch mit folgendem code

PHP:
<?php
if($_GET['section'] != ""){
    $filename = $_GET['section'].".php";
    if(file_exists($filename)){
        include($filename);
    }
        else{
               echo "Datei nicht gefunden";
        }
}
else{
    #echo "Text für die Startseite oder den Inhalt aus einer Datei Includen!";
    
    $filename = 'home.php';
    if(file_exists($filename)){
        include($filename);
    }
}
?>

Für Seiten welche im Root liegen funktioniert das wunderbar. Aber was mache ich mit Seiten aus einem Ordner?
Wie werden diese hier aufgerufen?

la anna
 
Ich würde dir eher abraten den user Input direckt zu Includen. Es ist eine Sicherheitslücke wenn man einfach alles einbindet was in der Zeile steht ohne zu überprüfen. Mach es lieber wie im Titel angedeuted per Switch, dann sind nur auswahlen auf die Dateien möglich die du explizit angibst. So sind auch Ordner möglich. Wenn alle im Gleichen Verzeichniss liegen kannst du auch ein generelles Prefix davor machen per Variable.

PHP:
<?php
switch ($_GET['section']){
    case 'news':
        include('News/news.php');
        break;
    case 'downloads':
        include('Downloads/downloads.php');
        break;
   
    case 'home':
    default:
        include('home.php');
}
?>
 
Danke für den Hinweis.
Habe Deinen Vorschlag mal umgesetzt:
Wichtig ist mir das ich eine Fehlermeldung ausgebe wenn die geforderte Seite nicht vorhanden/nicht erreichbar ist.
Wäre das ok und sicher?

PHP:
<?php 
switch ($_GET['section']){
{
case 'main2':
if(!@include_once('main2.php'))
{
echo 'Dieses Seite existiert nicht mehr oder ist vorübergehend offline!';
}
break;
case 'main3':
if(!@include_once('ordner/main3.php'))
{
echo 'Dieses Seite existiert nicht mehr oder ist vorübergehend offline!';
}
break;
default:
if(!@include_once('main.php'))
{
echo 'Dieses Seite existiert nicht mehr oder ist vorübergehend offline!';
}
}
?>

Besteht eigentlich auch die Möglichkeit die Ordnerstrucktur in der Url beizubehalten?

Also zb: /index.php?ordner=ordner&page=main3

Wenn ja, was muß dann im Code geändert oder eingefügt werden?

lg anna
 
Zuletzt bearbeitet:
wäre das dann so besser:?

PHP:
<?php


switch ($_GET['page']){

case 'main2':
$filename = 'main2.php';
    if(file_exists($filename)){
        include($filename);
    }else{
               echo '<br><br><div align="center" class="text">Dieses Seite existiert nicht mehr oder ist vorübergehend offline!</div>';
        } 

break;

case 'main4':
$filename = './ordner/main4.php';
    if(file_exists($filename)){
        include($filename);
    }else{
               echo '<br><br><div align="center" class="text">Dieses Seite existiert nicht mehr oder ist vorübergehend offline!</div>';
        } 

break;

default:
if(!@include_once('main.php'))
{
echo '<br><br><div align="center" class="text">Dieses Seite existiert nicht mehr oder ist vorübergehend offline!</div>';
}

}

?>
 
Jetzt mal ganz anders. Habe es nun so verwendet:

PHP:
<?php

switch ($_GET['page']){
    case 'main2':
        include('main2.php');
        break;
    case 'main4':
        include('ordner/main4.php');
        break;
   
    case 'main':
    default:
        include('main.php');
}
?>

Nun würde ich gern erreichen, das wenn eine Seite aufgerufen wird die es nicht gibt, eine Fehlermeldung kommt. (diese seite ist nicht vorhanden.)
So wie es momentan ist, werde ich beim Aufruf einer nicht vorhandenen seite auf die Startseite geleitet.

So sollte es aber nicht sein.

Wie funktioniert das?

lg anna
 
Indem du das default von dem main trennst.

PHP:
<?php

switch ($_GET['page']){
    case 'main2':
        include('main2.php');
        break;
    case 'main4':
        include('ordner/main4.php');
        break;
   
    case 'main':
        include('ordner/main4.php');
        break;
    default:
        include('error.php');
        // oder text hinschreiben...
}
?>
 
Zurück