Michael: Inhalt einfügen mit include()

Hallo, ich probiere schon den ganzen tag lang mit Befehlen herum und bekomme trotzdem nicht das gewünschte ergebnis.

Sachverhalt:

Habe eine Homepage erstellt "homepage.php"

in dieser Homepage habe ich einen Kopfbereich, zwei Listenbereiche, und einen "mitte"-Bereich eingefügt eingefügt hier der code:

  
 <body>  
  
  <div id="container">  
  
   <div id="kopf">  
    <h1 class="ueberschrift">Homepage</h1>  
    <img id="logo" src="Grafik/Sportlogo.gif" alt="Sportlogo" title="Sportlogo">  
   </div>  
  
   <ul id="navi">  
    <li><a href="Link1.php">Link1</a></li>  
    <li><a href="Link2.php">Link2</a></li>  
    <li><a href="Link3.php">Link3</a></li>  
   </ul>  
  
  
  
  
   <div id="mitte">  
		  
		  
		<?php  
			include ("");  
		?>  
   </div>  
  
   <ul id="fuss">  
    <li><a href="Impressum.php" name="impr">Impressum</a></li>  
    <li><a href="Kontakt.php">Kontakt</a></li>  
    <li><a href="Gaestebuch.php">G&auml;stebuch</a></li>  
   </ul>  
  
  </div>  

In den Bereich <div id="mitte"></div> soll immer jeweils der Inhalt der Seiten von "Link1", "Link2" usw per include() eingefügt werden, sobald man auf den entsprechenden Link klickt.

Wenn ich die jeweilige Datei direkt in die Klammern von inklude eingebe, dan wird es auch genau so ausgegeben, wie ich es haben will. Nur soll es ja erst ausgegeben werden, wenn man auf den Link klickt und nicht die ganze zeit.
Habe schon versucht den Links namen zuzuweisen und die als Variable in PHP aufzurufen und sonstige codes aus dem Internet kopiert und geändert und probiert aber bis jetzt nichts für mich verständliches gefunden.

Bitte um Hilfe ich sehe den Wald vor lauter Bäumen nicht mehr.

