/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408952
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste