PHP-Code + HTML Code aus Datenbank auslesen

Danielku15

Erfahrenes Mitglied
Hallo Leute.

Es gibt ja mittels eval() die Möglichkeit PHP-Codes in einem String auszuführen und somit auch PHP-Scripte aus einer Datenbank auszulesen. Nun ist aber mein Problem dass bei der Funktion eval() dass der String ein kompletter PHP-Code sein muss. Hier ein Beispiel wie ein Eintrag aussieht :
PHP:
 [h1]Überschrift[/h1]
 Beschreibung
 <?php
 echo "Hallo".$_SESSION[User];
 include("user.php?Name=".$_SESSION[User]);
 ?>
Nun möchte ich dass der PHP-Code geparst wird. Ich habe bereits verschiedene Funktionen für die Ausgabe von gemischten Einträgen probiert jedoch bekam ich immer Fehlermeldungen wie
Parse error: syntax error, unexpected T_ECHO in C:\Programme\Apache Group\Apache2\htdocs\homepage-hilfe\templates\generatoren\generatoren_flash.php(14) : eval()'d code on line 3

Ich bin echt am Ende mit meinem Latein. Ich hoffe ihr könnt mir helfen.

mfg daniel
 
Hallo.

Hab mal das wichtigste zusammengefügt und hier der Code:
PHP:
      <?php
      
      /*
      ** generatoren_flash.php
      */
      
      ## Daten aus der Datenbank holen
      ...
      ## Check ob ein Eintrag exestiert
      ...
      ## Definition Variablen aus der Datenbank
      	$titel = $result[0][Titel]; //Titel des Generators
      	$beschreibung = $result[0][Beschreibung]; //Bescheiubung des Generators
      	$text = bbcode($result[0][Text]); //Text des Generators + Umwandlung der BB-Tags in html tags
      ?>
      ...
      <h2><?php echo $titel; ?></h2>
      <b><?php echo $beschreibung; ?></b>
      <br><br>
      <?php echo $text; ?>
      ...

Hier der Eintrag in der Tabelle generatoren_flash:
Code:
      ID: 1
      -----------------------------------
      Titel:Meta Tag Generator
      -----------------------------------
      Beschreibung: Ein Generator zum generieren von Metatags 
      -----------------------------------
      Text:
   
 Einfach deinen Namen in das Textfeld eintragen und auf Absenden klicken
      Dann muss der Code nur noch zwischen <head> und </head> eingefügt werden
  
      <?php 
      if($_POST["sent"] && $_POST["copyright"] != "")
      {
      $ausgabe = '<meta name="copyright" content="'.$_POST["copyright"].'" />';
      }
      ?>
      <form action="<?php echo $_SERVER["REQUEST_URI"]; ?>" method="post">
      <input type="hidden" name="sent" value="1">
      <input type="text" name="copyright" value="<?php echo $_POST["copyright"]; ?>">
      <input type="submit" value="Absenden" name="submit">
      </form>
      <hr>
      Ihr Code:
      <?php echo $ausgabe; ?>

Der PHP-Code soll nun auch wirklich ausführbar sein.

mfg daniel
 
mhh, eigentlich brauch ich die Zeile 3, aber da du das jetzt so schön bearbeitet hast, hab ich da keine Chance....
 
Aso du willst den Fehler aus den ich gepostet habe suchen. Die Funktion die diesen Fehler verursacht hat ist schon wieder weg (hab jo weiter probiert das Problem zu lösen).
Aber hier der alte Code:
PHP:
 <?php
 //Daten aus der Datenbank Holen
 $db = new db1();
 $sql = "SELECT * FROM generatoren_flash WHERE ID = ".$_GET["ID"];
 $result = $db->db_sql($sql);
 
 //Funktion für das Umwandeln von HTML-Code und PHP-Code zu einem geparsten PHP-Code
 
 function eval_mixed_helper($arr){
   return ("echo stripslashes(\"".addslashes($arr[1])."\");");
   }
 
 function eval_mixed($string){
   $string = "<? ?>".$string."<? ?>";
   $string = preg_replace("/<\?=\s+(.*?)\s+\?>/", "<? echo $1; ?>", $string);
   $string = str_replace('?>', '', str_replace( array('<?php', '<?'), '', preg_replace_callback( "/\?>((.|\n)*?)<\?/","eval_mixed_helper",$string) ) );
   return eval($string);
   }
  
 //Zuweisen der Variablen   
 	$titel = $result[0][Titel]; //Titel des Generators
 	$beschreibung = $result[0][Beschreibung]; //Bescheiubung des Generators
 	ob_start();
 	eval_mixed($result[0][Text]);
 	$text = ob_get_clean();
 ?>

