eval problem in php

blck

blck

Routinier
Hallo,
ich hab ein Problem mit eval(). Und zwar wird
PHP:
  $while = 'while (list ($bereich, $thema, $text, $date, $time) = mysql_fetch_row ($search)){ echo $tabelle; echo mysql_error(); $i++;}';
später mit
PHP:
eval($while);
ausgeführt, wobei $tabelle so aussieht:
PHP:
 $tabelle =
    "<table width='520px'>
      <tr>
       <td><h4> Verfasst am: <?echo $date;?> um: <?echo $time;?></h4></td>
      </tr>
      <tr>
       <th colspan='2'>Thema: <?echo $thema;?>
       <h4>aus: <? echo $bereich;?></h4></th>
      </tr>
      <tr>
      <td> <? echo $text;?> </td>
      </tr>
     </table>";
So das Problem ist jetzt, das die Tabelle zwar angezeigt wird, sogar mehrmals nur leider in keiner Spalte/Zeile etwas steht. Ist das erste Mal, dass ich mit eval() arbeite, wird also wahrscheinlich nur ein kleiner Fehler sein:think:

MfG Blck
 
Vorweg: gibts in php kein Block-Eval? (In contrast to string eval.)

Ich versuche mal die semantische Auflösung deiner Aussage zu verfeinern:
So das Problem ist jetzt, das die Tabelle zwar angezeigt wird, sogar mehrmals nur leider in keiner Spalte/Zeile etwas steht
zerfällt zu:
Das Problem ist jetzt, dass in keiner Spalte/Zeile von $tabelle etwas steht
dies kann man noch weiter von unnötigem linguistischen Ballast befreien, sodass die Endaussage
$tabelle ist leer.
übrigbleibt.

Wenn das dein Problem ist, was hat eval damit zu tun?
Wenn das nicht dein Problem ist, zeige mir bitte genau an welcher Stelle ich dich falsch verstanden hab.
Kthxbye
 
Hallo,
ja ansich ist das vollkommen richtig. Die Tabelle ist leer bzw. wird leer ausgegeben. Jedoch soll die while-Schleife, die die Tabelle füllen soll, per eval() ausgeführt(siehe Code-Strings). Es gibt also, denke ich mal, zwei Möglichkeiten:
1) Die while-Schleife wird nicht richtig ausgeführt und so die Variablen, die in der Tabelle stehen, nicht gefüllt.
2) Die while-Schlleife wird richtig ausgeführt, allerdings wäre dann in der Tabellenausgabe etwas falsch formuliert.

MfG Blck

P.S.: Was bitte ist ein Blockeval :D
 
Code:
Was bitte ist ein Blockeval
In perl gibts zwei Arten ein eval auszuführen, string- und blockeval:
Code:
my $code = '5 / 0';
my $ergebnis = eval $code     # runtime error
my $ergebnis = eval { 5 / 0 } # compile time error
Wenn der code Konstant (== zur Kompilierzeit bekannt) ist, ist ein Blockeval in jedem Fall vorzuziehen.
In deinem Fall würde ich das auch sagen, da sich der eval-Code ja generell nicht zu ändern scheint.

Eine Frage: warum überhaupt eval?


Es gibt also, denke ich mal, zwei Möglichkeiten:
1) Die while-Schleife wird nicht richtig ausgeführt und so die Variablen, die in der Tabelle stehen, nicht gefüllt.
2) Die while-Schlleife wird richtig ausgeführt, allerdings wäre dann in der Tabellenausgabe etwas falsch formuliert.
Ich glaube das könntest du sehr einfach debuggen: schau dir den Inhalt von $tabelle (und am Besten auch von den anderen Variablen) an. (Direkt, ohne einen Browser dazwischen..)


ja ansich ist das vollkommen richtig.
Ne, ansich hab ich da ziemliche Scheiße geredet. Ich wollt dich nur dazu bewegen etwas spezifischer zu werden. (Zum Beispiel: was steht genau in $tabelle drin, nicht was macht der Browser daraus (eine leere Tabelle..))
 
Hallo,
eval() aus dem Grund, dass sich die while-schleife ändert, je nach gegebener Option, d.h. entweder steht in der while-schleife
PHP:
$while = 'while (list ($bereich, $thema, $text, $date, $time) = mysql_fetch_row ($search)&&($i<5)){ echo $tabelle; echo mysql_error(); $i++;}';
oder es steht
PHP:
$while = 'while (list ($bereich, $thema, $text, $date, $time) = mysql_fetch_row ($search)){ echo $tabelle; echo mysql_error();}';
drin. Wobei $tabelle immer gleich bleibt!
Um nicht zwei Tabellen, je nach while-Schleife zu pflegen, habe ich die while-schleifen extra gepackt und $tabelle als Tabelle gesetzt. Die Tabelle beinhaltet normalerweise soetwas wie Datum/Zeit oder Text.

Vielleicht ist das ganze Konstrukt jetzt etwas deutlicher :)

MfG Blck
 
Hab jetzt mal getestet ob es ohne
PHP:
<? echo $var ?>
in der Tabelle funktioniert, tut es leider auch nicht!

MfG Blck
 
Hm, wird aus der DB auch sicher was ausgelesen?
 
Hallo,
vor dem "Umstellen" auf eval() haben beide while-Schleifen wunderbar gearbeitet. Ich denke mal, dass ich jetzt bei eval() irgendeine Kleinigkeit übersehen habe, denn die while-Schleifen habe ich nicht geändert, nur in den eval() gepackt.

MfG Blck

P.S. Ich werd mal probieren ob die while-Schleifen so wie sie jetzt sind arbeiten, wenn ich sie direkt, also ohne eval() ausführe, arbeiten.

EDIT
Der erste Fehler waren die While-Schleifen, jetzt weiß ich nicht, wie ich die Tabelle anzeigen lassen kann, per eval() oder einfach per echo? Entschuldigung für die vielen Edits.
 
Zuletzt bearbeitet:

Ähnliche Themen

in_array Problem

php if-Bedingung wird nicht eingehalten

dovecot und postfix Konfiguration Problem

Webinterface für Gameserver/Shellscript wird nicht ausgeführt

CMS Problem [php]

Zurück
Oben