Schlagmichtot: Inkludieren

Hallo,

habe jetzt mit PHP versucht auf meiner Seite etwas zu inkludieren aber dieses werden nicht angezeigt.
Was mache ich falsch?

Hier der Code für den 1.Teil: (den ich testen wollte)
<?php
   $links = (isset($_GET["links"]))?$_GET["links"]:

switch ($links) {
         default:
            case "Start":
               include("start.php");
                  break;
            case "system":
               include ("system.php");
                  break;
            case "Video&nbsp;&&nbsp;Sound":
               include ("video_sound.php");
                  break;
            case "Programmierung":
               include ("make_prog.php");
                  break;
            case "Html&nbsp;&&nbsp;Co.":
               include ("html_co.php");
                  break;
            case "Boards":
               include ("sys_boards.php");
                  break;
            case "Hilfeseiten":
               include ("sys_help.php");
                  break;
            }
?>
        <div id="bg3">
         <h5>Kategorien</h5>
            <ul id="navi">
               <li><a href="#"><b>Computer</b></a>
                  <ul>
                     <li><a href="links.php?seite=system">System</a></li>
                     <li><a href="links.php?seite=video_sound">Video&nbsp;&&nbsp;Sound</a></li>
                     <li><a href="links.php?seite=make_prog">Programmierung</a></li>
                     <li><a href="links.php?seite=html_co">Html&nbsp;&&nbsp;Co.</a></li>
                     <li><a href="links.php?seite=sys_boards">Boards</a></li>
                     <li><a href="links.php?seite=sys_help">Hilfeseiten</a></li>
                  </ul>
                  </li>
            </ul>

Lt. Fehlerbericht scheint der Switch Befehl falsch zu sein aber da ich noch ganz großer Frischling bin was PHP angeht kann ich nicht wirklich erkennen was!