Und dann kommt diese Fehlermeldung zu stande (ist jetzt ne neue da der Datenbankeintrag neu ist ) :
Parse error: syntax error, unexpected T_IF in C:\Programme\Apache Group\Apache2\htdocs\homepage-hilfe\templates\generatoren\generatoren_flash.php(15) : eval()'d code on line 4
 
Da du da ja nun mit Klassen arbeitest, bräuchte man nun noch die Methode (db_sql) also da solltest du mal nach dem Fehler schauen oder das ganze auch posten...oder seh ich da was falsch?
 
Also an der Klasse kann es nicht liegen. Die hab ich mir mal vor einer kleinen Ewigkeit geschrieben und hat bis jetzt immer Funktioniert. Ist nur ne praktische Datenbankklasse die eben den SQL-Code der angegeben wird ausführt. Die Klasse funktioniert doch auch auf dem Rest der Seite aber hier mal die Klasse:
PHP:
   <?php 
   ## Klasse für einen Datenbankzugriff(class_db.php)##
   class db1 { 
       #### Variablen #### 
       var $Server = "localhost";     
       var $User = "user";           //User für den Server 
       var $Pass = "pass";           //Passwort für den Server 
       var $DBank = "datenbank";     //Welche Datenbank verwendet werden soll 
        
       var $erg;                     //Ergebnismenge 
       var $anz;                     //Datensätze 
       var $ID;                      //ID eines neu eingefügten Datensatzes 
       var $affectedrows;            //Anzal der betroffenen Datensätze 
       var $fehler;                  //letzte Fehlermedung von MySQL 
        
       #### Konstruktor #### 
       function db1() 
       { 
           $this->verbinden(); 
           $select = mysql_select_db($this->DBank,$this->conn); 
       }//ende Konstruktor
        
       #### Methode für das ausführen des SQL-Codes #### 
       function db_sql($sql,$debug=0) 
       { 
           Static $DBcount; 
           $this->dbcount=++$DBcount; 
            
           $this->erg=@mysql_query($sql, $this->conn); 
           $this->anz=@mysql_num_rows($this->erg); 
           $this->ID=@mysql_insert_id(); 
           $this->affectedrows=@mysql_affected_rows(); 
            
           if($debug==1){echo "<br>".$sql."<br>"; } 
            
           if($this->anz > 0) 
             {
               for($i=0;$i<$this->anz;$i++)
               {
                   $back[$i]=mysql_fetch_array($this->erg);
               }
             }
   
           elseif(!$this->erg) 
                 { 
                   $this->fehler=mysql_error(); 
                   if($debug==1){echo "<br>".$this->fehler."<br>"; } 
                   return FALSE; 
                 } 
           elseif($this->anz==0) 
                 { 
                   return FALSE; 
                 } 
           else  {
                   return TRUE;
                 } 
           return $back; 
       }//ende Methode
        
       #### Methode für die Verbindung zur Datenbank #### 
       function verbinden() 
       { 
           STATIC $conn; 
           if(!$conn)
           {
               $conn = mysql_connect($this->Server,$this->User,$this->Pass);
           } 
           $this->conn=&$conn; 
       }//ende Methode 
       }//Ende Klasse 
   ?>
 
Zuletzt bearbeitet:
An der PHP-Konfiguration liegts nicht. Ich hab jetzt endlich den Fehler gefunden. Diese Funktion ist nur darauf ausgelegt PHP-Codes mit in <? ?> richtig zu parsen aber nicht <?php ?> und ich hab immer das 2. verwendet. Nur irgendwie komm ich nicht dahintert wie ich die Funktion umschreiben kann sodass <?php ?> und <? ?> akzeptiert wird. Aber mir reicht eigentlich <?php ?> da ich eh nur diese Tags verwende.

mfg daniel
 

Neue Beiträge

Zurück