Navigation über die URL "index.php?section=index

S

Sascha1006

hallo,

ich habe ein problem mit einem link wie z.B. index.php?area=dbk&content=info
habe mir das tut dazu angeschaut, welches aber leider nur bis index.php?area=dbk geht.

wie gesagt würd ich aber gerne längere links haben...

nun habe ich versucht das ganze bissl umzustellen, was mir nicht ganz gelungen ist...^^
hier mal mein ursprünglicher code:

Code:
<?php

include('linkinfo.php');

if(isset($_GET['area']) AND isset($bereich[$_GET['area']]))
{
 if(!file_exists($bereich[$_GET['area']])) echo "Die Datei ist nicht vorhanden.";

 include $bereich[$_GET['area']];
}
else
{
 include $dateien['news'];
}
?>

diesen code habe ich nun wie folgt geändert.

Code:
<?php

include('linkinfo.php');

if(isset($_GET['area']) AND isset($bereich[$_GET['area']]))
{
 if(!file_exists($bereich[$_GET['area']])) echo "Die Datei ist nicht vorhanden.";

 include $bereich[$_GET['area']];

         if(isset($_GET['content']) AND isset($dateien[$_GET['content']]))
         {
         if(!file_exists($dateien[$_GET['content']])) echo "Die Datei ist nicht vorhanden.";

         include $dateien[$_GET['content']];
         }
}
else
{
 include $dateien['news'];
}
?>

und dann hier noch die linkinfo.php

Code:
<?php

$dateien = array();

//area
$bereich['dbk'] = "area/dbk/";
$bereich['bsn'] = "area/bsn/";
$bereich['prg'] = "area/prg/";
$bereich['content'] = "area/content/";

//content
$dateien['news'] = "area/content/news.php";
$dateien['formular'] = "formular2.php";
$dateien['info'] = "info.php";
$dateien['material'] = "material.php";
$dateien['aufgaben'] = "aufgaben.php";


?>

hoffe irgendwer kann mir bei meinem problemchen helfen. =)

Gruss

Sascha
 
Es wäre noch sehr vorteilhaft zu wissen, was denn nicht funktioniert, bzw. was du erwartest. ;)

Allerdings ist folgendes Käse:
PHP:
if(isset($_GET['area']) AND isset($bereich[$_GET['area']]))
{
 if(!file_exists($bereich[$_GET['area']])) echo "Die Datei ist nicht vorhanden.";

 include $bereich[$_GET['area']];
}
else
{
 include $dateien['news'];
}

Auch wenn die Datei nicht vorhanden ist, versuchst du sie mittels include() zu laden, gibst vorher jedoch aus, dass die Datei nicht existiert. Das ergibt doch keinen Sinn. ;)

Was du wohl erreichen wolltest ist folgendes:
PHP:
if(isset($_GET['area']) AND isset($bereich[$_GET['area']]) and file_exists($bereich[$_GET['area']])) {
 include $bereich[$_GET['area']];
}
else
{
 include $dateien['news'];
}

Das selbe gillt für die If-Bedingungen im zweiten Code-Ausschnitt. :)
 
hmm

also der code..

Code:
<?php

include('linkinfo.php');

if(isset($_GET['area']) AND isset($bereich[$_GET['area']]))
{
 if(!file_exists($bereich[$_GET['area']])) echo "Die Datei ist nicht vorhanden.";

 include $bereich[$_GET['area']];
}
else
{
 include $dateien['news'];
}
?>

hatte eig vorher schon funktioniert.
nur wenn ich versuch, dass ich den link erweitern kann, also dass ich
index.php?area=dbk&content=info
aufrufen kann funktioniert nicht.

wenn ich den code wie oben bei mir beschrieben änder kommt folgende fehlermeldung.

Code:
Warning: include(D:\wamp\www\seite\area\dbk) [function.include]: failed to open stream: Permission denied in D:\wamp\www\seite\\index.php on line 55

Warning: include() [function.include]: Failed opening 'area/dbk/' for inclusion (include_path='.;C:\php5\pear') in D:\wamp\www\seite\\index.php on line 55
Die Datei ist nicht vorhanden.
Warning: include(info.php) [function.include]: failed to open stream: No such file or directory in D:\wamp\www\seite\\index.php on line 61

Warning: include() [function.include]: Failed opening 'info.php' for inclusion (include_path='.;C:\php5\pear') in D:\wamp\www\seite\\index.php on line 61

also scheint er irgendwie nicht zu verstehen, dass er nach area/dbk/ noch weiter machen soll, dass der link dann area/dbk/info.php ergibt
 
huhu,

erstma sorry für den doppelpost, aber hab hier grad ma bissl überlegt, ist es nicht rein theoretisch irgendwie möglich das wie folgt aussehn zu lassen...?

Code:
<?php

include('linkinfo.php');

$link = $bereich[$_GET['area']]$dateien[$_GET['content']]

include $link;

?>

das is natürlich nur sehr primitiv, aber irgendwie so müsste das doch sein oder nicht?
oder ist das technisch gar nicht machbar die teile aneinander zu reihen damit sie nen vernünftigen link ergeben?

hab ja mal dein beispiel genommen, aber dabei will er ja nur den link index.php/area/dbk/ aufrufen, aber das sind ja nur ordner. da muss ja noch irgendwie die info.php dran...

hoffe mir kann jmd helfen =)

Gruss

Sascha
 
Du solltest $bereich[] und $dateien[] mit einem "." zusammensetzen. Ebenfalls währe ein ; am Ende noch nützlich.
Ansonsten sollte es schon gehen.

Dan ggf noch prüfen ob die Datei vorhanden ist..

PHP:
<?php

    include('linkinfo.php');
    
    $link = $bereich[$_GET['area']].$dateien[$_GET['content']];
    
    if (file_exists($link)){
        include $link;
    } else {
        echo "File {$link} not found";
    }

?>
 
huhu,

vielen lieben dank, klappt nun perfekt =)

hab den code nun noch an das komplexere angepasst. poste den hier nochmal, für leute die das selbe problem haben. :)

Code:
<?php

    include('linkinfo.php');

    if(isset($_GET['area']) AND isset($bereich[$_GET['area']]) and isset($_GET['content']) AND isset($dateien[$_GET['content']]) and file_exists($bereich[$_GET['area']].$dateien[$_GET['content']])){
    include $bereich[$_GET['area']].$dateien[$_GET['content']];
    }
    else
    {
    include $dateien['news'];
    }

?>
 
Kleiner Sicherheitstipp. Lass keinen direktaufruf der php Dateien zu. Sonst kann ein User der weiß wie die Seite heißt, diese auch anders ansteuern.

PHP:
if( $_SERVER['SCRIPT_FILENAME'] == __FILE__ )
{
 echo "<div class='error'>Die Seite darf nicht direkt aufgerufen werden!</diV>";
}

Nur am Rande, falls es dich interessiert ;)
 
Kleiner Sicherheitstipp. Lass keinen direktaufruf der php Dateien zu. Sonst kann ein User der weiß wie die Seite heißt, diese auch anders ansteuern.

PHP:
if( $_SERVER['SCRIPT_FILENAME'] == __FILE__ )
{
 echo "<div class='error'>Die Seite darf nicht direkt aufgerufen werden!</diV>";
}

Nur am Rande, falls es dich interessiert ;)


Er ruft doch sowiso aus einer Whitelist auf -.-
 
Zurück