Eval() Ausgabeproblemchen

So langsam glaube ich wirklich ich sollte bei Iframes bleiben und mir mit JavaScript irgendwas Browsersprengendes scripten was die Größe vom iframe an den Inhalt anpasst .... aber vorher zähl ich bis 10 und spritz mir flüssiges Asprin ...


Also zu dem Problemchen. Damit ich auf iframes verzichten kann, hab ich jetzt n paar mal gehört eval() soll der Weißheit letzter Schluß sein. Nun gut, gesagt getan. t auch soweit in meinen Testscripten :

download.php
Einfachen Script das aus einer DB ausliest welche Downloads verfügbar sind

PHP:
$sql   = "SELECT * FROM ".DB_TABLE_DOW;		
$res   = @mysql_db_query(DB_DATABASE,$sql);	
while($row   = @mysql_fetch_assoc($res)){
	
echo $row[dateiname]."<br>";

eval.php
in dem Script hab ich einfach nur mal getestet ob eval() das ganze auch wiedergeben kann (programmiertechnisch sicherlich nicht so toll was die Stringersetzung angeht)


PHP:
$site	   = "download.php";              
$content = file($site);                       

$array    = implode("",$content);

// Stringersetzungen 
// über str_replace() werden die < ? und ? > aus der Zeichenkette entfern
	
eval("$array;");

Sooo dieses Script gibt mir auch wunderbar alle Datensätze aus wie sie in download.php auch ausgegeben werden. JETZT, jetzt ist es nun mal so das die Seiten via Templates zusammengeparst werden.

in meiner Startseite (start.htm / Template) steht dann irgendwo an gewünschter Stelle ein solcher Platzhalter

Start.htm
HTML:
{content}


Ein PHP Script (start.php) setzte dann alles zusammen. Dort steht dann. Meistens ist die Variable html-Tags aus einer Datenbank die dann die gewünschte Seite aufbauen im Content-Bereich

Start.php
PHP:
$tpl ->assign( "content"     , ‘gewünschter Inhalt oder $variable’);

Funktioniert auch bis zu dem Punk wo ich eval() ins Spiel bringe Bis zu der Ausgabe läuft alles identisch wie in eval.php, nur eval() selbst ist anders, soweit ich verstanden habe weißt man einer Variable – in dem Fall $content den Wert von $array zu.

PHP:
eval($content = $array);

Es funktioniert schon, allerdings wird der Inhalt der downloads am Seitenanfang ausgegeben, ganz oben und eben nicht in dem Bereich wo


Start.htm
HTML:
{content}

steht. Nu Frag ich mich, was bringt mit die Funktion eval() wenn Sie ohnehin immer am Seitenanfang steht und ich keinen Einfluß darauf nehmen kann wie und wo der Inhalt ausgegeben wird ?
 
Wie wäre es mal mit einem Link ...
Was mich etwas verwundert ist, dass du dieses Thema nun zum 3ten mal anschneidest und du schon mal eine Lösung dafür bekommen hast ...
 
So nun schreib ich das schon zum 3ten mal hier rein


Erstmla kannst dass hier ganz leicht ändern -.-
Nun zu eval ... Eval ist nützlich (trtoz Sicherheitsrisiken) für Ausgaben bestimmter PHP functionen in einem HTML Template ...
Das bezieht sich auf bestimmte Platzhalt --> $meine variable
Welche dann ohne <?php ?> in der HTML Datei ausgeführt werden.
Da du ein Script ausführen willst, kommt das schon mal nicht so ganz an den Zweck ...
Hier mal ein Beispiel wie du Eval einsetzt


PHP:
<?php
$string = 'Bierglas';
$name = 'Binding-Lager';
$str = 'Das ist mein $string, voll mit $name.<br>';
echo $str;
eval ("\$str = \"$str\";");
echo $str;
?>

Das obige Beispiel gibt aus:

Das ist mein $string, voll mit $name.
Das ist mein Bierglas, voll mit Binding-Lager.

Kommen wir nun zu deinem iframe ...
Wenn du den wirklich nutzen willst dann geh zum HTML, CSS oder Javascript Forum -.-
Andererseits geh mal Tutorials durch und erwarte nicht immer dass dir die Lösung wie jetzt auf nem silbernen Tablett geliefert wird.
In PHP nutz mal dafür die Switch Funktion ...
http://de3.php.net/switch
Hiermit kannst du dann andere Seiten leicht inlcuden ... in dem du dann mit GET prüfst wie unten in der Content.php ...
So gehst du dann auch mit der Search.php um, in dem du deinen Suchbegriff in einem $_GET anhang der url schreibst und dann im Content dein Suchscript durchlaufen lässt ... da können wir dir dann auch noch helfen ...



http://thekiller.th.funpic.de/manmanman/?GS=home
So sieht dass nun bei mir aus ... und siehe da in einem Template werden mehrere PHP Dateien ausgeführt, und eines Davon mit Schleife etc.


So vielleicht gefällt dir ja das hier -.-

Layout.html
HTML:
<meta http-equiv="Content-Language" content="de">
<div id="Layer1" style="position:absolute; width:702; height:98; z-index:1; background-color: #99CCFF; border: 1px solid #000000; left:10; top:15">
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1" height="100%">
    <tr>
      <td width="50%">{SEARCH}</td>
      <td width="50%" valign="bottom">
      <p align="right">{NAVI}</td>
    </tr>
  </table>
</div>
<div id="Layer1" style="position:absolute; width:192; height:395; z-index:1; background-color: #99CCFF; border: 1px solid #000000; left:10; top:115">
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber3" height="100%">
    <tr>
      <td width="100%" valign="top">{SIDEBAR}</td>
    </tr>
  </table>
</div>
<div id="Layer1" style="position:absolute; width:506; height:395; z-index:1; background-color: #99CCFF; border: 1px solid #000000; left:206; top:115">
  <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber2" height="100%">
    <tr>
      <td width="100%" valign="top">{CONTENT}</td>
    </tr>
  </table>
</div>
Index.php
PHP:
<?php
ob_start();
   include_once "SEARCH.php";
   $cnt1 = ob_get_clean();

ob_start();
   include_once "NAVI.php";
   $cnt2 = ob_get_clean();

ob_start();
   include_once "SIDEBAR.php";
   $cnt3 = ob_get_clean();

ob_start();
   include_once "CONTENT.php";
   $cnt4 = ob_get_clean();

   $design = file_get_contents("Layout.html");
   $design = str_replace("{SEARCH}", $cnt1, $design);
   $design = str_replace("{NAVI}", $cnt2, $design);
   $design = str_replace("{SIDEBAR}", $cnt3, $design);
   $design = str_replace("{CONTENT}", $cnt4, $design);

echo $design;
?>
NAVI.php
PHP:
<?php
$LINK[0] = "?GS=home";
$LINK[1] = "?GS=history-de";
$LINK[2] = "?GS=history-eng";
$LINK[3] = "?GS=error-de";

$anzahl = count($LINK);
for($index = 0; $index < $anzahl; $index++)
{
$linktime = $index+1;
echo ("<a href='$LINK[$index]'>Link$linktime</a>&nbsp;&nbsp;");
}
?>
CONTENT.php
PHP:
<?php 
include('config.php');

if(isset($_GET['GS']) AND isset($dateien[$_GET['GS']]))
{
 if(!file_exists($dateien[$_GET['GS']])) include $dateien['error-de'];

 include $dateien[$_GET['GS']]; 
}
else
{
if($_GET['GS'] == '')
{
include $dateien['home'];
}else{
include $dateien['error-de']; 
}
}
?>
config.php
PHP:
<?php
$dateien = array();
$dateien['home'] = "include/home.php";

$dateien['history-de'] = "include/history-de.php";
$dateien['history-eng'] = "include/history-eng.php";

$dateien['error-de'] = "include/error-de.php";
?>

Restliche Seiten
SEARCH.php
SITEBAR.php

Wegen dem was du meintest von wegen bei Search brauchst du nen IFrame -.-
Machs halt mit $_GET -.- würde hier wunderbar funktionieren ... so kannste dann auch alle anderen Seiten includen ...

Das mein ganze Code geht musst du
- den Ordner include haben
- alle files die in config.php stehen sich in diesem Ordner befinden
- jegliche Dateien die in index.php angegeben sind auch da sein ^^




Hast also nun folgendes:
index.php
Layout.html
SEARCH.php
NAVI.php
SIDEBAR.php
CONTENT.php

Verzeichnise: include
include/home.php
include/error-de.php

include/history-de.php
include/history-eng.php


Bestimmtes kannste jetzt wie du lustig bist ändern -.- hier siehste dann in etwa wie das aussehen kann ^^

http://thekiller.th.funpic.de/manmanman/?GS=home

Viel Spaß damit ^^
 
Zuletzt bearbeitet:
Um erlich zu sein schon -.-
Hab ich sogar in 2 Deiner älteren Einträge reingestellt ... aber irgendwie haste dann nicht mehr geantwortet

Ist halt so, dass ich im enteffekt lauter PHP Seiten auf meinem Desktop habe ... da ist immer irgendwas dabei, was ein anderer gerade braucht ^^
 
Hehehe, erh schön, sehr schön ... den Desktop hätt ich auch gerne ;) Aber jut, jetzt werd ich mir das mal zu Gemüte führen und da ich ohnehin am Anfang der Seite stehe kann man Strukturell sicherlich auch ohne größeren Aufwand deine Lösung einbauen. Besten dank auf jedenfall ;)
 
