Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML]eval();
Forum PHP.pl > Forum > Przedszkole
nastu7
Mam problem z funkcją eval(), ponieważ nie rozumiem dlaczego wyrzuca mi błędy... Jestem na BARDZO podstawowym poziomie z php i raczej uczę się z przykładów. Dlatego też używam tej funkcji do wyświetlenia template'a w .html.

przejdźmy do meritum:
  1. 26 $user_data = get_user_data();
  2. 27 $id = $user_data['user_id'];
  3. 28 $name = $user_data['user_name'];
  4. 29
  5. 30 eval ("\ $logged = \"".gettemplate("logged")."\";");
  6. 31 echo $logged;

tak wygląda kawałek kodu pliku logged.php

  1. Witaj <b>$name</b>
  2. <a href="index.php?site=profile&amp;id=$id">Profil</a> &bull; <a href="index.php?site=editprofile">Edytuj</a> &bull; <a href="index.php?site=userlist">Użytkownicy</a> &bull; <a href="logout.php">Wyloguj!</a>


to natomiast jest logged.html

Takie oto 2 komunikaty dostaje po kompilacji:
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /home/.../logged.php(30) : eval()'d code on line 1

Parse error: syntax error, unexpected '=' in /home/.../logged.php(30) : eval()'d code on line 1



Może mi ktoś powiedzieć, czemu backslash oraz "=" są unexpected?
Ewentualnie, czy może mi ktoś wskazać, aby zrobić to inaczej?
com
Kolejny post i znów to samo eval
Cytat
Caution

The eval() language construct is very dangerous because it allows execution of arbitrary PHP code. Its use thus is discouraged. If you have carefully verified that there is no other option than to use this construct, pay special attention not to pass any user provided data into it without properly validating it beforehand.

do wyświetlenia szablonów użyj np http://nospor.pl/klasa-widoku.html

a jesli chodzi o to co napisałeś to jak już to tak:
  1. eval ("\ $logged = \"gettemplate("logged")\";");


Macie przykład w manualu a itak robicie swoje..
nospor
A po co w ogole eval? Czemu nie zrobisz jak czlowiek normalnie:
$logged = gettemplate("logged");
?
com
nospor też sie o to pytałęm ostatnio, ale oni tworza jakieś dziwne szablony, których tak się nie da sparsować wink.gif
nospor
@com tak, ale z kodu co tu podano nie wynika, ze eval jest do czegos potrzebny.
nastu7
Tak normalnie jak człowiek robię, jeśli w pliku .html nie używam zmiennych PHP, to wtedy nie ma problemu. Spróbuje z tą klasą widoku.
Natomiast poprawiłem tak jak napisał com eval i wyskakuje inny error, związany z tą funkcją

Parse error: syntax error, unexpected T_STRING in /home/.../logged.php on line 30,

więc zakładam, że taki argument jest również błędnie sformułowany.
com
nospor faktycznie, nie zauważyłęm tego echo potem biggrin.gif

nastu7 pokaż swoją magiczna funkcje gettemplate smile.gif
nospor
A jak wyglada funkcja gettemplate() ?
Uzywasz w html zmiennych php, ale w zaden sposob w html nie wchodzisz do php, wiec to i tak ci nie zadziala
nastu7
  1. function gettemplate($template) {
  2. return read_file("templates/".$template.".html");
  3. }
  4.  
  5. function read_file($filename) {
  6. $fd = fopen("$filename", "rb");
  7. $content = fread($fd, filesize($filename));
  8. fclose($fd);
  9. return $content;
  10. }
nospor
No dobra, lapie twoj zamiar.
ALe w kodzie html masz cudzyslowia, ktore rozwalają ci evala.
Przed wstawieniem tekstu z pliku html. musisz wszystkie cudzyslowia zamieniac na \"

Czyli tak jak miales na poczatku
eval ("\ $logged = \"".gettemplate("logged")."\";");
jest prrawie ok, tylko musisz zrobic zamiane " na \"

$zm = str_replace('"','\\"',gettemplate("logged"));
eval ("\$logged = \"".$zm."\";");
nastu7
Dziękuje za starania, rozwiązałeś mój problem. Teraz jednak spróbuje ogarnąć tą klasę widoku, zapewne jest to bardziej optymalne rozwiązanie, ale póki co jeśli eval działa to narazie będę z tego korzystał.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.