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



## Sascha1006 (29. November 2009)

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:


```
<?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.


```
<?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


```
<?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


----------



## DeluXe (29. November 2009)

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

Allerdings ist folgendes Käse:

```
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:

```
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.


----------



## Sascha1006 (29. November 2009)

hmm

also der 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.


```
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


----------



## Sascha1006 (29. November 2009)

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...?


```
<?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


----------



## Yaslaw (30. November 2009)

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

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

?>
```


----------



## Sascha1006 (30. November 2009)

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. 


```
<?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'];
    }

?>
```


----------



## 2Pac (2. Dezember 2009)

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


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

Nur am Rande, falls es dich interessiert


----------



## queicherius (2. Dezember 2009)

2Pac hat gesagt.:


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




Er ruft doch sowiso aus einer Whitelist auf -.-


----------

