• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage zu/Problem mit php switch case/inlcude

Amalia

Neues Mitglied
Hallo zusammen,

ich hab da eine Frage zum includieren von Unterseiten mit hilfe von Links.

Hier zunächst aber mal der Stand der Dinge:

Auf meiner Seite http://imobilus.im.funpic.de befindet sich eine Navigation (die roten Lesezeichen).

Die dahinter befindlichen Lilnks sind so aufgebaut:

Die Links
PHP:
<ul>
<li><a href="index.php?haupt=home" class="b1" ></a></li>
<li><a href="index.php?haupt=geschichten" class="b2"></a></li>
<li><a href="http://116812.iboox.com/" class="b3"></a></li>
<li><a href="index.php?haupt=linktipps" class="b4"></a></li>
<li><a href="index.php?haupt=aboutme" class="b5" ></a></li>
</ul>
Dazu gehört folgende config.php
PHP:
<?php
$haupt = array(
         'home'=>'inc/home.inc.php',
         'geschichten'=>'inc/geschichten.inc.php',
         'linktipps'=>'inc/linktipps.inc.php',
         'aboutme'=>'inc/aboutme.inc.php'
         );
?>
Dieses Schema stammt von hier:
Space² | Framesets mit PHP simulieren
In einem anderen Thread dieses Forums wurde darauf verwiesen. Ich muss allerdings sagen, dass ich auch nach dem Lesen diverser anderer Seiten zu diesem Thema nicht wirklich verstanden habe, wie es geht, bzw. was da gemacht wird.

Das Einzige was ich ahne/vermute: Mithilfe der Config.php weise ich den Seiten (home, geschichten etc.) eine Art Lesezeichen zu, der in den Links wieder auftaucht und durch die der Server weiß, welchen Inhalt (oder welche Seite) er in den div laden soll.

Aber wie mach ich selbiges für Seiten die von einer dieser Seiten aufgerufen werden soll?

Hier einmal ein Beispiel(hab es heute nicht so mit dem erklären):
ÜBer die Navi kommt man auf die Seite Geschichten. Dort gibt es eine Story mit dem Titel: "Der endgültige Sieg" mit dazugehörigen Links zu den Kapiteln dieser Geschichte.
Das erste Kapitel zu dieser Story ist folgendermaßen auf dem Server abgelegt inc/sieg/kapitel01.inc.php

Wie schaffe ich es, der Datei kapitel01.inc.php so ein Lesezeichen zu verpassen, damit die Seite beim Klick auf 01 auf der Seite Geschichten aufgerufen wird?
Vorrausgesetzt meine Annhame mit dieser "Lesezeichen"-verteilung über die Config ist richtig.

Falls nicht, vielleicht kann es mir hier noch mal jemand erklären? Könnte ja sein, dass ich es dann verstehe.

Vielen Dank schon mal für eure mühe

Grüße
Amalia
 
Werbung:
Hi :)

Ich gehe einfach mal kurz auf den Link ein den du gepostet hast:

Was ist eigentlich das Ziel dieser Php-Skriptes? Es soll die Navigation vom Inhalt getrennt werden. Außerdem werden die Links nur durch einen String symbolisch dargestellt.

Letztendlich besteht deine Seite aus mindestens 4 "Teilseiten".

Hier mal am Beispiel der index.php:

Sie besteht aus der index.php, einer index.php (die aber nicht im root-Verzeichnis liegt!) einer navigation.php und der config.php.

Wie entsteht daraus eine einzige Seite? Nun, du ruftst z.B: deine index.php so auf:

Code:
index.php?section=news
Das ist ein GET-Formular was du hier mitschickst. Du kannst nun diese $_GET-Variable mit [$_GET['section'] auslesen. Das tust du dann auch. Jetzt prüfst du mit deinem Skript was in dieser Variable steht und fügst dementsprechend einen Inhalt ein. (Hier die news/index.php)

Deine Index.php (im root-Verzeichnis) ist also sowas wie ein Template das du dann mit Inhalt füllst.

Deine eigentliche Frage verstehe ich nicht ganz. Deine Navigation passt sich doch deinem Inhalt nicht an? Sie wird doch immer gleich angezeigt? Wie soll also eine Seite in der Rubrik Geschichten angezeigt werden? Vielleicht kannst du das versuchen nochmal zu erklären ;)

Ansonsten muss ich dir dringend raten ein Impressum zu schreiben. Darüber kann man eine Menge im Internet lesen (Impressumspflicht)

Mfg Mo3b
 
(seufz)Ich fürchte ich hab wohl noch weniger verstanden, als ich angenommen habe.
Und was du mir da versucht hast, zu erklärenhab ich auch nicht wirklich verstanden. (Sorry)

