Ik vroeg me af of het mogelijk is om een heel stuk website, inclusief php, op te slaan in mysql.
Bv: <div id="dkdkd"><?php echo "blablabla"; ?></div> helamaal opslaan in mysql om het daarna met php weer uit te laden en het script correct uit te voeren.
Google vindt eval(); maar dit blijkt om de een of andere reden niet aan te raden en werkt ook niet.
Heeft iemand hier een oplossing voor?
Alvast sorry mocht dit een stomme vraag zijn ;)
PHP zal de data als string zien en dus niet uit kunnen voeren (als je het echoëd wordt het als html geparst).
Wat wel werkt is de data opslaan in een bestand en dit bestand vervolgens te includen:
<?php
include 'connect.php'; //ff kort: maak verbinding met je mysql-server e.d.
// ik doe maar wat; het gaat erom dat de data geselecteerd wordt dus
$res = mysql_query("SELECT data FROM scripts WHERE id='4'") or die (mysql_error());
while($obj = mysql_fetch_object($res)) {
$filename = md5(rand(0,9999999)).'.php'; //genereer een (vrijwel altijd) unieke naam
$fp = fopen($filename,'a'); //bestand aanmaken
fwrite($filename, $obj -> data); //data opslaan
fclose($fp); //en sluiten
if(is_file($filename)) {
include $filename; //data uitvoeren
unlink $filename; //bestand verwijderen
}else{
echo 'De data kon niet geladen worden.<br />Controleer op juiste permissies van de map.';
}
}
mysql_free_result($res);
?>
<?php
include'connect.php';//ff kort: maak verbinding met je mysql-server e.d.
// ik doe maar wat; het gaat erom dat de data geselecteerd wordt dus
Het zit zo: ik heb een website die de content van alle pages uit de database haalt. Dit werkt correct en het CMS is hierop afgestemd.
De homepage bestaat echter uit een tabel met 6 blokken tekst. Helaas ben ik vergeten dat de laatste blok tekst de laatste 3 nieuwsitems van de blog moet bevatten. Dit moet dus php zijn. Vandaar dat ik dit nodig heb.
Ik kan natuurlijk een uitzondering op het paginasysteem maken en iedere tekstblok afzonderlijk bewerken in het CMS. Maar dit zal een stuk langer duren. Dit zal ik dus liefst in laatste instantie overwegen.
Het scriptje van svm ziet er goed uit, alleen vrees ik dat dit wat omstreden is hiervoor? (Ik kan me natuurlijk vergissen!)
// haal je bestandsnaam (paginanaam) uit de database
$res = mysql_query("select bestandsnaam from paginas where id = 5");
if(mysql_num_rows($res) != 1) {
die('Er is iets raars...');
}
$bestandsnaam = mysql_fetch_assoc($res)['bestandsnaam'];
include('paginas/' . $bestandsnaam) or die('Paginabestand bestaat niet');
// stop het aangepaste bestand in string $data in bestand $bestandsnaam
file_put_contents('paginas/' . $bestandsnaam, $data);
// haal je bestandsnaam (paginanaam) uit de database
$res=mysql_query("select bestandsnaam from paginas where id = 5");
$var = "Mijn waarde";
//en ik het volgende doe:
echo $var;//zal hij- mijn waarde - echoen.
//als ik
echo "$var"; //doe, zal hij - mijn waarde - echoen.
//als ik
echo '$var';// doe zal hij- $var - echoen...
Maar dan hoef je toch geen php te maken? Je maakt een php pagina die alles maakt zodat het in dat blok kan (dus met links en alles), dat zet je in textbestand.txt
Vervolgens echo je dat in je blok waar je dat wilt. Het enige wat je daarna nog moet doen, is iets maken dat dat textbestand.txt update als je nieuw item toevoegt.
Jouw manier is omslachtig om dan elke keer opnieuw geparsed moet worden, en in mijn voorbeeld veranderd er alleen iets als je daadwerkelijk iets veranderd, scheelt weer wat
Maar dan hoef je toch geen php te maken? Je maakt een php pagina die alles maakt zodat het in dat blok kan (dus met links en alles), dat zet je in textbestand.txt
Vervolgens echo je dat in je blok waar je dat wilt. Het enige wat je daarna nog moet doen, is iets maken dat dat textbestand.txt update als je nieuw item toevoegt.
Jouw manier is omslachtig om dan elke keer opnieuw geparsed moet worden, en in mijn voorbeeld veranderd er alleen iets als je daadwerkelijk iets veranderd, scheelt weer wat
Dus is hij op zoek naar een functie die php-code in een string kan uitvoeren.
Als deze er niet is kan hij mijn scriptje, zie mijn vorige reactie, gebruiken.
Eventueel kun je het in een functie zetten, zodat je niet het hele file gebeuren telkens hoeft de gebruiken en het overzichtelijk blijft.