Toadward: php code in variablen

hallo forumler,

kann mir jemand bei folgendem problem weiterhelfen ??

ich lese den inhalt eines datenbankfelds in die variable $inhalt. danach gebe ich den inhalt  der variable mit dem befehl echo aus --> echo $inhalt;

mit text und html inside geht das auch ganz gut, wenn ich jedoch in das datenbankfeld php code reinschreibe funkt es nicht so wie ich es mir denke. der php code wird als ganz normaler text ausgegeben.

gibt es da einen trick??
das datenbankfeld ist vom typ "longtext" !!!

ich bin für jeden hinweis dankbar!!!

thx
toadward

  1. Hallo Toadward,

    ich lese den inhalt eines datenbankfelds in die variable $inhalt. danach gebe ich den inhalt  der variable mit dem befehl echo aus --> echo $inhalt;
    mit text und html inside geht das auch ganz gut, wenn ich jedoch in das datenbankfeld php code reinschreibe funkt es nicht so wie ich es mir denke. der php code wird als ganz normaler text ausgegeben.

    Imho ist das was Du suchst eval(); Das interpretiert einen String als Code, und führt diesen aus.

    Gruß AlexBausW

    Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html

  2. Hallo Toadward,

    mit text und html inside geht das auch ganz gut, wenn ich jedoch in das datenbankfeld php code reinschreibe funkt es nicht so wie ich es mir denke. der php code wird als ganz normaler text ausgegeben.

    gibt es da einen trick??

    ja eval() ist das Zauberwort. siehe auch http://php-center.de/de-html-manual/function.eval.html

    Viele Grüße

    Antje

  3. hallo,

    ich habe das mit dem eval mal ausprobiert und auch in dem php-manual help file gefunden.
    leider geht es aber nicht so, wie ich das möchte :-(

    folgeden code benutze ich zum ausprobieren:

    <?php
    $anz=20;
    $inhalt='hallo $anz<br>echo"tester";';
    eval("$inhalt = "$inhalt";");
    echo $inhalt;
    ?>
    </p>

    rauskommen soll:

    hallo 20
    tester

    rauskommt aber:

    hallo 20
    echo"tester";

    also funkt das eval irgendwie nur mit php variablen, aber nicht mit normalen befehlen (die eval zeile stand so im php-manual).

    kann mir da irgendwer weiterhelfen ???

    thx
    toadward

    1. Hallo Toadward,

      Dröseln wir den Code mal auf:

      $anz=20;

      $inhalt='hallo $anz
        echo"tester";';

      in $inhalt steht jetzt der Text 'hallo $anz \n echo "tester";'
      Wie dir bestimmt auffällt ist das keine gültige PHP Syntax.

      eval("$inhalt = "$inhalt";");

      Hier wird jetzt folgendes Codestück zusammengebaut und ausgeführt

      $inhalt="hallo $anz \n echo "tester";";
                       ^^^^
      dabei wird jetzt, durch die Auswertung beim eval(), die 20 eingefügt, so
      dass hinterher in $inhalt 'hallo 20 \n echo "tester";' steht, also genau die
      Ausgabe die du bekommst.

      Um das zu erzielen, was du dir vorstellst sähe der Code so aus:

      <?php
        $anz=20;
        $inhalt='echo "hallo $anz \n tester";' ;
        eval ($inhalt);
      ?>

      Anmerkung: Das \n erzeugt einen Zeilenumbruch im String. Ich finde die
      Zeilenumbrüche im Quelltext, die hinterher im String wieder auftauchen
      unübersichtlich (sie versauen die Einrückungen), deswegen stattdessen \n.

      und, raucht die Birne schon?
      ...Nein... ok:

      <?php
      $anz=20;
      $inhalt='hallo $anz \n echo"\ntester";';

      eval("$inhalt = "$inhalt";");

      echo $inhalt."<br>";

      $teile=explode("\n",$inhalt);

      echo $teile[0];

      eval($teile[1]);

      ?>

      jetzt bekommst du auch wieder deine 'erwartete' Ausgabe.
      Tipp: Ersetze beim Testen solcher Programme eval() durch echo und guck dir
      an was bei rauskommt -> es muss gültiger Code sein der das tun würde, was du
      möchtest.

      also funkt das eval irgendwie nur mit php variablen, aber nicht mit normalen
      befehlen (die eval zeile stand so im php-manual).

      Geh mal davon aus, das PHP _funktioniert_. Einer der angenehmen Eigenschaften
      der Sprache. Manchmal nicht gut fürs Ego, aber schon praktisch weil man gleich
      weiss wo man den Fehler suchen muss ;-)

      Gruss,
      Carsten