eval problem

Maximilian

Grünschnabel
So hier hab ich mal für euch einen leckerbissen, wo ich mir die Zähne ausbeise!
PHP:
<table width="168" border="0" cellspacing="0" cellpadding="2">
  <tr valign="top">
    <td width="168">Willkommen {usersystem.var.usernav.user}!</td>
  </tr>
  <tr valign="top">
    <td width="168">
	  <a href="{usersystem.link.usernav.uebersicht}"><img src="module/images/usersystem_uebersicht.gif" alt="&Uuml;bersicht" width="23" height="19" border="0"></a>
      <a href="{usersystem.link.usernav.sms}"><img src="module/images/usersystem_sms.gif" alt="SMS" width="23" height="19" border="0"></a>
      <a href="{usersystem.link.usernav.einstellungen}"><img src="module/images/usersystem_einstellungen.gif" alt="Einstellungen" width="23" height="19" border="0"></a>
      <a href="{usersystem.link.usernav.usersuche}"><img src="module/images/usersystem_usersuche.gif" alt="User suchen" width="23" height="19" border="0"></a>
	    <a href="{usersystem.link.usernav.logout}"><img src="module/images/usersystem_logout.gif" alt="Logout" width="23" height="19" border="0"></a>

      %PHP-Code%
        if(strtolower($_SESSION['userlevel'])!="admin"){
          echo"<a href=\"{usersystem.link.usernav.admin}\"><img src=\"module/images/usersystem_admin.gif\" alt=\"Admincenter\" width=\"23\" height=\"19\" border=\"0\"></a>";
         }
      %PHP-Codeende%

     </td>
  </tr>
</table>

das mein Template. ich hab es geschafft mit meiner Funktion den php teil rauszuschneiten und mit eval auszuführen. Das problem ist jetzt das ich den ausgeführten Teil in einer Variablen speichern will und dann den alten durch den neuen ersetzten will. Naja und da ist das problem... eval führt immer aus, aber nicht an der stelle wo ich sie braucht. Lässte sich auch nicht durch $variable=eval(); speichern.

PHP:
$iffinish = substr_replace("$template_string",eval($ifstring), $posanfang-10, $possub+24);

In ifstring ist das gespeichert:

PHP:
        if(strtolower($_SESSION['userlevel'])!="admin"){
          echo"<a href=\"{usersystem.link.usernav.admin}\"><img src=\"module/images/usersystem_admin.gif\" alt=\"Admincenter\" width=\"23\" height=\"19\" border=\"0\"></a>";
         }

Und ist $template_string das original.
So und dann wenn ich die Funktion ausführe gibt er mir das aus:
PHP:
<a href="{usersystem.link.usernav.admin}"><img src="module/images/usersystem_admin.gif" alt="Admincenter" width="23" height="19" border="0"></a><table width="168" border="0" cellspacing="0" cellpadding="2">
  <tr valign="top">
    <td width="168">Willkommen {usersystem.var.usernav.user}!</td>
  </tr>
  <tr valign="top">
    <td width="168">
	  <a href="{usersystem.link.usernav.uebersicht}"><img src="module/images/usersystem_uebersicht.gif" alt="&Uuml;bersicht" width="23" height="19" border="0"></a>
      <a href="{usersystem.link.usernav.sms}"><img src="module/images/usersystem_sms.gif" alt="SMS" width="23" height="19" border="0"></a>
      <a href="{usersystem.link.usernav.einstellungen}"><img src="module/images/usersystem_einstellungen.gif" alt="Einstellungen" width="23" height="19" border="0"></a>
      <a href="{usersystem.link.usernav.usersuche}"><img src="module/images/usersystem_usersuche.gif" alt="User suchen" width="23" height="19" border="0"></a>
	    <a href="{usersystem.link.usernav.logout}"><img src="module/images/usersystem_logout.gif" alt="Logout" width="23" height="19" border="0"></a>

      

     </td>
  </tr>
</table>

Und wer genau hinguckt sieht, das die erste Zeile an der falschen Position ist! :) Und habt ihr eine Lösung?
 
