Problem mit eval()

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

  • Problem mit eval()

    Hallo,
    erstmal vorweg:
    Meine Arbeiten basieren auf WebSpell,
    daher sitzen meine POST-Vars immer auf einer index.php.

    Ich habe nun folgendes Problem:
    Ich hab versucht, WebSpell um eine Uploadmöglichkeit zu erweitern,
    scheiter aber bei der Rückmeldung der Links.

    Hier der PHP-Teil:
    PHP-Code:
    <?php
    eval ("\$hochladen_head = \"".gettemplate("hochladen_head")."\";");

    echo 
    $hochladen_head;
    empty(
    $not_allowed);
    empty(
    $not_allowed_files);

    $not_allowed[] = "exe";
    $not_allowed[] = "zip";
    $not_allowed[] = "bat";
    $not_allowed_files "";

    foreach(
    $not_allowed as $typ){
                         if(
    $not_allowed_files != ""){
                                    
    $not_allowed_files $not_allowed_files.",".$typ;}
                         else{
                                    
    $not_allowed_files $typ;
                         }
      }

    if(!
    $userID) echo 'Du musst eingeloggt sein, um Daten hochladen zu können!<br><br>
                              • <a href="index.php?site=login">Login</a>'
    ;

    else {

    if(
    $_REQUEST['Send'])
    {
        if(
    $_FILES['Datei']['tmp_name'])
        {
            
    $filename $_FILES['Datei']['name'];
            
    $filesize $_FILES['Datei']['size'];
            
    move_uploaded_file($_FILES['Datei']['tmp_name'], "uploads/".$_FILES['Datei']['name']);
            eval (
    "\$hochladen_info = \"".gettemplate("hochladen_info")."\";");
            echo 
    $hochladen_info;

    }
        else
        {
            echo
    "<b><u><blink>Bitte geben Sie eine Datei an!</blink></u></b><br>";
                    eval (
    "\$hochladen_content = \"".gettemplate("hochladen_content")."\";");
            echo 
    $hochladen_content;
        }
    }
    else
    {
            eval (
    "\$hochladen_content = \"".gettemplate("hochladen_content")."\";");
            echo 
    $hochladen_content;
    }  }
    ?>
    Die nicht-erlaubten Dateitypen sind erstmal noch unwichtig.
    Mein Hauptproblem liegt in der 33. Zeile:
    PHP-Code:
            eval ("\$hochladen_info = \"".gettemplate("hochladen_info")."\";"); 
    .
    Dort wird eine HTML-Datei in eine Variable gelesen und dannach halt ausgegeben.
    Inhalt der HTML-Datei:
    PHP-Code:
    Ihre Datei ($filenameist $filesize Bytes groß.<br>
    Der Direktlink zu Ihrer Datei ist folgend:<br>
    <
    br>
    HTML-Code:<br>
    <
    textarea><a href=http://www.boredomkiller.de.vu/uploads/$filename>$filename</a></textarea>
    <br>
    <
    br>
    <
    br>
    BBCode:<br>
    <
    textarea>[URL=http://www.boredomkiller.de.vu/uploads/$filename]$filename[/URL]</textarea>
    <br>
    <
    br>
    <
    br>
    Einfacher Link:<br>
    <
    textarea>http://www.boredom-killer.de.vu/uploads/$filename</textarea> 
    Ich bekomme als Rückmeldung lediglich nur

    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /usr/export/www/vhosts/funnetwork/hosting/boredomkiller/hochladen.php(33) : eval()'d code on line 10

    Notice: Undefined variable: hochladen_info in /usr/export/www/vhosts/funnetwork/hosting/boredomkiller/hochladen.php on line 34
    Ich habe in der HTML bereits sämtlichste Umschriften der " probiert, aber keinen Erfolg gehabt.
    Wo liegt der Fehler?

    MfG
    Noigel

  • #2
    Manual zur Funktion gelesen?
    Beim Gebrauch von eval() gilt es einige Faktoren zu beachten. Die übergebene Zeichenkette muss gültigen PHP-Code enthalten, einschließlich solcher Dinge wie Anweisungen mit einem Semikolon abzuschließen, damit der Parser nicht in der Zeile nach dem eval() abbricht, und des richtigen Setzens des Escape-Zeichens in code_str. Um HTML-Ausgabe und PHP-Code zu mischen, können Sie zum Verlassen des PHP-Codes das schließende PHP-Tag verwenden.
    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      HÄ? Was fürn Bull-Shit machst du da???


      eval ("\$hochladen_info = \"".gettemplate("hochladen_info")."\";");
      ob man daraus wohl auch gleich ein
      $hochladen_info = gettemplate("hochladen_info");
      machen kann, und sich den Aufruf von eval sparen kann?!


      Wo ist der Headdesk-Smiley...?!!!
      Zuletzt geändert von ghostgambler; 15.10.2007, 11:20.

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        ich hab zwar nicht das manual gelesen,
        aber bereits einige addons mit der eval()-funktion geschrieben,
        die auch funktioniert haben.
        ich hab die eval-befehle nur angepasst in sachen datei- und variablenname.
        code-snippets halt.
        mir is aufgefallen, dass die anführungszeichen nicht zwingend notwendig sind und sie einfach entfernt.
        mit anderen worten, brauch der parser eig nur folgendes machen:
        datei mit html-code einlesen,
        variablen durch werte ersetzen
        und das in einer variable zur ausgabe freigeben.

        ich habe den befehl ein wenig verändert:
        PHP-Code:
                eval ("\$hochladen_info = '".gettemplate("hochladen_info")."';"); 
        jetzt gibt er wenigstens keinen fehler mehr aus,
        allerdings ersetzt er die variablen auch nicht.

        Kommentar


        • #5
          edit geht nicht... dann halt nochmal so:
          der inhalt der gettemplate-funktion (org. von webspell)
          PHP-Code:
          function gettemplate($template,$endung="html") {
              
          $templatefolder "templates";
              return 
          str_replace("\"","\\\"",implode("",file($templatefolder."/".$template.".".$endung)));

          Kommentar


          • #6
            Original geschrieben von ghostgambler
            HÄ? Was fürn Bull-Shit machst du da???


            eval ("\$hochladen_info = \"".gettemplate("hochladen_info")."\";");
            ob man daraus wohl auch gleich ein
            $hochladen_info = gettemplate("hochladen_info");
            machen kann, und sich den Aufruf von eval sparen kann?!


            Wo ist der Headdesk-Smiley...?!!!
            habs bissl spät gelesen von dir. aber ich habs probiert... gleiches resultat wie nach meinem versuch:
            variablen werden nicht ersetzt.

            Kommentar


            • #7
              hab mir grad trotzdem das manual durchgelesen.
              dabei bin ich auf folgendes beispiel gestoßen:
              PHP-Code:
              //Example 1339. eval() example - simple text merge
              <?php
              $string 
              'cup';
              $name 'coffee';
              $str 'This is a $string with my $name in it.';
              echo 
              $str"\n";
              eval(
              "\$str = \"$str\";");
              echo 
              $str"\n";
              ?>

              //The above example will output:

              This is a $string with my $name in it.
              This is a cup with my coffee in it.
              das problem is halt wirklich, dass er die variablen nur nicht ersetzt. ich setze ja schon auf einen fehler im html, kann aber nix finden.

              Kommentar


              • #8
                Moment!
                Was ist denn jetzt das Problem?


                Eval ist erstmal raus aus der Diskussion, das ist der vollkommen falsche Ansatz.

                Das hier:
                PHP-Code:
                empty($not_allowed); 
                hat auch keinen Sinn - was auch immer es da soll, genauso folgende Zeile.

                Und sobald du das verstanden und umgesetzt hast, erläutere erstmal dein wirkliches Problem.

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  eval is halt nicht raus aus der diskussion.

                  eval ("\$hochladen_info = \"".gettemplate("hochladen_info")."\";");
                  müsste eig funktionieren.

                  immerhin klappt der erste teil
                  eval ("\$hochladen_head = \"".gettemplate("hochladen_head")."\";");
                  auch.

                  wieso sollte es aus der diskussion sein??
                  ich versuche lediglich eine html-datei in eine variable zu packen,
                  dabei die variablen zu ersetzen,
                  und diese mithilfe der echo-funktion auszugeben.

                  ich weiß, dass der befehl 100%ig richtig ist, da er nur aus anderen dateien gleichen pfades übernommen,
                  und lediglich das "head" durch "info" ersetzt habe.

                  die dateinamen angepasst und es geht NICHT.
                  das is mein problem.

                  nicht die syntax oder sonstiges.

                  Kommentar


                  • #10
                    Re: Problem mit eval()

                    Es ist doch wohl klar, was passiert, wenn du folgenden Textschnippsel evaluieren willst??
                    PHP-Code:
                    "<textarea><a href="...$filename" target="_blank">$filename</a></textarea>" 
                    Das Highlighting des Forums zeigt dir schon den Fehler!

                    Kommentar


                    • #11
                      Re: Re: Problem mit eval()

                      Original geschrieben von PHP-Desaster
                      Es ist doch wohl klar, was passiert, wenn du folgenden Textschnippsel evaluieren willst??
                      PHP-Code:
                      "<textarea><a href="...$filename" target="_blank">$filename</a></textarea>" 
                      Das Highlighting des Forums zeigt dir schon den Fehler!
                      ist mir auch schon aufgefallen. allerdings hab ich weiter oben auch geschrieben, dass ich die anführungszeichen entfernt habe.
                      damit ist das highlighting wohl korrekt.

                      und iwie sind im aktuellen keine anführungszeichen mehr vorhanden, werden im forum aber automatisch gesetzt....

                      mal ohne highlighting in form eines screenshots den aktuellen inhalt:
                      Zuletzt geändert von noigel; 15.10.2007, 19:23.

                      Kommentar

                      Lädt...
                      X