|
| PHP-kode i database Fra : Kasper Damkjær |
Dato : 02-04-02 14:46 |
|
Jeg har en side, hvor indholdet er gemt i en mysql database. Indholdet
fyldes så i en template udfra et databasekald baseret på en variabel
('$pageid'). Det virker også fint nok med standard tekst og HTML kode, men
ikke med PHP kode.
Spørgsmålet er, kan man ikke få PHP kode parset, når det er hentet fra en
database (som man kan med en include-fil)?
Et eksempel kan ses her:
http://damkjaer.net/page.php?pageid=kontakt
(I kilden kan man se, at PHP koden bare optræder som tekst.)
--
Kasper Damkjær
http://www.damkjaer.net
| |
Jonas Koch Bentzen (02-04-2002)
| Kommentar Fra : Jonas Koch Bentzen |
Dato : 02-04-02 15:00 |
|
Kasper Damkjær skrev:
>
> Spørgsmålet er, kan man ikke få PHP kode parset, når det er hentet fra
> en database
$dele = explode("<?php", $tekstFraDatabasen);
echo $dele[0];
for ($i = 1; $i < count($dele); $i++) {
eval($dele[$i]);
}
--
Jonas Koch Bentzen
http://understroem.dk/
| |
Jonas Koch Bentzen (02-04-2002)
| Kommentar Fra : Jonas Koch Bentzen |
Dato : 02-04-02 15:02 |
|
Jonas Koch Bentzen skrev:
> Kasper Damkjær skrev:
>>
>> Spørgsmålet er, kan man ikke få PHP kode parset, når det er hentet
>> fra en database
>
> $dele = explode("<?php", $tekstFraDatabasen);
> echo $dele[0];
> for ($i = 1; $i < count($dele); $i++) {
> eval($dele[$i]);
> }
....og så skal man selvfølgelig være 100% sikker på, at variablen
$tekstFraDatabasen ikke kan ændres af brugere vha. query stringen...
Det er en god ide at slå register_globals fra.
--
Jonas Koch Bentzen
http://understroem.dk/
| |
Andreas Frøsting (02-04-2002)
| Kommentar Fra : Andreas Frøsting |
Dato : 02-04-02 15:17 |
|
>$dele = explode("<?php", $tekstFraDatabasen);
>echo $dele[0];
>for ($i = 1; $i < count($dele); $i++) {
> eval($dele[$i]);
>}
Hvorfor explode() osv?
Jeg har da haft masser af held med blot at hive et helt textfelt ud
fra databasen og køre det gennem eval().
:wq
//andreas
http://phpwizard.dk
| |
Jonas Koch Bentzen (02-04-2002)
| Kommentar Fra : Jonas Koch Bentzen |
Dato : 02-04-02 15:57 |
|
Andreas Frøsting skrev:
>>$dele = explode("<?php", $tekstFraDatabasen);
>>echo $dele[0];
>>for ($i = 1; $i < count($dele); $i++) {
>> eval($dele[$i]);
>>}
>
> Hvorfor explode() osv?
> Jeg har da haft masser af held med blot at hive et helt textfelt ud
> fra databasen og køre det gennem eval().
Det vil kun virke, hvis det allerførste i tekststrengen er "<?php". I
den PHP-version, jeg bruger (4.1.2), er det sådan, at eval() skal have
ren PHP-kode ind først. Hvis PHP-koden i tekststrengen senere afsluttes
med "?>", så kan eval godt håndtere det. Derimod kan eval ikke håndtere
ikke-PHP-kode først i strengen.
Et eksempel:
<?php
$streng = 'echo "Her er noget PHP-kode<br/>\n";
?>
og her er noget <b>ikke</b>-PHP-kode.';
eval($streng);
?>
Det giver følgende resultat:
Her er noget PHP-kode
og her er noget ikke-PHP-kode.
Nu prøver vi så at begynde med noget ikke-PHP-kode:
<?php
$streng = 'Her er noget <b>ikke</b>-PHP-kode<br/>
<?php
echo "Her er noget PHP-kode<br/>\n";
?>
og her er igen noget <b>ikke</b>-PHP-kode.';
eval($streng);
?>
Det giver følgende resultat:
Parse error: parse error in /filnavn(8) : eval()'d code on line 1
--
Jonas Koch Bentzen
http://understroem.dk/
| |
Jonas Koch Bentzen (02-04-2002)
| Kommentar Fra : Jonas Koch Bentzen |
Dato : 02-04-02 15:59 |
|
Jonas Koch Bentzen skrev:
>
>> Jeg har da haft masser af held med blot at hive et helt textfelt ud
>> fra databasen og køre det gennem eval().
>
> Det vil kun virke, hvis det allerførste i tekststrengen er "<?php".
Rettelse: Det vil kun virke, hvis det allerførste i tekststrengen er
gyldig PHP-kode. Tekststrengen må dog *ikke* begynde med "<?php".
--
Jonas Koch Bentzen
http://understroem.dk/
| |
Andreas Frøsting (02-04-2002)
| Kommentar Fra : Andreas Frøsting |
Dato : 02-04-02 21:39 |
|
>Rettelse: Det vil kun virke, hvis det allerførste i tekststrengen er
>gyldig PHP-kode. Tekststrengen må dog *ikke* begynde med "<?php".
eval("?>".$textfradatabase);
Den har jeg da brugt "i årevis" :)
:wq
//andreas
http://phpwizard.dk
| |
Jonas Koch Bentzen (02-04-2002)
| Kommentar Fra : Jonas Koch Bentzen |
Dato : 02-04-02 19:15 |
|
Andreas Frøsting skrev:
>
> Jeg har da haft masser af held med blot at hive et helt textfelt ud
> fra databasen og køre det gennem eval().
Okay, du taler måske om *ren* PHP-kode, der er gemt i et felt i
databasen? Jeg taler om blandet HTML- og PHP - dér er det nødvendigt at
gøre som jeg gjorde.
--
Jonas Koch Bentzen
http://understroem.dk/
| |
Kasper Damkjær (02-04-2002)
| Kommentar Fra : Kasper Damkjær |
Dato : 02-04-02 16:07 |
|
Kasper Damkjær skrev: (messageID:
<news:Xns91E4A0598797Ausenetdamkjaernet@194.19.194.7>)
> Spørgsmålet er, kan man ikke få PHP kode parset, når det er hentet fra
> en database (som man kan med en include-fil)?
Det skal lige siges, at koden, der er gemt i databasen, er PHP og HTML
blandet sammen. Det betyder, at jeg ikke kan finde ud af at bruge eval() på
koden.
--
Kasper Damkjær
http://www.damkjaer.net
| |
Jonas Koch Bentzen (02-04-2002)
| Kommentar Fra : Jonas Koch Bentzen |
Dato : 02-04-02 19:13 |
|
Kasper Damkjær skrev:
> Kasper Damkjær skrev: (messageID:
> <news:Xns91E4A0598797Ausenetdamkjaernet@194.19.194.7>)
>
>> Spørgsmålet er, kan man ikke få PHP kode parset, når det er hentet
>> fra en database (som man kan med en include-fil)?
>
> Det skal lige siges, at koden, der er gemt i databasen, er PHP og HTML
> blandet sammen. Det betyder, at jeg ikke kan finde ud af at bruge
> eval() på koden.
Så se det eksempel, jeg gav dig... Det virker - også med HTML- og
PHP-kode blandet sammen. Det eneste, der kan forårsage en fejl i det,
er en tekstreng i PHP-koden, der indeholder "<?php":
<?php
echo "Det her går galt: <?php";
?>
--
Jonas Koch Bentzen
http://understroem.dk/
| |
Kasper Damkjær (03-04-2002)
| Kommentar Fra : Kasper Damkjær |
Dato : 03-04-02 10:10 |
|
Jonas Koch Bentzen skrev: (messageID: <news:a8csbm$n0e$1@sunsite.dk>)
> Kasper Damkjær skrev:
>
>> Kasper Damkjær skrev: (messageID:
>> <news:Xns91E4A0598797Ausenetdamkjaernet@194.19.194.7>)
>>
>>> Spørgsmålet er, kan man ikke få PHP kode parset, når det er hentet
>>> fra en database (som man kan med en include-fil)?
>>
>> Det skal lige siges, at koden, der er gemt i databasen, er PHP og HTML
>> blandet sammen. Det betyder, at jeg ikke kan finde ud af at bruge
>> eval() på koden.
>
> Så se det eksempel, jeg gav dig... Det virker - også med HTML- og
> PHP-kode blandet sammen. Det eneste, der kan forårsage en fejl i det,
> er en tekstreng i PHP-koden, der indeholder "<?php":
OK, tak for hjælpen. Jeg har dog, af forskellige årsager, nu smidt mit
indhold ud i seperate .php filer som så includes. Metatags o.lign. ligger
stadig i databasen og alt fungerer :)
--
Kasper Damkjær
http://www.damkjaer.net
| |
Niels Andersen (02-04-2002)
| Kommentar Fra : Niels Andersen |
Dato : 02-04-02 20:54 |
|
Kasper Damkjær wrote in <Xns91E4ADF7CB191usenetdamkjaernet@194.19.194.5>:
> Det skal lige siges, at koden, der er gemt i databasen, er PHP og HTML
> blandet sammen. Det betyder, at jeg ikke kan finde ud af at bruge eval()
> på koden.
eval('?>'.$kode);
Så skulle den være der... Det bruger jeg selv i mine "lege-værktøjer".
--
Mvh.
Niels Andersen
| |
|
|