Hi, Du könntest doch den erzeugten HTML-Code
in Deinem PHP-Abschnitt des Templates doch
einfach in eine Variable schreiben und nicht mit
echo an den Browser senden. Also so:
PHP:
%PHP-Code%
  if(strtolower($_SESSION['userlevel'])!="admin"){
    $strHTML = "<a href=\"{usersystem.link.usernav.admin}\">
                <img src=\"module/images/usersystem_admin.gif\"
                alt=\"Admincenter\" width=\"23\" height=\"19\"
                border=\"0\"></a>";
  }
%PHP-Codeende%
und danach müsstest Du das hier abändern:
PHP:
$iffinish = substr_replace("$template_string",eval($ifstring), $posanfang-10, $possub+24);
und zwar in das:
PHP:
eval($ifstring);
$iffinish = substr_replace("$template_string",$strHTML, $posanfang-10, $possub+24);

Vielleicht funktioniert's ja ;-)

mfg, snuu
 
du hast ja echt probleme...

versuchs mal mit $iffinish so...
PHP:
(strtolower($_SESSION['userlevel'])!="admin") ? "<a href=\"{usersystem.link.usernav.admin}\"><img src=\"module/images/usersystem_admin.gif\" alt=\"Admincenter\" width=\"23\" height=\"19\" border=\"0\"></a>" : ""

und dann würd ich dringend empfehlen hier auf das eval zu verzichten, denn der PHP code stammt ja nicht aus dem template und soll ja auch nicht im template ausgeführt werden.

eval is im prinzip nur dafür da um einen string auszuführen, der z.B. in datenbanken oder ähnlichem gespeichert ist. es ist NICHT konzipiert um statische strings zu verarbeiten, und stellt wenn es für solche verwendet wird ein enormes sicherheitsrisiko dar.
 
Geht leider nicht! :( War eine Kluge Idee. Aber funzelt net! Jetzt gibt er mir nur noch das aus:

PHP:
a href="{usersystem.link.usernav.admin}"><img src="module/images/usersystem_admin.gif"alt="Admincenter" width="23" height="19"border="0"></a>

Irgendwie werden keine befehle mehr nach eval(); ausgeführt! Hrhr! Im Grund genommen geht es ja darum. If Anweisung in dem Code auszuführen. Mir ist noch nicht eingefallen, wie ich If-Anweisungen und Template sauber trennen kann. Und das ist wirklich ein simples beispiel!
 
Das war der auf den ersten Tip bezogen!

Aber wie soll ich das denn sonst machen? Z.B. hier. Hat der User Adminstatus soll das bildangezeigt werden. In diesem Fall kann ich ja nicht Code und Template trennen.
 
Hallo, dann definiere doch in Deinem Template einen Bereich.
Bsp:
Code:
<%ADMIN%>
  <a href=\"{usersystem.link.usernav.admin}\">
  <img src=\"module/images/usersystem_admin.gif\" 
  alt=\"Admincenter\" width=\"23\" height=\"19\" border=\"0\"></a>
<%/ADMIN%>
Wenn Du nun das Template PHP-seitig verarbeitest, dann prüfe
den User-Level. Ist der User-Level nicht admin, dann entfernen
den gesamten Block, ansonsten entferne nur die
Block-Platzhalter (also <%ADMIN%> und <%/ADMIN%>).

~ mfg, snuu ~
 
Das auch eine möglichkeit, aber nur für diesen Fall. Ich brauch was allgemeineres! Ich will doch nur den ausgeschnittenen Code in HTML haben und ihn dann an der Stelle ersetzten! Ich will entscheiden wann eval(); ausgibt. Nicht diese Dummel Funktion. Man so knapp vor dem Ziel!
 
So morgen schreib ich mir eine eigene Eval Funktion! :) Wenn die nicht so will dann ich aber! :)
Würde das funktionieren?

1.Holt den makierten teil raus
2.Speichert ihn in einer Datei
3.includet diese Datei in einer anderen
4.hol mir dann diese Datei
5.und ersetzte den Bereich nur den neuen String!

Denkt ihr das ist viel rechenzeit?
 
Hallo, wenn Du's schon so machen willst, dann lager doch den
PHP-Code gleich in ein extra PHP-File aus und setze im Template
einen Platzhalter, der angibt, in welchem File der Code liegt.
Bsp:
Code:
%INCLUDE:checkadmin.php%
Dadurch kannst Du die Datei gleich includen und musst sie nicht
bei jedem Template-Zugriff neu generieren.

mfg, snuu
 
Zurück