tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
6485
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Danielku15
    Danielku15 Danielku15 ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Ort
    Österreich
    Beiträge
    731
    Blog-Einträge
    3
    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-Code:
     [h1]Überschrift[/h1]
     [b]Beschreibung[/b]
     <?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
     

  2. #2
    Registriert seit
    Oct 2003
    Ort
    Berlin
    Beiträge
    1.423
    Dann Poste doch mal die Datei generatoren_flash.php sonst können wir dir nicht helfen!
     

  3. #3
    Avatar von Danielku15
    Danielku15 Danielku15 ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Ort
    Österreich
    Beiträge
    731
    Blog-Einträge
    3
    Hallo.

    Hab mal das wichtigste zusammengefügt und hier der Code:
    PHP-Code:
          <?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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
        
          ID: 1
          -----------------------------------
          Titel:Meta Tag Generator
          -----------------------------------
          Beschreibung: Ein Generator zum generieren von Metatags 
          -----------------------------------
          Text:
       
     [i]Einfach deinen Namen in das Textfeld eintragen und auf Absenden klicken
          Dann muss der Code nur noch zwischen <head> und </head> eingefügt werden[/i]
      
          <?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
     

  4. #4
    Registriert seit
    Oct 2003
    Ort
    Berlin
    Beiträge
    1.423
    mhh, eigentlich brauch ich die Zeile 3, aber da du das jetzt so schön bearbeitet hast, hab ich da keine Chance....
     

  5. #5
    Avatar von Danielku15
    Danielku15 Danielku15 ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Ort
    Österreich
    Beiträge
    731
    Blog-Einträge
    3
    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-Code:
     <?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
     

  6. #6
    Registriert seit
    Oct 2003
    Ort
    Berlin
    Beiträge
    1.423
    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?
     

  7. #7
    Avatar von Danielku15
    Danielku15 Danielku15 ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Ort
    Österreich
    Beiträge
    731
    Blog-Einträge
    3
    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-Code:
       <?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 
       
    ?>
    Geändert von Danielku15 (02.09.05 um 04:25 Uhr)
     

  8. #8
    Registriert seit
    Oct 2003
    Ort
    Berlin
    Beiträge
    1.423
    Boah, kann das sein das der Fehler einfach was mit deiner PHP Konfiguration zu tun hat?!
     

  9. #9
    Avatar von Danielku15
    Danielku15 Danielku15 ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Ort
    Österreich
    Beiträge
    731
    Blog-Einträge
    3
    Puh, da bin ich überfragt. Ich werds mal auf nem anderen Server testen und dann bescheid geben.
     

  10. #10
    Avatar von Danielku15
    Danielku15 Danielku15 ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Ort
    Österreich
    Beiträge
    731
    Blog-Einträge
    3
    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
     

  11. #11
    Registriert seit
    Oct 2004
    Ort
    Bayern
    Beiträge
    307
    wieso speicherst du eigentlich PHP Code in der Datenbank?
    Ist das nicht etwas "unperformant"?
    Du könntest in diesem Fall auch gleich die PHP Seite erzeugen...
     
    Being crazy is normal!
    I developed a Webradio
    Please visit my web development blog

  12. #12
    Avatar von Danielku15
    Danielku15 Danielku15 ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Ort
    Österreich
    Beiträge
    731
    Blog-Einträge
    3
    Zitat Zitat von aKraus
    wieso speicherst du eigentlich PHP Code in der Datenbank?
    Ist das nicht etwas "unperformant"?
    Du könntest in diesem Fall auch gleich die PHP Seite erzeugen...
    Der Code wird in die Datenbank gespeichert weil es eine Art CMS wird. Es gibt ja nicht nur die Datei generatoren_flash.php sondern auch z.b. generatoren_grafik.php. Und in jeder Kategorie werde ich neue Generatoren online stellen und da jedes mal die Datei zu erstellen und dann noch alles zu verlinken wäre ne riesen Arbeit. Und dann sollte die Datei noch über die eingebaute Suche zu finden sein. Da speichre ich lieber den Code in die Datenbank und lies einfach alle Generatoren in der Übersicht und den Inhalt bei der Generatorenansicht aus. Geht so viel einfacher und ist dann auch über das Adminmenü bearbeitbar.

    mfg daniel
     

Ähnliche Themen

  1. HTML/PHP-Code von Datenbank in Textarea
    Von lukelukeluke im Forum PHP
    Antworten: 3
    Letzter Beitrag: 14.05.07, 11:30
  2. Antworten: 1
    Letzter Beitrag: 09.04.07, 18:44
  3. HTML Code auslesen
    Von brainsucker im Forum PHP
    Antworten: 2
    Letzter Beitrag: 26.01.07, 16:39
  4. Antworten: 0
    Letzter Beitrag: 09.12.05, 23:35
  5. Auslesen aus html code
    Von cybermotte im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 8
    Letzter Beitrag: 12.03.05, 15:03