Parse error: syntax error, unexpected T_SWITCH in /homepages/32/d243992636/htdocs/links.php on line 94

  1. "Video&nbsp;&&nbsp;Sound"
    <li><a href="links.php?seite=video_sound">Video&nbsp;&&nbsp;Sound</a></li>

    ---------------------------------------------------------^
    invalides html & gegen &amp; tauschen
    zudem, du bist dir sicher, dass du weißt, was &nbsp; tut bzw für was es eingesetzt werden soll?

    in deinem fall scheint Video%20&amp;%20Sound wohl angebrachter zu sein bzw in der Switch-Anweisung dann "Video & Sound" ;)

    Lt. Fehlerbericht scheint der Switch Befehl falsch zu sein aber da ich noch ganz großer Frischling bin was PHP angeht kann ich nicht wirklich erkennen was!

    Parse error: syntax error, unexpected T_SWITCH in /homepages/32/d243992636/htdocs/links.php on line 94

    das sagt dir, dass T_SWITCH hier nicht erwartet wird, nicht das T_SWITCH fehlerhaft ist - üblicherweise ist das durch einen syntaxfehler in der vorherigen zeile begründet

    ggf solltest du das ganze für dich leichter verständlich NICHT trinär schreiben:

    if (isset($_GET["links"])) {
      $links = $_GET["links"];
    }

    1. Hi!

      ggf solltest du das ganze für dich leichter verständlich NICHT trinär schreiben:

      Ja!

        
      
      > if (isset($_GET["links"])) {  
      >   $links = $_GET["links"];  
      > }  
      
      

      Aber warum soll der Inhalt von $_GET["links"] kopiert werden?
      Hier wird immer sehr deutlich darauf hingewiesen, dass dies die Herkunft der Daten verschleiere -  außerdem ist es unnötig.

      off:PP

      1. Aber warum soll der Inhalt von $_GET["links"] kopiert werden?
        Hier wird immer sehr deutlich darauf hingewiesen, dass dies die Herkunft der Daten verschleiere -  außerdem ist es unnötig.

        damit hast du natürlich recht

        1. Aber warum soll der Inhalt von $_GET["links"] kopiert werden?
          Hier wird immer sehr deutlich darauf hingewiesen, dass dies die Herkunft der Daten verschleiere -  außerdem ist es unnötig.
          damit hast du natürlich recht

          Durch dedlfix Korrektur konnte der Parse Fehler beseitigt werden.
          Allerdings werden keine Seiten inkludiert der Content bleibt einfach leer.
          Muss ich bei den zu inkludierenden Seiten irgendetwas spezielles setzen bzw. schreiben. Außer das der Name und die Dateiendung mit den Angaben auf der Seite links übereinstimmt?

          1. Salut!

            Allerdings werden keine Seiten inkludiert der Content bleibt einfach leer.

            Was steht denn in den inkludierten Dateien?
            Ein Beispiel wäre schön: aber bitte jetzt nicht alle posten;)

            au relire

            Sven aus M.

            1. Salut!

              Allerdings werden keine Seiten inkludiert der Content bleibt einfach leer.

              Was steht denn in den inkludierten Dateien?
              Ein Beispiel wäre schön: aber bitte jetzt nicht alle posten;)

              au relire

              Sven aus M.

              Das ist der radikal gekürzte ausschnitt der startseite:
              <body>
              <!-- Kleiner Content-Abschnitt oben -->
                      <div id="bg3">
                <h1>Startseite</h1>
                </div>
              <!--großer Content-Abschnitt -->
                <div id="bg1">
                </div>
              <!-- kleiner Content-Abschnitt unten -->
                      <div id="bg2">
                <ul style="list-style:none; margin:0px; padding:0px; text-align:center;">
                 <li style="float:left; margin-left:40px;"><a href="mailto:&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#98;&#117;&#108;&#108;&#121;.&#111;&#110;&#108;&#105;&#110;&#101;&#64;&#102;&#114;&#101;&#101;&#110;&#101;&#116;.&#100;&#101;"><div id="img1" alt="Kontakt"></div></a></li>
                 <li style="float:left; margin-left:25px; margin-top:15px;"><a href="http://people.icq.com/people/about_me.php?uin=336360762" target="_blank"><img src="http://status.icq.com/online.gif?icq=336360762&img=3" alt="ICQ Status" style="Border:0;" /></a></li>
                </ul>
                  </div>
              </body>
              </html>

              Eigentlich verändere ich nicht nur den Inhalt der jeweiligen Seiten die eingefügt werden sollen

              1. <a href="mailto:&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#98;&#117;&#108;&#108;&#121;.&#111;&#110;&#108;&#105;&#110;&#101;&#64;&#102;&#114;&#101;&#101;&#110;&#101;&#116;.&#100;&#101;"><div id="img1" alt="Kontakt"></div></a>

                einerseits: das ist nicht valide (<div /> ist ein block-element, <a /> ein inline-element, das funktioniert so nicht)

                zweites: du menist das hilft gegen spambots? ;)

                1. <a href="mailto:&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#98;&#117;&#108;&#108;&#121;.&#111;&#110;&#108;&#105;&#110;&#101;&#64;&#102;&#114;&#101;&#101;&#110;&#101;&#116;.&#100;&#101;"><div id="img1" alt="Kontakt"></div></a>

                  einerseits: das ist nicht valide (<div /> ist ein block-element, <a /> ein inline-element, das funktioniert so nicht)

                  zweites: du menist das hilft gegen spambots? ;)

                  Nein das hilft nicht, aber so kann es halt nicht von jeden gesehen werden, aber diese email ist so oder so nicht meine Haupt Adresse.
                  Aber ich glaube mit hilfe von Javascript kann man die sicherste "email verschlüsselung" ertsellen, aber das wollt ich nicht.

                  Nun das das nicht valide ist habe ich schon gemerkt aber es funktioniert halt, bei versuchen das anders zu gestalten hat es das nicht. Obwohl ich mich nicht so intensiv damit beschäftigt habe, habe das zu meinen html anfängen so hingeschrieben mich gefreut das es funtkioniert noch 1-2 alternativen versucht aber es dann so gelassen.

                  Zurück zum include.
                  Brauche ich dafür einen Echo Befehl oder allegemein einen Befehl um es auszugeben? Vllt. ist das ja mein Fehler.

                  1. Aber ich glaube mit hilfe von Javascript kann man die sicherste "email verschlüsselung" ertsellen, aber das wollt ich nicht.

                    die variante von gunnar gefällt mir persönlich ganz gut, wie sicher sie ist, weiss ich nicht - sie dürfte aber alle herkömmlichen e-mail-suchmuster ausschließen

                    Nun das das nicht valide ist habe ich schon gemerkt aber es funktioniert halt, bei versuchen das anders zu gestalten hat es das nicht.

                    wenn du statt div ein span-element einfügst und dem span element "display: block;" gibst, hast du validen code und es funktioniert wie mit dem div ;)

                    Brauche ich dafür einen Echo Befehl oder allegemein einen Befehl um es auszugeben? Vllt. ist das ja mein Fehler.

                    in deinem include selbst sollte schon irgendwo eine ausgabe stattfinden, ja ;)

                    include "example.php";

                    //inhalt von example.php:
                    echo "hello world";

                    1. Aber ich glaube mit hilfe von Javascript kann man die sicherste "email verschlüsselung" ertsellen, aber das wollt ich nicht.
                      die variante von gunnar gefällt mir persönlich ganz gut, wie sicher sie ist, weiss ich nicht - sie dürfte aber alle herkömmlichen e-mail-suchmuster ausschließen

                      Nun das das nicht valide ist habe ich schon gemerkt aber es funktioniert halt, bei versuchen das anders zu gestalten hat es das nicht.

                      wenn du statt div ein span-element einfügst und dem span element "display: block;" gibst, hast du validen code und es funktioniert wie mit dem div ;)

                      Brauche ich dafür einen Echo Befehl oder allegemein einen Befehl um es auszugeben? Vllt. ist das ja mein Fehler.
                      in deinem include selbst sollte schon irgendwo eine ausgabe stattfinden, ja ;)

                      include "example.php";

                      //inhalt von example.php:
                      echo "hello world";

                      Hey Danke erstmal für den E-Mail und Span tipp.

                      Wie mache ich das aber wenn ich den gesamten Seiteninhalt von der zu inkludierenden Seite in meiner "Ausgangsseite" anzeigen lassen möchte.

                      Mit:
                      echo (seite.php) oder anders?

                      Ich habe das so gemacht ich habe eine Seite im html Format erstellt wo der Inhalt  drin steht, dann habe ich sie so genannt wie in der Seite mit PHP angegeben und mit der Endung php erstellt.
                      War bis dato daran etwas falsch?

                      1. Ich habe das so gemacht ich habe eine Seite im html Format erstellt wo der Inhalt  drin steht, dann habe ich sie so genannt wie in der Seite mit PHP angegeben und mit der Endung php erstellt.
                        War bis dato daran etwas falsch?

                        das sollte eigentlich auch funktionieren ;)

                        1. Ich habe das so gemacht ich habe eine Seite im html Format erstellt wo der Inhalt  drin steht, dann habe ich sie so genannt wie in der Seite mit PHP angegeben und mit der Endung php erstellt.
                          War bis dato daran etwas falsch?
                          das sollte eigentlich auch funktionieren ;)

                          So habe es jetzt geschafft Inhalt zu inkludieren und das ohne echo Befehl. Danke an alle!
                          Jetzt muss ich nur noch herausfinden wie ich diesen inkludierten Inhalt flexibel machen, sodass er wenn ich mein Dropdown Menü zum Link-auswählen anklicke nicht der Inhalt verdeckt wird.

                          Aber eines nach dem anderen werde erstmal alle Seiten inkludieren.

                          P.S.: Kann man mit PHP auch Formatierungen erstellen wie formen und Farben?

                          1. Hallo.

                            P.S.: Kann man mit PHP auch Formatierungen erstellen wie formen und Farben?

                            PHP ist egal, ob du mit ihm HTML oder CSS produzierst. Und wenn das nicht ausreicht, gibt es auch in PHP Möglichkeiten, Bilder und Grafiken zu bearbeiten.
                            MfG, at

                          2. Mahlzeit Schlagmichtot,

                            Jetzt muss ich nur noch herausfinden wie ich diesen inkludierten Inhalt flexibel machen, sodass er wenn ich mein Dropdown Menü zum Link-auswählen anklicke nicht der Inhalt verdeckt wird.

                            Lerne den Unterschied zwischen serverseitiger Skript- bzw Programmiersprache (z.B. PHP) und der Ausgabe, die dadurch erzeugt und an den Browser geschickt wird (z.B. HTML), kennen.

                            P.S.: Kann man mit PHP auch Formatierungen erstellen wie formen und Farben?

                            s.o.

                            MfG,
                            EKKi

                            --
                            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                            1. Lerne den Unterschied zwischen serverseitiger Skript- bzw Programmiersprache (z.B. PHP) und der Ausgabe, die dadurch erzeugt und an den Browser geschickt wird (z.B. HTML), kennen.

                              Ausgeben kann mann doch auch mit php, da muss ich doch nicht erst html text schreiben.

                              1. Mahlzeit Schlagmichtot,

                                Ausgeben kann mann doch auch mit php, da muss ich doch nicht erst html text schreiben.

                                [_] Du hast mich verstanden.

                                Ich korrigiere mich: lerne die Grundlagen.

                                MfG,
                                EKKi

                                --
                                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                                1. [_] Du hast mich verstanden.

                                  Hallo,

                                  ich weiß schon das man zwar im der HTML php-Code hat, dieser aber nur von Server bearbeitet, interpretiert, wird und das Ergebnis daraus mir dann angezeigt wird. Ohne das ich den Code dann sehe.

                      2. echo $begrüßung;

                        Wie mache ich das aber wenn ich den gesamten Seiteninhalt von der zu inkludierenden Seite in meiner "Ausgangsseite" anzeigen lassen möchte.

                        Wenn es nur um das Durchreichen geht, dann ist readfile() die bessere Wahl. Das liest den Dateininhalt und reicht ihn unbesehen an die Ausgabe durch.

                        Wenn PHP-Code drin vorkommt, dann sollte es include und Konsorten sein.

                        PHP hat zwei Modi. Eine Datei startet generell im Nicht-PHP-Modus. Alles was da steht wird an die Ausgabe durchgereicht. Mit <?php (und teilweise auch mit <?) kommt man in den PHP-Modus. Alles was nun bis zum abschließenden ?> oder dem Dateiende kommt wird als PHP-Code interpretiert. Wenn da eine Ausgabe stattfinden soll, braucht man irgendeine der Ausgabe erzeugenden Anweisungen (echo, print, diverse Funktionen). Kommt im Code ein include (require, include_once, require_once) vor, schaltet PHP bei deren Ausführung wieder in den Nicht-PHP-Modus. In einer inkludierten Datei wird also wie in einer direkt aufgerufenen Datei alles ausgegeben, was nicht zwischen <?php und ?> steht.

                        Was von den gegebenen Hinweisen hast du eigentlich mal probiert? Hast du mal ein include ohne die fehlerhafte switch-Anweisung drumrum probiert, um zu sehen, ob das geht? Hast du alle Fehlermeldungen eingeschaltet und die Kontrollausgaben gemacht, um deinen Irrtum beim switch zu bemerken?

                        echo "$verabschiedung $name";

          2. echo $begrüßung;

            Allerdings werden keine Seiten inkludiert der Content bleibt einfach leer.

            Du siehst auch nichts dergleichen im Quelltext der ausgelieferten Seite? Wie steht das error_reporting? Setz das mal auf E_ALL (und display_errors auf on). Stimmt der übergebene Wert in $_GET['links'] mit den Werten des switch überein? Überprüf das mit Kontrollausgaben, var_dump() eignet sich dafür am besten. Füg doch da mal außer dem include noch eine Ausgabe ein, damit du siehst, dass/ob der entsprechende Zweig abgearbeitet wird.

            Muss ich bei den zu inkludierenden Seiten irgendetwas spezielles setzen bzw. schreiben. Außer das der Name und die Dateiendung mit den Angaben auf der Seite links übereinstimmt?

            Im Prinzip nicht. Wenn du jedoch keinen PHP-Code darin stehen hast, muss die Seite auch nicht durch den Parser und kann mit der Funktion readfile() gelesen werden.

            Wenn du nicht zum Erfolg kommst, fang nochmal aber ganz klein an. Bau dir das Prinzip mit dem switch für z.B. zwei Themen nach. Verwende zunächst eine feste Ausgabe. Du kannst auch die switch-Bedingung für diesen Test fest in den Quelltext schreiben, statt den $_GET-Wert zu verwenden. Prüfe vom switch unabhängig ob das include/readfile prinzipiell wie gewünscht funktioniert. Füge es dann in den jeweiligen switch-Zweig ein. Und vergleiche Wunsch und Wirklichkeit mit den erwähnten Kontrollausgaben. Man kann var_dump() auch Ausdrücke übergeben, nicht nur einzelne Variablen.

            echo "$verabschiedung $name";

      2. echo $begrüßung;

        ggf solltest du das ganze für dich leichter verständlich NICHT trinär schreiben:

        if (isset($_GET["links"])) {
          $links = $_GET["links"];
        }

        
        > Aber warum soll der Inhalt von $\_GET["links"] kopiert werden?  
        > Hier wird immer sehr deutlich darauf hingewiesen, dass dies die Herkunft der Daten verschleiere -  außerdem ist es unnötig.  
          
        Nun ja, hier sollte es offenbar dazu dienen, sicherzustellen dass ein Wert vorhanden ist, auch wenn er nicht per links-Parameter an der URL übergeben wurde. Es fehlte im Prinzip nur der Alternativwert.  
          
        Bei suits Vorschlag fehlte er ebenfalls, was dazu führt, dass beim Seitenaufruf ohne links-Parameter das $links nicht gesetzt wird. Nachfolgende Lesezugriffe ergäben Notice-Meldungen, wäre beim error\_reporting das E\_NOTICE-Bit gesetzt.  
          
        Mein Vorschlag sieht so aus:  
          
        switch (isset($\_GET['links']) ? $\_GET['links'] : '') {  
          default:  
          case "Start":  
            include "start.php";  
            break;  
          case ...:  
            ...;  
        }  
          
        Noch zwei Anmerkungen: Die switch-Anweisung war im OP fehlerhaft eingerückt. Das default: ist, so wie es notiert ist, gleichberechtigt zu case "Start":. Letzteres sollte dann auch die gleiche Einrückung haben. include ist keine Funktion, und benötigt keine Klammern um den Dateinamen. Die Klammern machen in dem Fall aus dem String einen berechneten Ausdruck ohne dass es was zu berechnen gab.  
          
          
        echo "$verabschiedung $name";
        
  2. Hi!

      
      
    
    >    $links = (isset($_GET["links"]))?$_GET["links"]:  
    
    

    willst du hier wirklich den Ternäroperator verwenden?
    Wenn ja, dann ist dieser nicht korrekt beendet! Deshalb folgt diese Meldung:

    Parse error: syntax error, unexpected T_SWITCH in /homepages/32/d243992636/htdocs/links.php on line 94

    ..da das switch an dieser Stelle vom Parser 'nicht erwartet' wurde.

    Ich glaube Du suchst eher sowas:

      
      
        if($_GET["links"]) {  
      
          switch($_GET["links"]) {  
              case 'bar':  
                         doFoo();  
                         break;  
              case 'foo':  
                         foBar();  
                         break;  
              //[...]  
          }  
       }  
      
      
    
    
  3. echo $begrüßung;

    Lt. Fehlerbericht scheint der Switch Befehl falsch zu sein aber da ich noch ganz großer Frischling bin was PHP angeht kann ich nicht wirklich erkennen was!

    Wenn man die fehlerhafte Stelle nicht sieht (und sie einem auch nicht bei einem Editor mit Syntax-Unterstützung auffällt), kann man versuchen, sie durch vorübergehendes Entfernen von Code-Blöcken zu finden. Hat man den Codeblock mit dem Fehler entfernt, sollte auch der Syntax- oder Sonstwas-Fehler verschwinden. Man kann dann davon ausgehen, dass der Fehler im entfernten Teil steckt. Diesen Teil kann man nun genauer inspizieren oder die Stelle durch Verkleinern der Code-Entfernung weiter einkreisen.

    Alternativ kann man auch mit einer leeren Datei beginnen und schrittweise Code hineinkopieren bis der Fehler auftritt.

    echo "$verabschiedung $name";

    1. Wenn man die fehlerhafte Stelle nicht sieht (und sie einem auch nicht bei einem Editor mit Syntax-Unterstützung auffällt), kann man versuchen, sie durch vorübergehendes Entfernen von Code-Blöcken zu finden

      Alternativ kann man auch mit einer leeren Datei beginnen und schrittweise Code hineinkopieren bis der Fehler auftritt.

      das ganze nennt sich "shotgun-debugging" und sollte wirklich nur die allerletzte lösungsmöglichkeit sein (zb wenn man keine fehlermeldung mehr bekommt)

      einfach 50% vom code entfernen, tritt der fehler dann immer noch auf ist der fehler im nicht entfernten teil (oder auch umgekehrt)

      hatte das letztens in einem mehrere tausend zeilen php script, da war irgendwo ein zeichen vor einem dollar wo es nicht hingehörte - das hat den php-interpreter dazu gebracht garnichts mehr zu tun (keine fehlerausgabe, kein eintrag im error-log - nichts, sowas hatte ich noch nie)

      solche fehler (ohne fehlermeldung) findet man nur durch syntax-highlighting nur noch mit glück beim drüberscrollen

  4. Hi!

    $links = (isset($_GET["links"]))?$_GET["links"]:

    Gibt es einen GET-Parameter 'links'? Ich vermute du meinst 'seite'. Natürlich darfst du auch den else-Zweig nicht vergessen (Beachte das ':' in deinem Code)

    switch ($links) {
             default:

    Bei einem solchen Fall haben weitere case-Zweige keinen Sinn, da immer nur dieser default-Zweig ausgeführt wird. Dieser Zweig sollte immer nur am Ende des Switch-Blockes verwendet werden (siehe das php.net-Manual zu Switches http://www.php.net/manual/de/control-structures.switch.php)

    Es gibt folgende Links:

    links.php?seite=system
    links.php?seite=video_sound
    links.php?seite=make_prog
    links.php?seite=html_co
    links.php?seite=sys_boards
    links.php?seite=sys_help

    Sollte der gepostete Code in der verlinkten 'links.php' stehen, so sind somit folgende Werte für $links möglich:

    system
    video_sound
    make_prog
    html_co
    sys_boards
    sys_help

    In der Switch-Anweisung vergleichst du allerdings auf die Werte

    Start
    system
    Video&nbsp;&&nbsp;Sound
    Programmierung
    Html&nbsp;&&nbsp;Co.
    Boards
    Hilfeseiten

    Bis auf 'system' kommt kein Wert je vor. Die cases sollten auf die richtigen Werte abgeändert werden.

    mfg
    Rato

    --
    §§§
    Meine Postings basieren lediglich auf mein Wissen und können völliger Blödsinn sein.
    §§§
    1. echo $begrüßung;

      switch ($links) {
               default:

      Bei einem solchen Fall haben weitere case-Zweige keinen Sinn, da immer nur dieser default-Zweig ausgeführt wird. Dieser Zweig sollte immer nur am Ende des Switch-Blockes verwendet werden (siehe das php.net-Manual zu Switches http://www.php.net/manual/de/control-structures.switch.php)

      Das ist nicht richtig.

      $x = 1;  
      switch ($x) {  
        default: echo 'default'; break;  
        case 1:  echo '1';       break;  
        case 2:  echo '2';       break;  
      }
      

      Dieser kurze Test liefert (unter PHP 5.2.5) "1" und nicht "default". Die deutsche Übersetzung der entsprechenden Stelle im Handbuch

      Ein Spezialfall ist default. Dieser Fall trifft auf alles zu, was nicht von den voranstehenden case-Ausdrücken erfasst wurde und sollte als letzte case Anweisung angegeben werden.

      stimmt auch nicht mit dem englischen Original überein:

      A special case is the default case. This case matches anything that wasn't matched by the other cases.

      Hier ist von keiner Reihenfolge der Übereinstimmungen die Rede. Obiger Test bestätigt, dass diese keine Rolle spielt, um den Einstiegpunkt in den switch-Body zu finden.

      echo "$verabschiedung $name";