Was ich will... ich denke ich fang da mal ganz von vorne an.

Mein grundlegendes Ziel ist es von meinem Framedesgin weg zu kommen, während ich meine ganze Seite ein neues Design verpasse.

Das einzige was immer wieder neu geladen werden soll ist der Inhalt der Seite. Also der Text der auf dem Buch-Hintergrund zu lesen ist. Auf der Startseite eben der Begrüßungstext.

Und meine Idee war es, das mit php zu realisieren, weil ich im Netz gelesen habe, dass es geht.
Ja, auch den Hinweis auf AJAX hab ich gelesen, aber das hat ja wohl mit JavsScript zu tun, was durchaus deaktiviert sein kann.

Da ich mit Java Script noch nie was zu tun gehabt habe und ich zu diesem AJAX rein gar nichts hilfreiches finden konnte, hab ich mich eben für php entschieden...

und versucht das mit dem Script aus dem ersten Post versucht umzusetzen. Es funktioniert ja auch so wie ich es möchte. (Auch wenn es wohl falsch umgesetzt ist, wenn ich dich richtig verstanden habe.)

Was jetzt noch fehlt, ist, dass ich die Links die auf der Seite Geschichten liegen, aufrufen kann.

Aber es ist wohl klüger, erst mal das andere richtig zu lösen.

Danke für den Hinweis, bzgl. der Impressumspflicht.
Ich hab gerade mal kurz gegoogled, demnach kommt für mich allenfalls die eingeschränkte Impressumspflicht gelten. Da der Inhalt nicht Privat ist, aber auch keinem gewerblichen Zweck dient.
Ein sog. Disclaimer, der klar aussagt, dass ich damit kein Geld verdiene, ist sowieso noch in Arbeit.

lg
Amalia
 
Zuletzt bearbeitet:
Werbung:
Hi,
keine Sorge, alles was du bis jetzt gemacht hast sieht doch ganz gut aus :) . Das du deine Seite mit php aufbaust ist auch die richtige Entscheidung gewesen.

Code:
Es funktioniert ja auch so wie ich es möchte. (Auch wenn es wohl falsch umgesetzt ist, wenn ich dich richtig verstanden habe.)
Nein, du hast das schon richtig gemacht ;) Ich habe dir nur nochmal versucht zu erklären was du gemacht hast :razz:

Php und javascript unterscheiden sich grundlegend, php wird auf dem Server ausgeführt, javascript auf dem Client-Rechner. Wie das alles so funktioniert ist für dich erstmal nicht wichtig, du solltest dir nur merken, dass php erst von einem Server interpretiert werden muss und danach reiner(!) Html-Code zurück zum Benutzer kommt.


So, nun zum eigentlichen Problem:

Hier erstmal die einfachste Möglichkeit:

Du hast einen Link der 22 heist. Diesen möchtest du nun auf einen Inhalt verlinken. Dafür schreibst sowas z.B. in die Hauptdatei für die Geschichten:

Code:
<a href="index.php?geschichte_site=22">22</a>

Jetzt schreibst du noch in die config.php:

Code:
    // Geschichte -> 
    $geschichte_site = array( 
        '22'=>'geschichte/22.php', 
    );

Jetzt benötigst du noch einen Ordner geschichte in dem die Datei 22.php liegt. Schreib mal ob das klappt. :)
 
Hab alles so gemacht, wie du geschrieben hast,
ich werde aber nur auf die Begrüßungsseite geleitet.

EDIT:

Schäm... Hab da doch nun glatt was vergessen

<?php
if(isset($_GET['haupt']) AND isset($haupt[$_GET['haupt']])) {
include $haupt[$_GET['haupt']];
} else {
include $haupt['home'];
}
?>

das steht in der Index.php
Ich nehme an, dass es daran liegt, da da nur haupt angegeben ist...
da muss vermutlich noch irgendwas mit Geschichte_site dazu, oder?
 
Zuletzt bearbeitet:
War gedanklich schon einen Schritt weiter ;)

Also deine Index-Seite sollte etwa so aussehen:

