Ik ben een website aan het maken (soort CMS) waarbij ik de content van een pagina opsla in een database en deze er, afhankelijk van de url van de pagina, met $_GET (index.php?page=home&lan=nl) uithaal.

<?php $newquery = "SELECT * FROM sna_menu WHERE name = '".$_GET['page']."'";
$newresult = mysql_query($newquery) or die ("FOUT: " .mysql_error());
while (list($id, $ord, $name, $title, $level, $sub, $url, $nl, $en) =
mysql_fetch_row($newresult)){
echo $nl ; }
?>

In deze pagina's staat echter PHP script en deze worden weergegeven als tekst en niet verder verwerkt. Weet iemand hoe dit komt en hoe ik het zo krijg dat de scripts gewoon verwerkt worden alsof ze in de php pagina staan.
Kijk eens bij [php]eval()[/php].
Dit lijkt inderdaad wat ik nodig heb, maar kom er niet helemaal uit:

Ik heb nu de volgende script:

<?php $newpartyquery = "SELECT * FROM sna_menu WHERE name = '".$_GET['page']."'";
$newpartyresult = mysql_query($newpartyquery) or die ("FOUT: " .mysql_error());
while (list($id, $ord, $name, $title, $level, $sub, $url, $nl, $en) =
mysql_fetch_row($newpartyresult)){
eval("\$nl = $nl2;");
echo $nl2 ; } ?>

Maar krijg daarmee de volgende foutmelding:

Parse error: syntax error, unexpected ';' in C:\Program Files (x86)\xampp\htdocs\sna\index.php(145) : eval()'d code on line 1
Kan dit komen doordat de string niet alleen php, maar ook tekst en HTML bevat?
Moet dit niet andersom?
eval("\$nl = $nl2;");

dus
eval("\$nl2 = $nl;");
echo $nl2;
Krijg nu een andere foutmelding:

Parse error: syntax error, unexpected T_LNUMBER in C:\Program Files (x86)\xampp\htdocs\sna\index.php(145) : eval()'d code on line 1
Tja, dan zal je die code na moeten gaan zien.
De oplossing was dus heel simpel...
Omdat je de eval() aanroept vanuit php raakt de server in de war met de tags van HTML en PHP.
Een oplossing hiervoor is het beeindigen van PHP bij het aanroepen en het daarna dus weer openen, hiervoor het volgende gewijzigde script:

<?php $newquery = "SELECT * FROM sna_menu WHERE name = '".$_GET['page']."'";
$newresult = mysql_query($newquery) or die ("FOUT: " .mysql_error());
while (list($id, $ord, $name, $title, $level, $sub, $url, $nl, $en) =
mysql_fetch_row($newresult)){
eval('?>' . $nl . '<?php '); } ?>

Waarin je in deze regel kunt zien dat php eerst afgesloten wordt, daarna begint de evaluatie van het PHP gedeelte uit de Database en daarna wordt PHP weer geopend:

eval('?>' . $nl . '<?php ');

En zo te zien heeft deze website ook moeite met het principe, maar het werkt bij mij goed...
Ik denk dat dat komt omdat je code in de DB begint met < ?php (aan elkaar vast). Dat kan dus niet... je kan niet PHP openen in PHP. Dus, als je dat en de ?> aan het einde weghaalt uit de code in je DB, hoef je waarschijnlijk niet zo'n gare eval() te bakken.

Elwin
Wat je zegt klopt wel, maar als je eerst een stuk HTML hebt dan loopt ie ook niet zoals het hoort....

Reageren