PHP in gemischtem String ausführen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP in gemischtem String ausführen

    Hallo,

    ich habe in einer Datei - content.ct - verschiedene Datensätze gespeichert, die ich über ein PHP-Script wahlweise ausgebe. (Soweit nichts Dramatisches.) Ein Datensatz könnte z.B. so aussehen:

    Titel|:|<p>Wir wünschen Ihnen viel Spaß mit dieser Homepage</p>

    Problematisch wird es jedoch, wenn der Datensatz selbst PHP-Code enthält. Solch ein Datensatz hätte vielleicht dieses Aussehen:

    Datensatz mit PHP|:|<p>Wir wünschen Ihnen viel Spaß mit dem <?PHP echo "PHP-Content";?> auf dieser Seite</p>

    Beim Anzeigen im Browser wird der PHP-Teil (natürlich) nicht dargestellt. Gibt's da eine Möglichkeit, dies zu ändern?

    SuperUser


  • #2
    http://www.php.net/eval

    hth
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      So, sehr schön. Danke erstmal für die Antwort. Leider geht's so wohl nicht.

      PHP-Code:
      <?php
      $str 
      '<p>Wir wünschen Ihnen viel Spaß mit dem <?PHP echo "PHP-Content";?> auf dieser Seite</p>';
      echo 
      $str;
      eval (
      $str);
      echo 
      $str;
      ?>
      macht "Parse error: parse error, unexpected '<' in c:\webdesign\4momo\demo\test.php(4) : eval()'d code on line 1".

      Was ist da falsch?

      MoMo

      Kommentar


      • #4
        Du darfst mit dem eval nur PHP-Code ausführen.

        Du kannst es allerdings austricksen:
        PHP-Code:
        <?php
        $str 
        '<p>Wir wünschen Ihnen viel Spaß mit dem <?PHP echo "PHP-Content";?> auf dieser Seite</p>';
        echo 
        $str;
        $str = eval ("?>".$str);
        echo 
        $str;
        ?>
        hopka.net!

        Kommentar


        • #5
          Vielen Dank! Immerhin wird PHP jetzt ausgeführt *smile*. Allerdings noch nicht an der "richtigen Stelle". Folgendes script dazu:

          PHP-Code:
          <?php
          include "class.FastTemplate.php3";

          $tpl = new FastTemplate(".");

          $tpl->define(array(
          "template" => "template.tpl"
          ));

          if(!isset(
          $_GET["id"])) $id 0;
          if(!isset(
          $id)) $id $_GET["id"];

          $array1 = array();
          $datei fopen("inhalt/content.ct","r");
          while (!
          feof($datei)) {
              
          $zeile fgets($datei,1000);
              
          array_push($array1,$zeile); }
          fclose($datei);

          if(!
          $array1[$id])
          $id 0; }

          $array explode("|:|",$array1[$id]);
          $titel $array[0];
          $inhalt $array[1];

          $inhalt = eval ("?>".$inhalt);

          $tpl->assign("{title}"$titel);
          $tpl->assign("{inhalt}"$inhalt);

          $tpl->parse("ausgabe""template");
          $tpl->FastPrint("ausgabe");
          ?>
          Allerdings gibt ^SCRIPT^ dann $inhalt nicht an dem Platzhalter {inhalt} aus, sondern vor allen Headern, also so:
          Code:
          <p>Wir wünschen Ihnen viel Spaß mit dem PHP-Content auf dieser Seite</p>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                  "http://www.w3.org/TR/html4/strict.dtd">
          <html>
          <head>
          <title>Test1 </title>
          Moritz

          Kommentar


          • #6
            is ja klar

            du verwendest echo und eval führt den echo befehl aus, also hast du die ausgabe auf dem bildschirm stehen

            du müsstest statt echo die ausgabe in ner variablen zwischenspeichern und die dann an der gewünschten stelle mittels template engine ausgeben
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Wie sähe das dann in der Praxis aus?

              //edit:

              du müsstest statt echo die ausgabe in ner variablen zwischenspeichern und die dann an der gewünschten stelle mittels template engine ausgeben
              Aber habe ich das nicht getan?
              PHP-Code:
              $inhalt = eval ("?>".$inhalt);

              $tpl->assign("{inhalt}"$inhalt);
              $tpl->parse("ausgabe""template");
              $tpl->FastPrint("ausgabe"); 

              //edit:
              Hat anscheinend nichts mit echo, etc. zu tun: Auch ohne PHP im Content-String $inhalt wird $inhalt ganz oben auf die Seite gesetzt.
              Zuletzt geändert von MoMo; 27.07.2003, 18:12.

              Kommentar


              • #8
                Ich bedanke mich für diesen smarten Trick Hopka, der kommt mir gerade zupass.
                Nicht die hohe Schule vermutlich, aber umso effizienter

                mfg CHnuschti

                Kommentar

                Lädt...
                X