Onkel Schnitzel: Einbindung von PHP in HTML

Tag,

Um in meine html-Dokumente PHP-Code einzufügen habe ich bis jetzt immer das ganze Dokument in php-Tags gesetzt und die HTML-Elemente entsprechen umgeformt. Also z.B. so:

<?php....
    echo      "<tr>\n".
                "<td class="gb_tab_li".($reihe%2)."">\n";
?>

Nun habe ich schon öfter gesehen, daß man auch ein ganz normales HTML-Dokument schreiben kann und jedesmal, wenn PHP-Code kommt, dies extra auszeichnet. Ich hab das jetzt mal probiert, aber irgendwie hauts nicht hin:

<tr>
  <td class="gb_tab_li<?($reihe%2);?>">

Wie müßte das denn korrekt aussehen und welche von beiden Schreibweisen sollte man anwenden? Gibt es da Geschwindigkeitsunterschiede beim Parsen?

Beste Grüße,
Onkel Schnitzel

  1. Hallo,

    <?php....
        echo      "<tr>\n".
                    "<td class="gb_tab_li".($reihe%2)."">\n";
    ?>

    Okay, so kann man das machen.

    <tr>
      <td class="gb_tab_li<?($reihe%2);?>">

    Im Prinzip auch okay, nur zwei Kleinigkeiten hätte ich an deinem Beispiel auszusetzen:
    1. Benutze sicherheitshalber auch inline die Langform <?php ..., denn die Short Tags werden nicht auf allen Servern unterstützt.
    2. So ist dein PHP-Code nutzlos, weil er nichts ausgibt. Die Zeile müsste dann schon

    <td class="gb_tab_li<?php echo($reihe%2);?>">

    lauten. Denn die _Ausgabe_ von PHP wird ja ins HTML-Dokument geschrieben.

    Wie müßte das denn korrekt aussehen und welche von beiden Schreibweisen sollte man anwenden? Gibt es da Geschwindigkeitsunterschiede beim Parsen?

    Wenn du nur kleine Fetzen PHP in einem ansonsten statischen HTML-Dokument hast, würde ich dir die zweite Form empfehlen. Da wird der PHP-Parser nur für die Abschnitte bemüht, für die er auch nötig ist.
    Hast du dagegen ein PHP-Script, das eine umfangreiche Programmlogik implementiert und nur so "nebenbei" noch etwas HTML-Information ausgibt, würde ich der Einfachheit halber die erste Form nehmen. Von der Performance her ist das vielleicht _etwas_ schlechter, weil das ganze HTML-Dokument dynamisch über die echo-Anweisung von PHP generiert wird. Dürfte aber in der Praxis nicht viel ausmachen.

    Alle Klarheiten beseitigt?  ;)
    So long,

    Martin

    1. hallo,

      <td class="gb_tab_li<?($reihe%2);?>">
      Im Prinzip auch okay

      Nein. Erstens sinds deine "Kleinigkeiten", zweitens aber folgen zwei öffnende spitze Klammern unmittelbar aufeinander. Das wird nicht funktionieren, und valide ist es auch nicht.

      Grüße aus Berlin

      Christoph S.

      1. Hi Christoph,

        zweitens aber folgen zwei öffnende spitze Klammern unmittelbar aufeinander.

        Na und?

        und valide ist es auch nicht.

        ?? Valide? Wie meinst du das?

        Live long and prosper,
        Gunnar

        --
        „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
      2. Hallo Christoph,

        [...] zweitens aber folgen zwei öffnende spitze Klammern unmittelbar aufeinander. Das wird nicht funktionieren, und valide ist es auch nicht.

        Weder der Validator, noch irgendein UA wird hier zwei aufeinanderfolgende öffnende Klammern sehen, weil nämlich die zweite mit dem ?php dahinter schon vom PHP-Parser eliminiert wird. Die zwei öffnenden Klammern sieht nur der Autor der Seite in seinem Quelltext (und auch nur, wenn er drauf achtet).

        Schönes Wochenende,

        Martin

      3. Hallo Christoph,

        <td class="gb_tab_li<?($reihe%2);?>">
        Im Prinzip auch okay
        Nein. Erstens sinds deine "Kleinigkeiten", zweitens aber folgen zwei öffnende spitze Klammern unmittelbar aufeinander. Das wird nicht funktionieren, und valide ist es auch nicht.

        ähh... kann es sein, dass dein Holunderwein nicht gut war? Nachdem PHP die Zeile geparst hat (vorrausgesetzt short_open_tag steht auf on), steht da lediglich noch <td class="gb_tab_li"> und das ist schließlich korrektes html - was soll daran jetzt falsch/nicht valide sein?

        Grüße aus Nürnberg
        Tobias

        1. hallo Tobias,

          ähh... kann es sein, dass dein Holunderwein nicht gut war?

          Nein, das kann nicht sein, der ist leider alle :-(

          Nachdem PHP die Zeile geparst hat

          Schau dir das OP nochmal genau an. Onkel Schnitzel will das ja eben gerade nicht mehr innerhalb von PHP haben, sondern übernimmt es mit

          irgendwie hauts nicht hin:
          <tr>
            <td class="gb_tab_li<?($reihe%2);?>">

          unmittelbar in künftiges HTML. Und _da_ isses dann verkehrt.

          Ok, das hätt ich wohl genauer so angeben sollen.

          Grüße aus Berlin

          Christoph S.

          1. chau dir das OP nochmal genau an. Onkel Schnitzel will das ja eben gerade nicht mehr innerhalb von PHP haben, sondern übernimmt es mit

            irgendwie hauts nicht hin:

            unmittelbar in künftiges HTML. Und _da_ isses dann verkehrt.

            Hallo?

            Meines bescheidenen Wissens nach, wird alles ab <? bis zu ?> von PHP geparst, das heißt, es wird in diesem Falle nicht beim Browser ankommen, weil keine Ausgabe im PHP Block stattfindet es kommt an:
            <tr>
               <td class="gb_tab_li">

            Ok, das hätt ich wohl genauer so angeben sollen.

            Was?

            Struppi.

            1. Das Problem wird sein, daß die Anführungszeichen den PHP-Code-Schnipsel als Teil des Klassennahmens sehen.

              Wie wäre es statt

              <td class="gb_tab_li<?($reihe%2);?>">

              die ganze Klasse reinzunehmen, dürfte nicht soviel komplizierter werden...

              <td class=<? echo ""gb_tab_li".($reihe%2).""";?>>

            2. hallo Struppi,

              Ok, das hätt ich wohl genauer so angeben sollen.
              Was?

              folgendes Schema:
                <HTML>
                <body>
                <table><tr>
                <td class="irgendwas<?PHP-Code?>">
                ...

              Ich habs auf einer Testseite durchgespielt. Der Validator meldet folgerichtig, daß ich nicht zweimal "<" hintereinander schreiben darf.

              Dagegen funktioniert
                <HTML>
                <body>
                <table><tr>
                <?php
                ...
                echo '<td class="irgendwas<$Variable>">'
                ?>
                ...
              völlig problemlos.

              Grüße aus Berlin

              Christoph S.

              1. Armer unter Entzugserscheinungen leidender Christoph,

                <td class="irgendwas<?PHP-Code?>">
                Ich habs auf einer Testseite durchgespielt. Der Validator meldet folgerichtig, daß ich nicht zweimal "<" hintereinander schreiben darf.

                Valide soll nicht das sein, was in den Server* hineinkommt, sondern was dort rauskommt.

                Live long and prosper,
                Gunnar

                *Womit hier die Software (Apache, …) gemeint ist.

                --
                „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
                1. hallo Gunnar,

                  Armer unter Entzugserscheinungen leidender Christoph

                  I wo, ich steh schon wieder unter Hagebutten-Emulation (oder wie das heißt)

                  Valide soll nicht das sein, was in den Server* hineinkommt, sondern was dort rauskommt.

                  Äh, du hattest aber https://forum.selfhtml.org/?t=111461&m=701830 bereits zur Kenntnis genommen?

                  Live long and prosper

                  Würde ich ja tun, wenn ich nur wüßte, wie ich "prosper" leben soll ...

                  Grüße aus Berlin

                  Christoph S.

                  1. Hi Christoph,

                    I wo, ich steh schon wieder unter Hagebutten-Emulation (oder wie das heißt)

                    Emulation? Sind die Hagebutten nicht mal echt?

                    Falls du Emulsion meinst: Was hat du dazugepanscht?

                    Würde ich ja tun, wenn ich nur wüßte, wie ich "prosper" leben soll

                    Gemäß den Lehren von Surak. Ist aber Interpretationssache.

                    Live long and prosper,
                    Gunnar

                    --
                    „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
          2. Hallo Christoph,

            Schau dir das OP nochmal genau an. Onkel Schnitzel will das ja eben gerade nicht mehr innerhalb von PHP haben, sondern übernimmt es mit

            irgendwie hauts nicht hin:
            <tr>
              <td class="gb_tab_li<?($reihe%2);?>">

            unmittelbar in künftiges HTML. Und _da_ isses dann verkehrt.

            mit meinem bescheidenen PHP-Wissen würde ich folgendes vermuten:

            Originalzeile:

            <td class="gb_tab_li<?($reihe%2);?>">

            1. HTML-Teil:

            <td class="gb_tab_li

            2. PHP-Teil:

            <?($reihe%2);?>

            3. HTML-Teil:

            ">

            Ersetzen wir mal den PHP-Teil durch XYZ, ergibt sich:

            <td class="gb_tab_liXYZ">

            Daß da das echo fehlt, ist eine andere Frage.

            Oder irre ich mich da?

            Viele Grüße

            Jörg

          3. Hallo Christoph,

            Entweder liegt hier ein Missverständnis vor, oder du stehst gerade mächtig auf der Leitung :-)

            Schau dir das OP nochmal genau an. Onkel Schnitzel will das ja eben gerade nicht mehr innerhalb von PHP haben, sondern übernimmt es mit

            du weißt aber schon, dass man PHP-Code auch mitten in den HTML-Code schreiben kann, oder?

            <tr>
              <td class="gb_tab_li<?($reihe%2);?>">
            unmittelbar in künftiges HTML. Und _da_ isses dann verkehrt.

            nein. Dieses "<?($reihe%2);?>" _ist_ PHP (zwar kein besonders sinnvolles, aber das ist ja hier egal). Wenn PHP das Dokument parst, wird es den Inhalt der Datei bis einschließlich '<td class="gb_tab_li' ausgeben, und dann das was zwischen dem <? und dem schließenden ?> steht als PHP parsen. Da dieser PHP-Code nichts ausgibt, wird dann nach dem ?> weitergemacht und '">' ausgegeben - und schon steht mit '<td class="gb_tab_li">' völlig korrektes html in der Ausgabe ...

            Grüße aus Nürnberg
            Tobias

            1. hallo Tobias,

              Entweder liegt hier ein Missverständnis vor

              Ja ;-)

              Wenn PHP das Dokument parst

              Das tut es ja nicht, weil Onkel Schnitzel ein HTML-Dokument haben möchte  -  es sei denn, der Server parst alle HTML-Dokumente gleich so, als ob sie PHP-Scripts wären.

              Grüße aus Berlin

              Christoph S.

              1. Hallo Christoph,

                Wenn PHP das Dokument parst

                Das tut es ja nicht, weil Onkel Schnitzel ein HTML-Dokument haben möchte  -  es sei denn, der Server parst alle HTML-Dokumente gleich so, als ob sie PHP-Scripts wären.

                stimmt - vielleicht sollte man Onkel Schnitzel erstmal fragen, als was er das speichert ... ;-)

                Viele Grüße

                Jörg

              2. Hallo Christoph,

                Wenn PHP das Dokument parst
                Das tut es ja nicht, weil Onkel Schnitzel ein HTML-Dokument haben möchte  -  es sei denn, der Server parst alle HTML-Dokumente gleich so, als ob sie PHP-Scripts wären.

                mhh... davon war ich (und ich denke der OP auch) ausgegangen, dass die Dateien immernoch von php geparst werden. Ich vermute mal, dass mit "HTML-Dokument" eine Datei gemeint war, die eben hauptsächlich html-Code enthält, aber eben zwischendrin auch php-Fetzen - aber weiterhin irgendwas.php heißt.

                Grüße aus Nürnberg
                Tobias

                1. hallo Tobias,

                  Ich vermute mal, dass mit "HTML-Dokument" eine Datei gemeint war, die eben hauptsächlich html-Code enthält, aber eben zwischendrin auch php-Fetzen - aber weiterhin irgendwas.php heißt.

                  Siehst du, _da_ haben wir dann das mögliche Mißverständnis. Aber ich sehe grade, daß ich das weiter unten in meiner Antwort an Struppi auch nicht korrekt _so_ formuliert habe, grrrmpf.

                  ok, ich mach denn mal ne Flasche Hagebuttenwein auf, den hab ich ja noch ...

                  Grüße aus Berlin

                  Christoph S.

  2. Onkel Schnitzel versuch mal

    <tr>
      <td class="gb_tab_li" <?echo ($reihe%2);?>
    </tr>

    Wobei du die Klammern um $reihe%2 auch weglassen kannst

    Gruß Heiko

    1. Heißa, Heiko,

      <tr>
        <td class="gb_tab_li" <?echo ($reihe%2);?>
      </tr>

      Wenn du schon die Shorttags benutzt, kannst du auch gleich

        
      <tr>  
        <td class="gb_tab_li[code lang=php]<?=$reihe%2?>
      ~~~">  
      </tr>  
      [/code]  
      schreiben.  
        
        
      Gautera!  
      Grüße aus [Biberach Riss](http://www.stadt-biberach.de/),  
      Candid Dauth  
      
      -- 
      Ein Fußball-Fan? Noch auf der Suche eine Schlafmöglichkeit im Großraum Stuttgart für die WM 2006? Wie wäre es mit Herrenberg, einer gemütlichen Kleinstadt am Rande des Schönbuchs? – Von der Lage her ideal, auch für andere Vorhaben im Urlaub. [Ferienwohnungen-Herrenberg.com](http://www.ferienwohnungen-herrenberg.com/).  
        
      <http://cdauth.de/>
      
  3. Hier hat sich ja ein interessanter Diskurs entsponnen. Es gibt also viele Möglichkeiten PHP in HTML umzusetzen- ich dachte da gibts irgendwelche Richtlinien. Na jedenfalls hats bei mir jetzt funktioniert. Es hat natürlich das 'echo' gefehlt (es sind eigentlich immer wieder die gleichen blöden Fehler :-/ ).

    Ich speichere das Dokument übrigens als *.php. Es ging mir also nicht um eine lupenreine validierte HTML-Datei. Nebenbei gefragt- muß ich nicht sogar als *.php speichern? Sonst wird der doch Parser gar nicht "aktiviert", dachte ich.

    Beste Grüße,
    Onkel Schnitzel

    1. N'Obend

      Nebenbei gefragt- muß ich nicht sogar als *.php speichern? Sonst wird der doch Parser gar nicht "aktiviert", dachte ich.

      Man kann ihm (dem Server) sagen, dass er auch Dateien mit anderen Endungen von PHP parsen lassen soll. Standardmäßig tut er's aber nicht.

      Tschö,
      dbenzhuser

      --
      Heute in der Reihe „unser Ranking soll schöner werden“:
      Gefälschte Musikinstrumente Marke Bessons
    2. Hallo,

      Ich speichere das Dokument übrigens als *.php. Es ging mir also nicht um eine lupenreine validierte HTML-Datei.

      Ja, das war den meisten von uns wahrscheinlich klar. Nur Christoph hatte anscheinend heute Lust auf Haarspaltereien. ;)

      Nebenbei gefragt- muß ich nicht sogar als *.php speichern? Sonst wird der doch Parser gar nicht "aktiviert", dachte ich.

      Normalerweise ja, aber das muss nicht zwangsläufig so sein. Es soll Admins geben, die auch sämtliche *.html-Dateien durch den PHP-Parser pfeifen.

      So long,

      Martin

      1. Heißa, Der, ;-)

        Normalerweise ja, aber das muss nicht zwangsläufig so sein. Es soll Admins geben, die auch sämtliche *.html-Dateien durch den PHP-Parser pfeifen.

        Afaik machen die das bei Funpic so, ohne einen vorzuwarnen. Da bekommt man dann PHP-Fehlermeldungen wegen der XML-Prologe.

        Naja, sinnvoll kann es schon sein, wenn man zum Beispiel in ein großes Projekt plötzlich ein wenig PHP einbauen möchte, aber nicht alle Dateien umbenennen will.

        Aber gehe ich recht in der Annahme, dass das performancetechnisch völliger Blödsinn ist, wenn man es gar nicht nutzt?

        Gautera!
        Grüße aus Biberach Riss,
        Candid Dauth

        --
        Ein Fußball-Fan? Noch auf der Suche eine Schlafmöglichkeit im Großraum Stuttgart für die WM 2006? Wie wäre es mit Herrenberg, einer gemütlichen Kleinstadt am Rande des Schönbuchs? – Von der Lage her ideal, auch für andere Vorhaben im Urlaub. Ferienwohnungen-Herrenberg.com.
        http://cdauth.de/
        1. n'Abend!

          Heißa, Der, ;-)

          Ah, noch so einer! ;)

          Afaik machen die das bei Funpic so, ohne einen vorzuwarnen. Da bekommt man dann PHP-Fehlermeldungen wegen der XML-Prologe.

          Oh ja, auf den Gedanken bin ich noch gar nicht gekommen! Klar, bei reinen HTML-Dokumenten ist es ja kein Problem...

          Aber gehe ich recht in der Annahme, dass das performancetechnisch völliger Blödsinn ist, wenn man es gar nicht nutzt?

          Ja, eigentlich schon. Aber ich gehe auch davon aus, dass ein vernünftig geschriebener PHP-Parser sehr schnell und ohne große Performance-Einbußen über die Datei hinwegliest, wenn er kein "<?php" oder "<?" findet. Eine kleine "Bremse" bleibt's natürlich trotzdem.

          So long,

          Martin

        2. Hi Candid,

          Naja, sinnvoll kann es schon sein, wenn man zum Beispiel in ein großes Projekt plötzlich ein wenig PHP einbauen möchte, aber nicht alle Dateien umbenennen will.

          Naja, da gibt’s ja auch die Möglichkeit, Ressourcen ohne Dateiendung zu referenzieren und es dem Server zu überlassen, das richtige auszuliefern. Cool links don’t change: der URI http://example.net/foo bleibt bestehen, auch wenn man foo.html durch foo.php ersetzt.

          Live long and prosper,
          Gunnar

          --
          „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
      2. öhm ...,

        Nur Christoph hatte anscheinend heute Lust auf Haarspaltereien. ;)

        Die hat er immer, merk dir das endlich!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        (ups, ich bin grade irgendwie verklemmt)

        Und Schnitzel-Onkel ist ja auch nicht mehr so _ganz_ neu im Forum und könnte mitbekommen haben, daß es bisweilen erheblich schwieriger ist, eine Frage präzise zu stellen, als eine präzise Antwort auf eine unpräzise Frage zu formulieren ;-)

        Nebenbei gefragt- muß ich nicht sogar als *.php speichern?
        Normalerweise ja, aber das muss nicht zwangsläufig so sein.

        Siehst du: genau das war der Ansatzunkt für meine "Haarspalterei".

        Es soll Admins geben, die auch sämtliche *.html-Dateien durch den PHP-Parser pfeifen.

        Das ist nicht alles, was beim erörterten Thema Probleme verursachen könnte.

        Grüße aus Berlin

        Christoph S.