Code:
[COLOR=#000000][COLOR=#0000bb]<?php 
[/COLOR][COLOR=#ff8000]// index.php 
 
    // Includes -> 
    [/COLOR][COLOR=#007700]include ([/COLOR][COLOR=#dd0000]'inc/config.php'[/COLOR][COLOR=#007700]); 
 
[/COLOR][COLOR=#0000bb]?> 
[/COLOR]<html> 
<head> [/COLOR]
[COLOR=#000000] <title>_TITEL_</title> 
</head> 
<body> 
<div id="box_header">_HEADER_</div> 
<div id="box_navigation">[COLOR=#0000bb]<?php [/COLOR][COLOR=#007700]include([/COLOR][COLOR=#dd0000]'navigation.php'[/COLOR][COLOR=#007700]);[/COLOR][COLOR=#0000bb]?>[/COLOR]</div> 
<div id="box_content"> 
[COLOR=#0000bb]<?php 
    [/COLOR][COLOR=#ff8000]// Inhalt laden -> 
    [/COLOR][COLOR=#007700]include [/COLOR][COLOR=#0000bb]$section[/COLOR][COLOR=#007700][[/COLOR][COLOR=#0000bb]$_GET[/COLOR][COLOR=#007700][[/COLOR][COLOR=#dd0000]'section'[/COLOR][COLOR=#007700]]];     
[/COLOR][COLOR=#0000bb]?> 
[/COLOR]</div> 
<div id="box_footer">_FOOTER_</div> 
</body> 
</html>[/COLOR]
Somit testet du nur auf section.

So sollte der Link aussehen:

Code:
<a href="index.php?haupt=22">22</a>
und das muss die config aussehen:

Code:
[COLOR=#000000][COLOR=#ff8000]    // Hauptsektionen -> 
    [/COLOR][COLOR=#0000bb]$haupt [/COLOR][COLOR=#007700]= array( 
        [/COLOR][COLOR=#dd0000]'news'[/COLOR][COLOR=#007700]=>[/COLOR][COLOR=#dd0000]'news/index.php',
        [/COLOR][/COLOR][COLOR=#000000][COLOR=#dd0000]'22'[/COLOR][COLOR=#007700]=>[/COLOR][COLOR=#dd0000]'geschichte/22.php'[/COLOR][/COLOR]
[COLOR=#000000][COLOR=#007700]); [/COLOR][/COLOR]
EDIT: sry das heist ja haupt bei dir und nicht section. Dein array haupt muss also den Eintrag "'22'=>'geschichte/22.php'" enthalten. (Durch Komma von dem vorherigen Eintrag getrennt)
 
Zuletzt bearbeitet:
Werbung:
nun bekomm ich eine Fehlermeldung

Code:
[B]Warning[/B]:  include() [[URL="http://localhost/Buchlayout/function.include"]function.include[/URL]]: Filename cannot be empty in [B]C:\xampp\htdocs\Buchlayout\index.php[/B] on line [B]29[/B]

[B]Warning[/B]:  include() [[URL="http://localhost/Buchlayout/function.include"]function.include[/URL]]: Failed opening '' for inclusion (include_path='.;C:\xampp\php\pear\') in [B]C:\xampp\htdocs\Buchlayout\index.php[/B] on line [B]29[/B]
Ich vermute, dass es daran liegt, dass der php Server ohne diese Zeile
Code:
  if(isset($_GET['haupt']) AND isset($haupt[$_GET['haupt']])) {
nicht weiß, welche Seite sie beim direkten Start aufrufen soll.
Das ist das was auf der Seite dazu seht.
Diese Varriante ist leider nicht ganz so inteligent, da sie beim ersten Zugriff auf die Seite ein Fehler ausgeben würde, da die Varriable $section[$_GET['section']] nicht vorhanden ist. Also müssen wir eine Alternative erstellen, die den Bescher auf eine Default Page verweist. Dazu verwenden wir die news/index.php und eine If Abfrage:
Ist wie immer nur eine Vermutung.

EDIT: Und auch wenn ich es trotzdem versuche, geht es nicht. es kommt die selbe Fehlermeldung, die schon gepostet habe.
 
Ok jetzt bin ich auch völlig verwirrt :oops:

Das beste wird sein du postet mal die ganzen Dateien. Also config, index.php, die Geschichtsseite wo der Link zu 22 steht. Dann habe ich wieder einen Überblick und jeder der hier mal vorbeischaut muss nicht den ganzen Threat durchlesen ;)

Mfg Mo3b
 
OK.. dann einmal der Reihe nach:

Index.php
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<?php
include('inc/config.php');
?>
<html>
<head>
<title>Imoilus FanFictions</title>
<meta name="author" content="Silke Ulferts">
<meta name="description" content="Alle von Imoblius verfassten FanFictions die die selbst erdachten Abenteuer des Zauberlehrlings Harry Potter und dessen Freunde beschreiben.">
<meta name="author" content="Silke Ulferts">
<meta name="keywords" content="Harry,Potter,FanFichtion,FanFiktion,James,Lily,Evans,Remus,Lupin,Sirius,Black,Hogwarts,Slash,Lemon,FanFictions,Imobilus,Rettung,Schicksal,Magier,Vergangenheit,1981,Sieg,Prinzessin,Dunkelheit,Lord,Voldemort,Hermine,Granger,Ron,Ginny,Weasley,Dumbledore">
<link rel="stylesheet" href="css/format.css" type="text/css">
<!--[if lte IE7]>
<link rel="stylesheet" href="css/formatie7.css" type="text/css">
<![endif]-->
</head>
<body >
<h1><img src="http://www.html.de/images/banner.png" alt="Imobilus kreative Ecke" class="banner"/></h1>

<div id="banner"></div>

<? include ("navigation.php"); ?>

<div id="buchoben"></div>

<div id="buchmitte">
<?php
  if(isset($_GET['haupt']) AND isset($haupt[$_GET['haupt']])) {
         include $haupt[$_GET['haupt']];
    } else {
         include $haupt['home'];
      }

?>
</div>

<div id="buchunten"></div>

</body>
</html>
Link für Geschichte (pb22 oder 01 dürfte egal sein, oder?)
PHP:
<li class="kapitel"><a href="index.php?geschichte_site=01">01 </a></li>
die config.php
PHP:
<?php
$haupt = array(
         'home'=>'inc/home.inc.php',
         'geschichten'=>'inc/geschichten.inc.php',
         'linktipps'=>'inc/linktipps.inc.php',
         'aboutme'=>'inc/aboutme.inc.php',
         '01'=>'sieg/kapitel01.inc.php',
    );

?>
Ich würde mir durchaus zurtrauen, dass ich da einfach nur einen
Schreibfehler drin habe und sehe ihn nicht. Aber kein Wunder bei der Uhrzeit, wenn man seit halb sechs auf ist.

LG
Amalia(die nun zu Bett geht, da sie morgen um die selbe Uhrzeit raus muss. Weitere Lösungsvorschläge werde ich dann morgen auf der Arbeit weiter austesten.)
 
Werbung:
habs nun nur überflogen, aber:

$_GET['haupt'] ist in deinem link oben leer.

<a href="index.php?geschichte_site=01... bedeutet, du übergibst $_GET['geschichte_site']
<a href="index.php?haupt=01... bedeutet, du übergibst $_GET['haupt']mit dem wert 01

dann kannst du den fehler eines leeren wertes noch damit abfangen:

PHP:
if(isset($_GET['haupt']) AND ($_GET['haupt'] != "" ) AND isset($haupt[$_GET['haupt']])) {
 
Hi!

Danke euch beiden. Nun gehts endlich. Ich hoffe ich bekomme nun auch den rest hin.

LG
Amalia
 
Supi :)

Nachdem es so funktioniert könntest du dir überlegen ob du für alle Geschichten nicht ein eigenes Template erstellst. Ich stelle mir das so vor, das dort vielleicht ein schöner Hintergrund dargestellt wird oder das Design sonstwie angepasst wird.

Wäre eine Überlegung wert bevor du alle deine Seiten erstellst.

Mfg Mo3b
 
Werbung:
Bekomme es einfach nicht hin

Sry, war echt blind. Fehler schon gefunden !!!!
 
Zuletzt bearbeitet:
Hallo html'er!
Ich habe eben so nach der selben Anletung von spacequadrat.de meine Framsets simmuliert. Es funktioniert auch ganz gut. Nun möchte ich einen Schritt weiter gehen. Ich möchte in den aufgeruffenen Content-Seiten eben so eine Menüliste haben, die den aktuellen Content wechselt. Hier der Grundriss der Seite:

Code:
|----------------------------------------|
|____Kopf-Bereich________________________|
| Haupt-Menü |     Content-Menü          |
| Thema 1    |  Thema1-1, Thema1-2, ...  |
| Thema 2    |---------------------------|
| ...        | Hier der eigentliche      |
| ...        | Text/Content der vom      |
|            | Content-Menü gesteuert wid|
|____________|___________________________|
|___ Foot-Bereich________________________|
Soll heißen, dass wenn "Thema 1" ausgewählt wurde, wird in Content-Menü das Content-Menü der "Thema 1" dargestell und im eigentlichen Content-Bereich die Seite "Thema1-1". Nun soll es möglich sein über Content-Menü zwischen den Seiten der Thema 1 beliebig zu wechseln (Thema 1-n). Will der Benutzer ein anderes Thema anschauen so wählt er das über Haupt-Menü.
Es soll noch gesagt werden, dass der eigentliche Content aus statischen .html Seiten besteht. Der aufbau der Gesamtseite sowie der Menüs wird von PHP übernommen. Beide Menüs werden nach dem selben Prinzip realisiert.

Mein aktueller Stand ist: Ich kann vom Hauptmenü die Themen mit den ersten Seiten der jeweiligen Thema aufrufen und(!) das jeweilige Content-Menü wird eben so richtig dargestellt. Wenn ich aber versuche, zwischen den Seiten einer Thema zu wechseln, geht meine Struktur verloren (es wird nur die aufgerufene Seite dargestellt, nur die aufgerufene Seite wird geladen), oder es passiert gar nichts, bzw. die Haupt-Seite wird geladen(das liegt aber an der else{} - Anweisung im Haupt-Menü).

Die Links im Haupt-Menü sehen so aus:
PHP:
index.php?section=themaX 
X: steht für jeweilige Thema
Hoffentlich habe ich mich verständlich ausgedrückt.

Nun die eigentliche Fragen: Wie sollen die Links im Content-Menü aussehen, damit nur der Conten-Bereich neu geladen werden muss, bzw. die Seite mit dem richtigen Inhalt aufgebaut wird?

Oder ist meine Vorgehensweise falsch und ich soll einen anderen Weg gehen? Wenn ja, welchen?

Ich bedanke mich im Voraus und hoffe auf euere Antworten!
Die Suche in google und Co. nach: gesplitten/getrennten menüs/navis/navigationen ... und vieles mehr, hat keine Resultate gebracht. Darum bitte ich euch um die Hilfe.

PORTAL
 
Aufteilen der eingebundenen Seiteninhalten mittels PHP

Noch ein Mal hallo an alle!
Meine Frage war wohl zu schwer fuer die Community. Da ich aber wieder Internetzugang habe moechte ich meine Loesung presentieren. Vielleicht wird es jemandem helfen.
Die Aufgabe war oben beschrieben: Aufteilen der eingebundenen Seiteninhalten mittels PHP.
Loesung siehe unten. Die Platzierung der Inhalte habe ich mit CSS vorgenommen.
Die Links auf die jeweiligen Inhalte sehen so aus:
Code:
index.php?thema=ThemaX&seite=SeiteX

X steht fuer jeweilige/s Seite/Thema
index.php
PHP:
<?php
    // index.php
    
    // Melde alle Fehler außer E_NOTICE
    // Mit den Noticen bin ich nicht klar gekommen
    // aber vielleich werden die Gurus da weiter helfen. 
  error_reporting(E_ALL ^ E_NOTICE);
  
  // IncludePfad  fuer die .html/.php Dokumente
  $pfad_inc = 'includes/'; 
  
  // fuer die "Satrtseite", z.B. http://beispiel.com wird ohne ?zusaetze=bla&weiteres=blabla eingegeben
  if ($_GET == ""){
      $get_thema = 'Start';
      $get_seite = 'Seite1';
  }
  else {
      $get_thema = $_GET['thema'];
      $get_seite = $_GET['seite'];
  }
     
  // Variablen die die Adressen von den zu includenden Dateien enthalten
    $inc_rechts = "";
    $inc_unten = "";
    // $aufbau entscheidet ob rechte seite in oberen und unteren Bereiche aufgeteilt werden soll,
    // z.B. bei der Startseite muss es nicht geschehen
    $aufbau = '0';
    // einfache hilfs-Variablen
    $help = '0';
    
    // Aufbau der HTML-Seite
    // include_once $pfad_inc.'header.html'; ODER
    echo '<html><head><title>Navigation</title></head>';
    
    ///////////////////////////////////////////
    // mit $_GET arbeiten
    include_once $pfad_inc.'menues.php';
            
    if (array_key_exists('thema',$_GET) AND 
      array_key_exists($_GET['thema'],$thema)){
        $inc_rechts = $thema[$_GET['thema']];
        if ($_GET['thema'] == "Start") {
          $aufbau = '0';
        }
        else {
          $aufbau = '1'; 
            if (array_key_exists('seite',$_GET)  AND 
                 array_key_exists($_GET['seite'],$$get_thema)) {
                // $$get_thema ist der Name der Thema, 
                // dieser muss als Variable extrahiert werden:
                $help = extract($$get_thema);
                $inc_unten = $pfad_inc.$$_GET['seite'];   
            }
            /* else{
                // funktioniert auch ohne, wer moechte kann hier sauber 
                // else - Fall ausschreiben
            }  */
        }       
    } 
    else{
      $inc_rechts = $thema['Start'];
      $aufbau = '0';
    }
    ///////////////////////////////////////////
        
    echo '<body>';
      // Linke Seite
          echo '<div class="links" style="border:1px dotted black; float:left; width:19%; height:500px; padding:3px;">';
            echo 'Linke Seite!<br />';
        // Ausgabe Hauptmenue Linke Seite
        foreach ($thema as $themapunkt => $themapunktadress) {
          if ($themapunkt == 'Start') {
            echo '<a href="index.php?thema='.$themapunkt.'">'.$themapunkt.'</a><br/>';
          }
          else{
            echo '<a href="index.php?thema='.$themapunkt.'&seite='.'Seite1">'.$themapunkt.'</a><br/>';  
          }                   
        }
          echo '</div>'; 
    // ENDE linke Seite
        
    // Rechte Seite
          echo '<div class="rechts" style="border:1px dotted black; float:right; width:79%; height:500px; padding:3px;">';
            echo 'Rechte Seite!<br />';  
              if($aufbau == '1'){
            echo '<div class="oben" style="border:1px dotted black; margin:5px;">';
              echo 'Oberer Teil!<br />';
              echo '<div style="display:inline;">';
                include_once $inc_rechts;
              echo '</div>';
                  echo '</div>'; // oben
                  
                  echo '<div class="unten" style="border:1px dotted black; margin:15px 5px;">';
                  echo 'Unterer Teil!<br />';
                  include_once $inc_unten;
                  echo '</div>'; // unten
          }
              else {
            include_once $inc_rechts;
        }
          echo '</div>'; 
    // ENDE rechte  Seite
        
    
    echo '</body>';
    echo '</html>';
?>
menues.php
PHP:
<?php
  // includes/menues.php

  // Im Hauptmenue-Array ($thema) ist es wichtig, dass die 
  // Themen-Namen den Themen entsprechen!  
    $thema = array('Start' => $pfad_inc.'start.html',
                 'Thema1' => $pfad_inc.'thema1.php',
                 'Thema2' => $pfad_inc.'thema2.php'
  );
  
  $Thema1 = array('Seite1' => 'th1s1.html',
                  'Seite2' => 'th1s2.html'
  );
  
  $Thema2 = array('Seite1' => 'th2s1.html',
                  'Seite2' => 'th2s2.html'
  );

?>
thema1.php
PHP:
<?php   
  // includes/thema1.php
  echo 'Ich bin Thema 1 ! <br />'; 
  foreach ($Thema1 as $thema1punkt => $thema1adress){
    echo '<a href="index.php?thema=Thema1&seite='.$thema1punkt.'">| '.$thema1punkt.' |</a>';
  }                  
?>
thema2.php
PHP:
<?php
  // includes/thema2.php    
  echo 'Ich bin Thema 2 ! <br />';
  foreach ($Thema2 as $thema2punkt => $thema2adress){
    echo '<a href="index.php?thema=Thema2&seite='.$thema2punkt.'">| '.$thema2punkt.' |</a>';
  }                  
?>
th1s1.html bis thXsX.html so wie start.html sind statische .html Dateien deren Inhalt kann beliebeig sein.
HTML:
<h3> Ich bin der Inhalt der Seite 1 der Thema 1!!<br />
Ich bin der Inhalt der Seite 1 der Thema 1!!<br />
Ich bin der Inhalt der Seite 1 der Thema 1!!<br />
Ich bin der Inhalt der Seite 1 der Thema 1!!<br />
Ich bin der Inhalt der Seite 1 der Thema 1!!<br />
Ich bin der Inhalt der Seite 1 der Thema 1!!<br /> </h3>
Der Code ist sicherlich verbesserungswuerdig! Da hofe ich auf ein Feetback von Gurus. Sonst funktioniert ales so wie ich es wollte. Wenn man die Dateien erstellt und den Code reinkopiert sollte ein brauchbares Beispiel anzusehen sein.
Der Vorteil dieser Methode(fuer mich): Die Menues werden an einer Stelle verwaltet, in dem die entsprechenden Arrays erweiter/geaendert werden. Die Ausgabe der Menue-Punkte erfolgt automatisch.

Anregungen und Verbesserungsvorschlaege sind erwuenscht!
Gruesse!
PORTAL
 
Werbung:
Hallo. Vorab: Das ist vom Ansatz her gar nicht mal schlecht.

Einige Tipps zum Code, die du selbst auch schon teilweise angesprochen hast:

- Setze das error_reporting immer auf den höchstmöglichen Wert und behebe sämtliche auftretenden Anmerkungen.

PHP:
error_reporting(-1); // Setzt jedes Bit

Das ist nicht immer einfach, wenn nicht klar ist, was PHP genau will, aber für saubere Programmierung unbedingt empfehlenswert. Es verringert das Risiko, schwer aufzufindende Fehler oder in manchen Fällen sogar Sicherheitslücken zu verursachen, die etwa durch nicht initialisierte Variablen oder Array-Felder entstehen können (Stichwort: register globals).

- Vermeide unbedingt variable Variablen (doppelte Dollarzeichen). Sie machen einen Code schwer lesbar. Dieser Abschnitt ist zum Beispiel schwer nachzuvollziehen:

PHP:
            if (array_key_exists('seite',$_GET)  AND
                 array_key_exists($_GET['seite'],$$get_thema)) {
                // $$get_thema ist der Name der Thema,
                // dieser muss als Variable extrahiert werden:
                $help = extract($$get_thema);
                $inc_unten = $pfad_inc.$$_GET['seite'];
            }

- Betrachte dein Programm als Abfolge von Eingabe, Verarbeitung und Ausgabe (EVA-Prinzip).

Als Eingaben hast du hier etwa die $_GET-Parameter. In einem ersten Schritt könntest du dort eine Art Validierung durchführen und dich dann im Verarbeitungsteil darauf verlassen, dass alle benötigten Werte passend gesetzt sind.

PHP:
$get_thema = (isset($_GET['thema']))  
           ? trim((string) $_GET['thema'])
           : '';

$get_seite = (isset($_GET['seite']))  
           ? trim((string) $_GET['seite'])
           : '';

// Hier haben $get_thema und $get_seite nun entweder einen passenden Wert oder
// den Wert '' (leerer String). Nachfolgend kannst du nun sicher mit den beiden
// Variablen arbeiten und brauchst nicht mehr auf $_GET selbst zuzugreifen.
//
// Das macht array_key_exists-Prüfungen zumindest für Thema und Seite unnötig.

- Es heißt in href-Attributen &amp;, nicht einfach nur &.

- Nutze am besten eine eigene Funktion zur Generierung von Link-URLs. Etwa:

PHP:
<?php

function url(array $params = array())
{
    $queryPart = '';

    if (count($params) > 0) {
        $queryPart = '?' . http_build_query($params, '', '&amp;');
    }
    
    $url = './index.php' . $queryPart;

    return $url;
}



echo url(array('thema' => 'Thema1', 'seite' => 'Seite1'));
    // ./index.php?thema=Thema1&amp;seite=Seite1

echo url(array('thema' => 'Thema1', 'seite' => 'Seite1', 'something' => 'else'));
    // ./index.php?thema=Thema1&amp;seite=Seite1&amp;something=else

Das erlaubt es dir, das Link-Format zentral anpassen zu können, falls du später etwa Rewriting einsetzen solltest.



Hinsichtlich der generellen Architektur könntest du dir das MVC-Prinzip ansehen, das im Grunde eine weitere Verallgemeinerung deines Ansatz mit „Thema“ und „Seite“ ist.

Dazu poste ich nachher vermutlich noch ein Beispiel, ich weiß leider gerade keine gute Quelle.

Ein Ansatz vielleicht hier. Der setzt allerdings schon auf OOP.

- http://phpforum.de/forum/showthread.php?t=220277
 
Zuletzt bearbeitet:
Hallo mermshaus!
Als erstes ein GROSSES DANKE SCHOEN fuer deine Antwort!
Genau so stelle ich mir die Hilfe in einem Forum vor. Ich bin ein blutiger Anfaenger und deine Antwort ist fuer mich - brilliant!
Da sind fuer mich einige neue Begriffe aufgetretten, mit denen ich mich ausseinander setzen werde, dennoch hast du mein Problem erkannt und die richtigen Stellen im Code angesprochen. Die Notitzen vom PHP hatte ich nur fuer die einige erste Zeilen - da vo ich versucht habe $get_thema und $get_seite zu setzen. Ich habe schon verstanden, dass ich die Pruefung der $_GET Variable machen muss, wusste aber nicht wie. Sonst hatte ich keine Fehlermeldungen oder Warnungen, und keine Notitzen.
Trotzdem freut es mich eine professionellere Loesung zu sehen. Dies erspart auch weitere prueffungen im Code. Dafuer noch ein Mal DANKE!
Ich bin momentan nur selten im Netz, werde meinen Code aber ueberarbeiten und noch ein Mal hier posten. Kann allerdiengs bis zu einer Woche dauern.
Werde mich Melden!
PORTAL
P.S: Schreibe vom Ausland, darum ohne Umlaute. Sorry. Hoffentlich ist es gut zu verstehen.
P.P.S: Die Labs auf der Homepage sind echt interessant.
 
Zuletzt bearbeitet:
Werbung:
Hallo nach einer Woche!
Ziemlich genau, wie gedacht in einer Woche hatte ich wieder Zeit zum programmieren gehabt. Hier nun das Ergebnis:

index.php
PHP:
<?php
  //index.php
  
  // Alle Fehler melden
  error_reporting(E_ALL);
  
  // IncludePfad  fuer die .html/.php Dokumente
  $pfad_inc = 'includes/';
  
  // $get_thema und $get_seite belegen
  // entweder mit dem im $_GET uebertragenen Wert (falls vorhanden),
  // oder mit einem vordefinierten Wert
  $get_thema = (isset($_GET['thema']))  
           ? trim((string) $_GET['thema'])
           : "Start";

  $get_seite = (isset($_GET['seite']))  
           ? trim((string) $_GET['seite'])
           : "";
            
  // Variablen die die Adressen von den zu includenden Dateien enthalten(anfangs leer)
    $inc_rechts = "";
    $inc_unten = "";
    // $aufbau entscheidet ob rechte seite in oberen und unteren Bereiche aufgeteilt werden soll,
    // z.B. bei der Startseite muss es nicht geschehen
    $aufbau = '0';
    // einfache hilfs-Variablen
    $help = '0';
    
    // Menues einbinden (Deklaration der Menue-Arrays)
    include_once $pfad_inc.'menues.php';
    
    ///////////////////////////////////////////
  // Bearbeitungs-Teil
    if (!(empty($get_thema)) AND array_key_exists($get_thema,$thema)){
    $inc_rechts = $thema[$get_thema];
    
    if ($get_thema == "Start") {
      $aufbau = '0';
    }
    else {
      $aufbau = '1';
      if ((!empty ($get_seite)) AND array_key_exists($get_seite,$$get_thema)) {
      //var_dump($$get_thema);
        // $$get_thema ist der Name der Thema, 
        // dieser muss als Variable extrahiert werden: 
        $help = extract($$get_thema);
        $inc_unten = $pfad_inc.$$get_seite;
      }
    }
  }
  else{
    $inc_rechts = $thema['Start'];
    $aufbau = '0';
  }     
    
    // Funktion zur Generierung von Link-URLs
    
    function url(array $params = array()){
    $queryPart = '';

    if (count($params) > 0) {
        $queryPart = '?' . http_build_query($params, '', '&amp;');
    }
    
    $url = 'index.php' . $queryPart;

    return $url;
  }
    
    ///////////////////////////////////////////
  // Aufbau der HTML-Seite
  echo '<html><head><title>Navigation</title></head>';
    // Linke Seite
          echo '<div class="links" style="border:1px dotted black; float:left; width:19%; height:500px; padding:3px;">';
            echo 'Linke Seite!<br />';
        // Ausgabe Hauptmenue Linke Seite
        foreach ($thema as $themapunkt => $themapunktadress) {
          if ($themapunkt == 'Start') {
            $help = url(array('thema' => $themapunkt));
            echo '<a href="'.$help.'">'.$themapunkt.'</a><br/>';
          }
          else{
            $help = url(array('thema' => $themapunkt, 'seite' => 'Seite1'));
            echo '<a href="'.$help.'">'.$themapunkt.'</a><br/>';
          }
        }
      echo '</div>'; 
    // ENDE linke Seite
    
    // Rechte Seite
          echo '<div class="rechts" style="border:1px dotted black; float:right; width:79%; height:500px; padding:3px;">';
            echo 'Rechte Seite!<br />';  
              if($aufbau == '1'){
            echo '<div class="oben" style="border:1px dotted black; margin:5px;">';
              echo 'Oberer Teil!<br />';
              echo '<div style="display:inline;">';
                include_once $inc_rechts;
              echo '</div>';
                  echo '</div>'; // oben
                  
                  echo '<div class="unten" style="border:1px dotted black; margin:15px 5px;">';
                  echo 'Unterer Teil!<br />';
                  include_once $inc_unten;
                  echo '</div>'; // unten
          }
              else {
            include_once $inc_rechts;
        }
          echo '</div>'; 
    // ENDE rechte  Seite
        
    
    echo '</body>';
    echo '</html>';
?>
thema1.php
PHP:
<?php   
  // includes/thema1.php
  echo 'Ich bin Thema 1 ! <br />'; 
  foreach ($Thema1 as $thema1punkt => $thema1adress){
    $help = url(array('thema' => 'Thema1', 'seite' => $thema1punkt));
    echo '<a href="'.$help.'">| '.$thema1punkt.' |</a>';
  }                  
?>
thema2.php
PHP:
<?php    
  // includes/thema2.php
  echo 'Ich bin Thema 2 ! <br />';
  foreach ($Thema2 as $thema2punkt => $thema2adress){
    $help = url(array('thema' => 'Thema2', 'seite' => $thema2punkt));
    echo '<a href="'.$help.'">| '.$thema2punkt.' |</a>';
  }                  
?>
Die restlichen Dateien blieben gleich.
Ich habe versucht alle Tips umzusetzen, doch um die VariablenVariablen ($$) bin ich nicht umgekommen. Ich habe keine bessere Loesung erschaffen koennen.

mermshaus, noch ein Mal dicken Dank fuer deine Unterstuetzung. MVC habe ich mir auch angeschaut. Ein wenig zu gross zu fuer mich aber doch verstaendlich.
MfG
PORTAL
 
Zurück
Oben