Karl-Heinz Milaster: Nachladen von Inhalten in HTML-Seite

Hallo,

ich habe kürzlich in einem PHP-Buch gelesen wie man HTML-Code in eine bestehende HTML-Seite vom eigenen Server mit nur einem Befehl nachladen kann - ohne AJAX, JQuery & Co. Da ich ich etliche PHP-Bücher habe, war die nachträgliche Suche erfolglos. Hat jemand eine Idee?

Gruss, khm

  1. Hi,

    ich habe kürzlich in einem PHP-Buch gelesen wie man HTML-Code in eine bestehende HTML-Seite vom eigenen Server mit nur einem Befehl nachladen kann - ohne AJAX, JQuery & Co.

    also entweder hast du da etwas missverstanden, oder du drückst dich falsch aus. PHP wird auf dem Server ausgeführt, bevor die Seite beim Browser ankommt. Von "Nachladen" kann also keine Rede sein. Aber suchst du vielleicht einfach include?

    Damit wird aber nichts nachgeladen, sondern bereits auf dem Server eine weitere Datei an der Stelle in die Ausgabe eingefügt, wo das include-Statement steht.

    So long,
     Martin

    --
    Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
    - Douglas Adams, The Hitchhiker's Guide To The Galaxy
    1. Nein, ich habe da nichts missverstanden, der Autor hat sich so ausgedrückt.Aber mit include legst Du wahrscheinlixh richtig.

      Bestend Dank. khm

      1. Nein, ich habe da nichts missverstanden, der Autor hat sich so ausgedrückt.Aber mit include legst Du wahrscheinlixh richtig.

        Das Problem ist, dass man nichts nachladen kann per HTML. Und PHP wird eben auf dem Server ausgeführt. Ein beispiel:

        • Du rufst im Browser die Seite meine-webseite.de/index.php?seite=startseite auf, dann wird an den Server eine Nachricht mit folgendem Inhalt geschickt:

        GET /index.php?seite=startseite HTTP/1.1

        • Der Server führt, wenn entsprechend konfiguriert ist, die Seite index.php aus und steckt in $_GET['seite'] den Wert „startseite“.
        • Deine index.php führt alles passende aus und gibt irgendwann mittels echo den Inhalt aus.

        Alles was danach passiert, passiert nicht mit PHP. Ein Nachladen durch PHP ist hier schlicht nicht möglich.

        Was du allerdings machen kannst, ist je nach Parameter einen anderen Inhalt laden:

        $seite = isset($_GET['seite']) ? $_GET['seite'] : 'start';
        $template = file_get_contents($seite);
        // Noch bisschen Verarbeitung...
        echo $template
        

        Warnung: Das ist ein schlechtes Beispiel und sollte so niemals in produktiven Einsatz kommen!

        Freundliche Grüße
        Christian

        1. Tach!

          $seite = isset($_GET['seite']) ? $_GET['seite'] : 'start';
          $template = file_get_contents($seite);
          // Noch bisschen Verarbeitung...
          echo $template
          

          Warnung: Das ist ein schlechtes Beispiel und sollte so niemals in produktiven Einsatz kommen!

          Der Grund ist, dass anhand eines vom Anwender veränderbaren Parameters eine Datei eingeladen wird. Das kann dann am Ende auch eine mit einem Inhalt sein, den man nicht veröffentlicht haben möchte. Die bessere Variante wäre, den Parameter gegen eine Liste der erlaubten Dateinamen prüfen.

          dedlfix.

  2. ich habe kürzlich in einem PHP-Buch gelesen wie man HTML-Code in eine bestehende HTML-Seite vom eigenen Server mit nur einem Befehl nachladen kann - ohne AJAX, JQuery & Co.

    WANN willst Du das machen?

    • Bevor die Seite an den Server gesendet wird ODER
    • nachdem der Browser die Seite schon hat und der Benutzer etwas auslöst?

    Da ich ich etliche PHP-Bücher habe, war die nachträgliche Suche erfolglos.

    • PHP-Bücher sind nicht das Mittel der Wahl, wenn man nicht weiß was man überhaupt will, bzw. einen "HTML-Befehl" sucht, den es per Definition (Hypertext Markup Language) nicht geben kann. Aber readfile(), file_get_contents(), include[_once](), require[_once]() und co. stehen drin.

    Hat jemand eine Idee?

    Ich nicht. Ich habe gleich mehrere.

    1. Ich weiss sehr genau was ich will - und ich weiss sehr genau was ich nicht will: Mit Kanonen auf Spatzen schiessen (AJAX). Und wie kommst Du darauf, dass ich nach einem HTML-Befehl gesucht habe?

      1. Und wie kommst Du darauf, dass ich nach einem HTML-Befehl gesucht habe?

        Weil du auch html als Thema im Titel gewählt hast. Und php, das zeigt mir deine Unsicherheit, an welcher Stelle man "nachladen" kann.

        Linuchs

      2. Tach!

        und ich weiss sehr genau was ich nicht will: Mit Kanonen auf Spatzen schiessen (AJAX). Und wie kommst Du darauf, dass ich nach einem HTML-Befehl gesucht habe?

        Nun, die Verwirrung liegt wohl an der ungünstigen Wortwahl. Nachladen meint, dass man schon Inhalt hat und anschließend weitere oder andere Inhalte hinzufügt. Und das betrachtet man üblicherweise aus Sicht des Browsers. In deinem Fall geht es dir jedoch darum, erst einmal überhaupt auf dem Server die Inhalte zusammenzustellen. Natürlich kann man das so sehen, dass man da ein Template hat und dieses von sich aus weitere Inhalte hinzulädt und das als Nachladen bezeichnen, oder dass das Zusammenbauen durch nacheinander stehende Lade-Befehle stattfindet. Aber das scheint mir eher unüblich. Mit Nachladen meint man meistens einen deutlichen zeitlichen Versatz zwischen dem ersten Laden und den weiteren, in der Regel erst ausgelöst durch eine Benutzerhandlung.

        Aber wie auch immer, es sind ja für alle Fälle entsprechende Möglichkeiten genannt worden. Bei Unklarheiten oder weiteren Problemen einfach nachfragen. Und nicht dran stören, dass wir hier Erbsenzählen. Das liegt halt in der Natur der Sache, dass man sich beim Programmieren sehr genau ausdrücken muss, damit der Computer das macht, was man will.

        dedlfix.

  3. ich habe kürzlich in einem PHP-Buch gelesen wie man HTML-Code in eine bestehende HTML-Seite vom eigenen Server mit nur einem Befehl nachladen kann - ohne AJAX, JQuery & Co.

    Hmm... vielleicht hat er über die fetch-API geschrieben. Damit wird aus…

    const request = new XMLHttpRequest()
    request.open('GET','/foo')
    request.send()
    request.addEventListener('load', _ => document.querySelector('#bar').innerHTML = request.responseText)
    

    …so etwas hier:

    fetch('/foo').then(response => document.querySelector('#bar').innerHTML = response.text())
    
    1. Hi,

      Hmm... vielleicht hat er über die fetch-API geschrieben. Damit wird aus…

      const request = new XMLHttpRequest('GET','/fetch')
      request.send()
      request.addEventListener('load', _ => document.querySelector('#bar').innerHTML = request.responseText)
      

      …so etwas hier:

      fetch('/foo').then(response => document.querySelector('#bar').innerHTML = response.text())
      

      das hätte dann aber nichts mit PHP zu tun, sondern doch wieder mit Javascript.

      So long,
       Martin

      --
      Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
      - Douglas Adams, The Hitchhiker's Guide To The Galaxy
    2. Nur am Rande

      fetch('/foo').then(response => document.querySelector('#bar').innerHTML = response.text())

      response.text() ist asynchron & gibt wieder einen Promise zurück. Eher:

      fetch('/foo')
        .then((response) => response.text())
        .then((text) => {
          document.querySelector('#bar').innerHTML = text;
        })
      

      Wobei hier noch das Error Handling fehlt.

  4. Hallo Karl-Heinz,

    Hat jemand eine Idee?

    Redest du vor Server-sent events?

    LG,
    CK