Nun zu eval ... Eval ist nützlich (trtoz Sicherheitsrisiken) für Ausgaben bestimmter PHP functionen in einem HTML Template ...
Naja da muss ich jetzt schon ein bisschen widersprechen. eval() ist für einige sehr wenige Sachen ganz nützlich, aber für Templates gibt es elegantere Lösungen. Ich weiß, dass einige Template-Engines mit eval() arbeiten, aber ich finde z.B. str_replace() oder Vergleichbares

1. schöner zu lesen,
2. nicht so fehleranfällig und
3. sicherer.

Also warum umständlich machen, wenn es auch einfach geht?

Viele Grüße
 
^^ Glaube ich habe irgendwo schonmal geschrieben dass es unsicher ist?
Wenn nicht, dann danke :)

Ich wollt damit nur ausdrücken, dass man mit eval keine Scripte ausführt ...
Muss zugeben, habe selbst schon mit eval gearbeitet *schäm*
Aber im Grunde lernt man immer wieder dazu ^^ und dass ich ihm mal aufgezeigt geht, wie es auch ohne Eval() geht beweißt ja auch schon, dass ich nicht besonders viel von Eval() halte ...

Dass ist halt der Fehler von den meisten, die mit PHP anfangen, mal ganz davon abgesehen dass sie so wie in diesem Fall hoffen, dass man ihnen das Script schreibtn (was ja mal vorkommt ^^)
 
Zurück