Grüße, Michael

  1. Lieber Michael,

    üblicherweise inkludiert man nicht die jeweils individuellen Inhalte (also den Inhalt von <div id="mitte">), sondern das, was die immergleichen feststehenden Elemente einer Seite sind (z.B. die Navi oder den Footer).

    Du machst es genau umgekehrt. Ob das so sinnvoll ist...?

    Probiere es doch einmal so:

    ===impressum.php===

    <?php  
      
        include './includes/kopf.html';  
        include './includes/body-div.html';  
      
    ?>
    ~~~~~~html
    <!-- wir sind nun in <div id="mitte">! -->  
        <h1>Impressum</h1>  
        <p>Für diese Seite bin ich verantwortlich und sonst keiner.</p>
    
    <?php  
      
        include './includes/footer.html';  
      
    ?>
    

    Auf diese Weise ist nur der tatsächliche Inhalt in Deiner PHP-Datei. Der Rest wird aus fertigen Bausteinen geholt.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hi,
      danke für die Antwort :)
      also wenn ich das jez richtig verstanden habe:
      Ich erstelle für den Kopf-bereich ein eigenes html- Dokument, genauso wie für alle Listenbereiche und den Fußbereich.
      Dann noch die externe CSS-datei für all die Dokumente und zum Schluss erstelle ich immer nur ein Dokument für z.B. Impressum in dem nur die Doctype Declaration, der "html", "head", "body" und der "mitte" -tag steht und include den rest außenrum.

      Wird den der rest um die "mitte" herum auch genauso angeordnet wie ich das in CSS vorher festgelegt habe oder muss ich dan etwas verändern? Weil ich include dan ja nicht den "footer" sondern die "footer.html"...

      Und noch eine Frage: Weshalb genau wäre es denn nicht sinnvoll das so zu machen wie ich vorher gedacht habe?

      Liebe Grüße,
      Michael

      1. Lieber Michael,

        meine Antwort war so gedacht, dass Du mit Deinem aktuellen Kenntnisstand (den ich mir frech aus Deinem Posting abgeleitet habe) erfolgreich zurecht kommst. Natürlich kann man so vieles anders und um soviel komplizierter (und dafür leistungsfähiger) machen, aber für den Moment denke ich, dass Du mit meinem Vorschlag am besten fährst.

        Ich erstelle für den Kopf-bereich ein eigenes html- Dokument, genauso wie für alle Listenbereiche und den Fußbereich.

        Ja. Wenn Du "html-Dokument" schreibst, dann meinst Du sicherlich eine HTML-Datei, in der ein unvollständiges HTML-Dokument notiert ist. Also in anderen Worten ein HTML-Codefragment.

        Dann noch die externe CSS-datei für all die Dokumente und zum Schluss erstelle ich immer nur ein Dokument für z.B. Impressum

        Ja. Das ist eine erprobte und für Neulinge leicht zu verstehende Vorgehensweise.

        in dem nur die Doctype Declaration, der "html", "head", "body" und der "mitte" -tag steht und include den rest außenrum.

        Also die Doctype-Declaration hätte ich in den Kopf-Bereich, den "header", eingearbeitet. Der könnte so aussehen:

        ===header.html===

        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">  
        <head>  
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
            <link rel="stylesheet" href="/layout.css" type="text/css" />
        

        =================

        Dein body-div.html könnte so aussehen:

        ===body-div.html===

        </head>  
        <body>  
            <!-- so Kram halt -->  
            <div id="mitte">
        

        ===================

        Du solltest in Deiner PHP-Datei den <title> nicht vergessen, der zwischen den beiden HTML-Fragmenten notiert werden sollte:

        === impressum.php===

        <?php  
          
            include './includes/header.html';  
          
        ?>  
            
        ~~~`<title>Impressum</title>`{:.language-html}~~~php
          
          
        <?php  
          
            include '/includes/body-div.html';  
          
        ?>  
            
        ~~~`<h1>Impressum</h1>...`{:.language-html}  
        ====================  
          
        
        > Wird den der rest um die "mitte" herum auch genauso angeordnet wie ich das in CSS vorher festgelegt habe oder muss ich dan etwas verändern?  
          
        Dein CSS geht von einer ganz bestimmten Dokumentstruktur aus. Der HTML-Code sollte (wenn Du alles richtig zusammenbaust) hinterher genau so aussehen, wie Du es in Deinem CSS vorgesehen hast. Wenn der HTML-Code zu Deinem CSS-Code nicht passt, obwohl alles vorher korrekt war, dann müsstest Du schauen, an welcher Stelle der zusammengesetzte HTML-Code von der "Vorlage" abweicht - und warum.  
          
        
        > Weil ich include dan ja nicht den "footer" sondern die "footer.html"...  
          
        Wenn "footer.html" kein vollständiges HTML-Dokument, sondern nur ein Fragment ist, dann ist das kein Problem. Siehe oben "header.html" - diese Datei ist auch kein vollständiges HTML-Dokument.  
          
        
        > Und noch eine Frage: Weshalb genau wäre es denn nicht sinnvoll das so zu machen wie ich vorher gedacht habe?  
          
        Das, was Du vorher versucht hast, setzt voraus, dass Du effektiv mit String-Operationen umgehen kannst, um aus Zeichenketten Dir das herauszulösen, was Du brauchst, um daraufhin immer individuell zu reagieren. [Blubb hat Dir schon etwas in dieser Richtung geschrieben](https://forum.selfhtml.org/?t=209228&m=1423733). Wenn Du das alles schon verstehst und umsetzen kannst, dann brauchst Du meine Tipps nicht mehr.  
          
        Liebe Grüße,  
          
        Felix Riesterer.
        
        -- 
        ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
        
        1. Hallo,
          omg vielen Dank :)
          Find ich super dass hier so geholfen wird :):):)
          Werde das ganze heute nach der Arbeit mal ausprobieren und hier mal ein Beispiel posten ob und wie es geklappt hat :)
          vielen vielen Dank

          achja, hab gestern noch rumprobiert gehabt mit case- befehl von php hat nicht so ganz geklappt meine idee die ich vorher hatte :D sah zum schluss so aus-->

          <div id="mitte">

            
          		<?php  
          		  
          		switch ($page){  
          		default: include("News.php");  
          		break;  
          		case 1: include("Impressum.php");  
          		break;  
          		case 2: include("Kontakt.php");  
          		break;  
          		case 3: include("Gaestebuch.php");  
          		break;  
          		}  
          		?>  
          
          
            
          </div>  
            
             <ul id="fuss">  
              <li><a href="Impressum.php?page=1">Impressum</a></li>  
              <li><a href="Kontakt.php?page=2">Kontakt</a></li>  
              <li><a href="Gaestebuch.php?page=3">G&auml;stebuch</a></li>  
             </ul>
          

          Hat mir den News als included angezeigt aber der Rest wurde immer neu geöffnet und wurde nicht in die "mitte" included -.-
          Naja werd wie gesagt heut Abends mal das Bsp. von Felix mal ausprobieren danke nochmal :)

          Liebe Grüße, Michael

          1. Moin Michael!

              <?php  
                
              switch ($page){  
              default: include("News.php");  
              break;  
              case 1: include("Impressum.php");  
              break;  
              case 2: include("Kontakt.php");  
              break;  
              case 3: include("Gaestebuch.php");  
              break;  
              }  
              ?>  
            
              
            
            > Hat mir den News als included angezeigt aber der Rest wurde immer neu geöffnet und wurde nicht in die "mitte" included -.-  
              
            Verweist du denn auch wirklich, wie bereits von Blubb geschrieben, auf die inkludierende (z. B. geruest.php?page=impressum) und nicht die zu inkludierende Datei (z. B. impressum.php)?  
              
            Ich würde dir empfehlen, für den Switch-Case-Befehl sprechende Argumente  nutzen, sonst wird es je nach Umfang deiner Webpräsenz schnell unübersichtlich.  
              
            ~~~php
            switch ($page) {  
             case "impressum": include("Impressum.php");  
             break;  
             case "kontakt": include("Kontakt.php");  
             break;  
             case "gaestebuch": include(Gaestebuch.php");  
             break;  
             default: inlcude ("News.php");  
            }
            

            Ferner habe ich in den Beispiel mal default nach hinten gesetzt. Keine Ahnung, ob das zwingend erforderlich ist, aber "schöner" ist es imho allemal:

            Freundliche Grüße
            Kackfohgel

            1. Ich nochmal,

              nachdem ich weiter unten "kluggeschissen" habe, möchte ich bei mir selber nicht unkritischer sein:

              switch ($page) {

              case "impressum": include("Impressum.php");
              break;
              case "kontakt": include("Kontakt.php");
              break;
              case "gaestebuch": include(Gaestebuch.php");

              Anführungsstriche nachgereicht: [code lang=php]case "gaestebuch": include("Gaestebuch.php");

                
              
              >  default: inlcude ("News.php");  
                
              lc in cl umgetauscht: `default: inlcude ("News.php");`{:.language-php}  
                
              Freundliche Grüße  
              Kackfohgel
              
            2. [latex]Mae  govannen![/latex]

                <?php  
                  
                switch ($page){  
                default: include("News.php");  
                break;  
                case 1: include("Impressum.php");  
                break;  
                case 2: include("Kontakt.php");  
                break;  
                case 3: include("Gaestebuch.php");  
                break;  
                }  
                ?>  
              
                
              
              > Ich würde dir empfehlen, für den Switch-Case-Befehl sprechende Argumente  nutzen, sonst wird es je nach Umfang deiner Webpräsenz schnell unübersichtlich.  
              >   
              > ~~~php
              
              switch ($page) {  
              
              >  case "impressum": include("Impressum.php");  
              >  break;  
              >  case "kontakt": include("Kontakt.php");  
              >  break;  
              >  case "gaestebuch": include(Gaestebuch.php");  
              >  break;  
              >  default: inlcude ("News.php");  
              > }
              
              

              Man kann es auch anders aufbauen:

              $inc_data = array(  
                  "impressum" => "Impressum.php",  
                  "kontakt" => "Kontakt.php",  
                  "gaestebuch" => "Gaestebuch.php",  
                  "default" => "News.php"  
              );  
                
              if (array_key_exists($page , $inc_data)) {  
                  include $incdata[$page];  
              }  
              else {  
                  include $incdata['default']; # alternativ hier einen 404-Status ausgeben,  
                                               # wenn kein default gegeben werden soll  
              }  
              
              

              Stur lächeln und winken, Männer!
              Kai

              --
              It all began when I went on a tour, hoping to find some furniture
               Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)
              SelfHTML-Forum-Stylesheet
              1. [latex]Mae  govannen![/latex]

                if (array_key_exists($page , $inc_data)) {
                    include $incdata[$page];
                }
                else {
                    include $incdata['default']; # alternativ hier einen 404-Status ausgeben,
                                                 # wenn kein default gegeben werden soll
                }

                Jeweils $inc_data natürlich

                Stur lächeln und winken, Männer!
                Kai

                --
                It all began when I went on a tour, hoping to find some furniture
                 Followed a sign saying "Beautiful Chest", led to a lady who showed me her best)
                SelfHTML-Forum-Stylesheet
  2. Hallo,

    Wenn ich die jeweilige Datei direkt in die Klammern von inklude eingebe, dan wird es auch genau so ausgegeben, wie ich es haben will. Nur soll es ja erst ausgegeben werden, wenn man auf den Link klickt und nicht die ganze zeit.

    du möchtest also bei einem "GET /Link1.php" im include() der homepage.php "Link1.php" zu stehen haben?

    Wenn man den Link <a href="Link1.php"> anklickt, dann sendet der Browser einen Request an die Datei "Link1.php". Wie kommt nun "homepage.php" ins Spiel?

    Habe schon versucht den Links namen zuzuweisen und die als Variable in PHP aufzurufen

    Ja, das ist der richtige Gedanke. Du möchtest die "homepage.php" aufrufen und wissen auf welchen Link geklickt wurde. Das geht über GET-Parameter. Setze die Links zur Übung mal so: <a href="homepage.php?content=Link1"> und füge mal folgendes in die "homepage.php" ein:

      
    <?php  
    echo $_GET['content'];  
    ?>  
    
    

    Grüße

    1. @@Blubb:

      nuqneH

      Setze die Links zur Übung mal so: <a href="homepage.php?content=Link1"> und füge mal folgendes in die "homepage.php" ein:
      <?php
      echo $_GET['content'];
      ?>

      NEIN!! NIEMALS! Auch nicht zur Übung.

      GET-Parameter dürfen niemals unbehandelt ausgegeben werden. Das sollte man wissen, bevor man auch nur eine Zeile PHP-Code schreibt.

      echo [link:http://www.php.net/manual/de/function.htmlspecialchars.php@title=htmlspecialchars]($_GET['content']);

      Qapla'

      PS: Wo ist der „Nicht-hilfreich“-Button??

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
  3. @@Michael:

    nuqneH

    <li><a href="Gaestebuch.php">G&auml;stebuch</a></li>

    BTW, du solltest das ä im Quelltext nicht verstümmmeln, sondern "Gästebuch" schreiben.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
  4. SO :)
    Habs nun ausprobiert :)
    und siehe da, es funktioniert :) war etwas Kopierarbeit das Ganze aufzuteilen, aber das Ergebnis kann sich sehen lassen :)
    Jetzt habe ich mehrere html-Dateien deren Inhalt ich verändern kann, ohne lange nach dem zu verändernden Bereich suchen zu müssen und der quellcode für die jeweiligen Seiten hat sich extrem verkürzt.
    So sieht jetzt das Impressum aus:

      
    <?php  
    	include "includes/header.html";  
    ?>  
    <title>Impressum</title>  
    <?php  
    	include "includes/body-cont-kopf-navi.html";  
    	include "includes/mitte-list-left.html";  
    ?>  
    <div id="inhalt">  
    	<h1>Impressum</h1>  
      
    	<p>ALLES MEINS++ALLES MEINS++ALLES MEINS++ALLES MEINS++</p>  
    </div>  
    <?php  
    	include "includes/list-right.html";  
    	include "includes/fuss-end.html";  
    ?>  
    
    

    Finde ich eine sehr gute Möglichkeit :) vielen Dank an Felix :)

    An alle anderen auch vielen Dank, nur leider reichen meine PHP-Kenntnisse für eure Vorschläge noch nicht aus -.- ich verstehe halt leider noch zu wenig von den ganzen Begriffen, die es so gibt bei PHP ich werde mich aber weiter bemühen  :)

    Tausend Dank an alle :)

    Liebe Grüße,
    Michael

    1. Lieber Michael,

      ich gratuliere zu Deinem Erkenntisgewinn! Allerdings finde ich, dass Du hier nicht aufhören solltest, sondern noch eine weitere Vereinfachung einbauen.

      Stelle Dir zur Vereinfachung folgendes vor (beachte die Verlinkungen für weiterführende Informationen!):

      ====seite-x.php====

      <?php  
        
          $title = "Seite X":  
          [link:http://php.net/manual/de/language.types.string.php#example-55@title=$inhalt = <<<EOD]
      ~~~~~~html
        
        
              <div id="inhalt">  
                  <h1>Seite X</h1>  
                  <p>Diese Seite hat keinen Zweck (eher einen Xweck)...</p>  
      
      ~~~~~~php
      EOD;  
        
          include 'template.php';  
        
      ?>
      

      ===template.php===

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">  
        
          <head>  
              <title>
      ~~~`<?php echo [link:http://de.php.net/manual/de/function.htmlspecialchars.php@title=htmlspecialchars]($title); ?>`{:.language-php}~~~html
       - meine private Website</title>  
          </head>  
      
      ~~~~~~php
      <?php  
        
          include "includes/body-cont-kopf-navi.html";  
          include "includes/mitte-list-left.html";  
        
          echo $inhalt;  
        
          include "includes/list-right.html";  
          include "includes/fuss-end.html";  
        
      ?>
      ~~~~~~html
        
          </body>  
      </html>
      

      Es stellt sich nun die Frage, ob denn die ausgelagerten Dateien 'body-cont-kopf-navi.html' etc. wirklich ausgelagert werden sollen, oder ob man ihren Inhalt nicht lieber gleich in die template.php schmeißt.

      Liebe Grüße,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. Nachtrag:

        <div id="inhalt">
                    <h1>Seite X</h1>
                    <p>Diese Seite hat keinen Zweck (eher einen Xweck)...</p>

        </div>

        EOD;

        Da fehlt vor dem "EOD;" natürlich noch das schließende </div>!

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)