PHP: Navigations erweiterung

Der_baum

Mitglied
Schönen guten morgen zusammen,

ich komme mit der Erweiterung dieses Scripts leider nicht weiter, habe mir zwei Bücher gekauft und das PHP Manual unters Kopfkissen gelegt. Leider bin ich da noch zu sehr am Anfang meiner Karriere.

PHP:
include'config.php';
if(isset($_GET['section']) AND isset($main[$_GET['section']])) 
{ 
if(!file_exists($main[$_GET['section']])) echo "Diese Seite wurde noch nicht implementiert."; 
include $main[$_GET['section']];  
} 
else 
{ 
include $main['error'];  
}

Alle benötigten Arrays habe ich erstellt, $main, $sub etc., ….

Nun würde ich gerne, sofern ich kein Include des $main Arrays brauche, etwas aus dem $sub Array einbinden, allerdings will ich trotzdem einen Wert des $main Arrays behalten.
Was mir zum Beispiel gerade einfällt:

index.php?section=Klassen&ub=Schueler


Grüße,
Daniel
 
Naja das main und das sub Array sind ja unabhängig voneinander. Da kannst du drin rumwursteln wie du möchtest, das ist dem entsprechend anderen völlig Schnuppe:

PHP:
if($main_include_is_needed)  {
  include($main['SomeWhat']);
}else{
  include($sub['SomeThing']);
}

Die Struktur der beiden Arrays wird überhaupt nicht angekratzt.
 
Hi,

super danke für deine Antwort. Ich glaube ich habe die Problematik noch nicht so ganz 100 prozentig offen gelegt. In der restlichen index.php stehen noch if-Abfragen. Diese vergleichen die section und inkludieren dann eine andere Navigation. Was anderes, öffnet sich den durch deine Methode eine Sicherheitslücke im Script?

Was ich auch nicht will, ist das die schueler.php in die klassen.php inkludiert wird, sondern das sie diese komplett austauscht, allerdings "section=Klassen" stehen bleibt, da ja Schüler ein (Unter-)Bereich der Klassen ist.
Funktioniert das mit deinem Codeschnipsel auch?

Ist das so einigermaßen verständlich geschrieben?


Grüße,
Daniel
 
Wie ichs verstehe:

- Wenn nur der Parameter 'section' gesetzt ist, soll der Name der zu inkludierenden Seite aus dem $main - Array gelesen werden
- Wenn die Parameter 'section' UND 'sub' gesetzt sind, soll der Name der zu inkludierenden Seite aus dem $sub - Array gelesen werden

Right?

Jo das geht natürlich:
PHP:
if(isset($_GET['sub']))  {
  include($sub[$_GET['sub']]);
}elseif(isset($_GET['section'])) {
  include($main[$_GET['section']]);
}else{
  //Mach sonstwas
}
 
Hi,

dann habe ich's ja doch einigermaßen verständlich geschrieben. :)
Ich versuche es mal einzubinden, wenn ich nicht zurecht komme, melde ich mich nochmal.
Trotzdem schonmal herzlichen Dank für deine Hilfe.

Daniel
 
Mahlzeit!!

Script ist fertig und funktioniert einwandfrei, vielleicht kann trotzdem nochmal jemand, oder du Igäl, drüberschauen und ein paar anmerkungen machen, falls jemanden was auffällt.

PHP:
include'config.php';

if(isset($_GET['sub']) AND isset($sub[$_GET['sub']]))
{  
if(!file_exists($sub[$_GET['sub']])) echo "Diese Seite wurde noch nicht implementiert. - Sub";  
include $sub[$_GET['sub']];    
}
elseif(isset($_GET['section'])){
if(isset($_GET['section']) AND isset($main[$_GET['section']]))
{  
if(!file_exists($main[$_GET['section']])) echo "Diese Seite wurde noch nicht implementiert. - Main";  
include $main[$_GET['section']];   
} 						
}else{ 
include $main['error'];   
}

Grüße,
Daniel
 
PHP:
include'config.php';

//Warum nicht gleich $sub[$_GET['sub']] prüfen?
if(isset($_GET['sub']) AND isset($sub[$_GET['sub']]))
{  
if(!file_exists($sub[$_GET['sub']])) echo "Diese Seite wurde noch nicht implementiert. - Sub";
//Wenn file_exists von oben fehlschlägt, kein include machen
include $sub[$_GET['sub']];    
}
elseif(isset($_GET['section'])){
//Warum prüfst du nochmals das gleiche hier wie eine Zeile zuvor schon?
if(isset($_GET['section']) AND isset($main[$_GET['section']]))
{  
if(!file_exists($main[$_GET['section']])) echo "Diese Seite wurde noch nicht implementiert. - Main";
//auch hier kein include machen, wenn file_exists fehl schlägt.
include $main[$_GET['section']];   
}                         
}else{ 
include $main['error'];   
}
 
Hi,

Warum nicht gleich $sub[$_GET['sub']] prüfen?
Ich dachte, es wäre gut um das Script vor Injection zu schützen!?

Wenn file_exists von oben fehlschlägt, kein include machen
Sonst bekomme ich immer eine leere Seite inkludiert. Lasse ich die Zeile
PHP:
include $sub[$_GET['sub']];
drin, wird mir die inkludierte Seite angezeigt.

Warum prüfst du nochmals das gleiche hier wie eine Zeile zuvor schon?
Da hast du recht.Erledigt:
PHP:
elseif(isset($_GET['section'])){ 
if(!file_exists($main[$_GET['section']])) echo "Diese Seite wurde noch nicht implementiert. - Main";

auch hier kein include machen, wenn file_exists fehl schlägt.
Selbe wie oben, nur das hier dann die Seiten aus dem $main Array nicht mehr inkludiert werden.

Gruß,
Daniel



EDIT:

So
PHP:
if(isset($_GET['section']) AND isset($dateien[$_GET['section']]))
steh es auch im Tutorial. Jetzt bin ich verwirrt.... :confused:
 
Zuletzt bearbeitet:
Hi,

ich bin gerade so am weiterentwickeln der Seiten, da fällt mich auf, dass ich doch mehr oder weniger am ende des Scripts bin, da ich nun keine weiteren "Unterbereiche" mehr einbinden kann, da elseif und dann else, jetzt gehts ja nicht mehr weiter....

Angenommen ich bräuchte jetzt:
index.php?section=Schule&ub=Klassen&ub2=Schueler&ub3=Schueler_Max_Mustermann&id=2
wäre es ja mit jetztigem Script nicht mehr lösbar.

Nur zur erklärung welchen Sinn das ganze hat:

  • Schule = Hauptbereich
  • Klassen = Klassen ;)
  • Schüler = Schüler der Klassen :D
  • Schüler_Max_Mustermann = Profilseite des Schüler
  • und wenn dieser jetzt noch eigene Seiten erstellen darf bekommen diese die ID

Da werde ich mir wohl irgendwie was neues überlegen müssen...


Gruß Daniel
 
Zuletzt bearbeitet:
Es hält dich nichts davon ab, weitere elseif's einzufügen ;)

Ich würde jedoch auf den Gebrauch so vieler Parameter verzichten, das Ganze auf einen reduzieren und den if-Baum durch einen switch ersetzen. Bei Bedarf kannst du mir mal ne PM machen. Dann setz ich dir auseinander, wie ich mein Sectionhandling aufgebaut habe.
 
Zurück