PDA

Bekijk Volledige Versie : [PHP] Eval()



Floris
13/01/03, 16:00
Beste allemaal,

Ik ben al een tijdje bezig met het volgende probleem:
Ik heb een database draaien vanwaaruit pagina's worden opgehaald. Deze
worden vervolgens in $contents geplaatst, en $contents wordt later in het
script gebruikt.

De bedoeling is dat in de pagina's die uit de db komen, ook PHP-code staat
en ook wordt uitgevoerd. Hiervoor heeft PHP de functie eval(), maar ik krijg
het maar niet goed aan de praat.

Hier een voorbeeld van een pagina uit de db:
De door u opgevraagde pagina bestaat niet, kan niet gevonden worden of is
beveiligd:
<?php echo $HTTP_SERVER_VARS['PHP_SELF']; ?>

Nu een stukje PHP zoals ik die nu heb: <?php
$query = "SELECT * FROM de_tabel WHERE pageid='999'";
$result = mysql_query($query);
$data = mysql_fetch_array($result);
$data[contents] = "?>" . $data[contents] . "<?php";
//$data[contents] = addslashes($data[contents]);
ob_start();
eval($contents = $data[contents]);
$contents .= ob_get_contents();
ob_end_clean();
//$contents = stripslashes($contents);
$contents=nl2br($contents);
$pageid="999";
$title=$data[title]; ?>

Zoals duidelijk zal zijn, werkt dit niet goed. Ik krijg onderstaande error:
?>De door u opgevraagde pagina bestaat niet, kan niet gevonden worden of is
beveiligd:
Parse error: parse error in
[weggelaten]/httpdocs/cats/shared/contents.php(34) : eval()'d code on line 1

Opvallend is dat ?> ervoor staat, maargoed. Enig idee hoe ik dit goed aan de
praat krijg? Uit de PHP documentatie wordt ik helaas niet heel veel wijzer..

Jaap-Andre de Hoop
13/01/03, 16:18
In article <3e22c689$0$49116$e4fe514c@news.xs4all.nl>, "Floris" <florisvlasveld@xs4all.nl> wrote:

in voorbeeld van de handleiding staat niet

>eval($contents = $data[contents]);

maar
eval ("\$str = \"$str\";");

let op quotes
misschien dat ie het dan wel doet.

Jaap-Andre

Floris
13/01/03, 16:28
> in voorbeeld van de handleiding staat niet
>
> >eval($contents = $data[contents]);
>
> maar
> eval ("\$str = \"$str\";");
>
> let op quotes
> misschien dat ie het dan wel doet.

Beste Jaap-Andre,

Ik heb je tip gebruikt. Ik gebruik als voorbeeld deze pagina uit de DB:
De door u opgevraagde pagina bestaat niet, kan niet gevonden worden of is
beveiligd: <?php echo "Test"; ?>

Dit resulteert in:
Parse error: parse error in
/usr/local/plesk/apache/vhosts/fastpoint.nl/httpdocs/cats/shared/contents.ph
p(34) : eval()'d code on line 1

Gebruik ik enkele ' ipv ", dan is dit de output:
?>De door u opgevraagde pagina bestaat niet, kan niet gevonden worden of is
beveiligd:

Lijkt er dus op dat mijn //$data[contents] = addslashes($data[contents]); en
//$contents = stripslashes($contents);-idee uit de eerste post niet helemaal
voor niets waren. Maar zoals je ziet wordt de PHP-code nog steeds niet
uitgevoerd, en om de een of andere reden blijft ?> staan. Dit doe ik
overigens (zie eerste post) zodat de gewone tekst niet direct gezien wordt
als PHP..

Iemand nog een idee?

Chris
13/01/03, 16:50
"Floris" <florisvlasveld@xs4all.nl> wrote in message
news:3e22cd26$0$49106$e4fe514c@news.xs4all.nl...
> > in voorbeeld van de handleiding staat niet
> >
> > >eval($contents = $data[contents]);

try this:

eval(' ?> '.$data[contents].' <?php ');

laterz
Chris

robert
13/01/03, 16:53
Floris <florisvlasveld@xs4all.nl>:
> Maar zoals je ziet wordt de PHP-code nog steeds niet uitgevoerd, en om
> de een of andere reden blijft ?> staan.

Waarschijnlijk komt die voort uit de string "?>" die je midden in je code
hebt staan; daar zal de PHP parser waarschijnlijk moeite mee hebben (ik
verwacht dat 'ie denkt dat daar het script ophoudt).

--
robert

Floris
13/01/03, 17:49
> try this:
>
> eval(' ?> '.$data[contents].' <?php ');
>

Chris, je bent mijn held van de dag. Hoe kan het nou dat dit de oplossing
is??