Avatar billede Slettet bruger
02. september 2004 - 09:36 Der er 27 kommentarer og
1 løsning

Parse PHP script fra database

Jeg er i gang med endnu en hjemmeside, og er løbet ind i lidt af et problem.

Jeg henter mit sideindehold ud af en database (vha php og mysql) og det fungerer helt fint, men jeg skal også have noget php script på de sider i databasen.

Men php kører jo ikke det igennem som jeg henter ud fra databasen, kan det ikke lade sig gøre? Det ville samtidig være bedst om jeg kunne køre en nl2br på det endelige output.

Lige nu smider jeg dataene fra databasetabellen ned i en fil, og inkluderer den, da php så kører filen gennem, men der må da findes en bedre måde?
Avatar billede dejbjerg Nybegynder
02. september 2004 - 09:45 #1
Avatar billede googolplex Novice
02. september 2004 - 09:56 #2
Hvorfor ligger du det i en fil først ? Du kan da bare trække det direkte ud, gøre med udtrækket hvad du har lyst til, og derefter skrive det ud med echo.
Avatar billede dennismp Nybegynder
02. september 2004 - 09:58 #3
ob_start();
eval($row['phpkode']);
$output = ob_get_contents();
ob_end_clean();

print nl2br($output);

Hvis din php kode starter med:
<?php eller <? så skal du ændre eval til

eval('?>'.$row['phpkode'].'<?php');
Avatar billede Slettet bruger
02. september 2004 - 10:02 #4
Fair nok, det virker også.

Burde jeg så ikke kunne lave noget
echo nl2br(eval($row['indhold']));

For jeg synes den er rimelig ligeglad med de linjeskift
Avatar billede Slettet bruger
02. september 2004 - 10:05 #5
Der var jeg lidt for langsom..

dennismp:
Jeg får en
Parse error: parse error, unexpected $ in ... eval()'d code on line 1

For tiden er koden skal kigge igennem reduceret til
<?php echo "Ost"; ?>
så jeg forstår ikke helt fejlen..
Avatar billede dennismp Nybegynder
02. september 2004 - 10:06 #6
Nej, hvor eval returnerer hvad du returnerer i dit script (Altså hvis du skriver "return 'hej';" så vil der komme 'hej' tilbage.) Resten ryger direkte til brugeren, med mindre man fanger det med ob_* ..

Hvordan ser din kode i $row['indhold'] ud ? Den burde nl2br() det,
Avatar billede dennismp Nybegynder
02. september 2004 - 10:12 #7
echo nl2br('?>'.eval($row['indhold']).'<?php');
Avatar billede Slettet bruger
02. september 2004 - 10:19 #8
Jeg er ikke hel  med længere..

Heller ikke hvis jeg laver
echo nl2br('?>'.eval($row['indhold']).'<?php');
om til
echo nl2br(eval('?>'.$row['indhold'].'<?php'));
virker det.

Jeg trækker pt. følgende ud af databasen
Array
(
    [sidenavn] => Forside
    [indhold] => <?php echo "Ost"; ?>
)

Og dine forslag giver desværre kun de nævnte fejl :/
Avatar billede dennismp Nybegynder
02. september 2004 - 10:22 #9
Heh, det var også sådan jeg mente ('<?' skal ind i eval :) )

Hvad hvis du prøver:

echo nl2br(eval('?><?php print echo "Ost; ?><?php'));

virker det så?
Avatar billede Slettet bruger
02. september 2004 - 10:25 #10
Parse error: parse error, unexpected T_ECHO in ... eval()'d code on line 1

Vi er enige om at det KUN er den linje jeg skal bruge ikke? Ikke noget af det andet.
Avatar billede dennismp Nybegynder
02. september 2004 - 10:50 #11
Jo.

Prøv lige fjern enten print eller echo fra din eval :)
Avatar billede Slettet bruger
02. september 2004 - 11:05 #12
echo nl2br(eval('?><?php echo "Ost"; ?><?php'));
echo nl2br(eval('?><?php print "Ost"; ?><?php'));
echo nl2br(eval('?><?php phpinfo(); ?><?php'));

giver alt sammen

Parse error: parse error, unexpected $ in ... eval()'d code on line 1
Avatar billede dennismp Nybegynder
02. september 2004 - 11:07 #13
prøv dette:
eval('?><?php print "ost";?><?');

det virker nemt fint her..
Avatar billede dennismp Nybegynder
02. september 2004 - 11:08 #14
det gør
print nl2br(eval('?><?php print "ost";?><?'));
echo nl2br(eval('?><?php print "ost";?><?'));

også.. underligt..
Avatar billede Slettet bruger
02. september 2004 - 11:12 #15
Det virker også fint her? Eneste forskel jeg kan se er <? og <?php
Avatar billede Slettet bruger
02. september 2004 - 11:16 #16
Dog ser det ud til nl2br ikke gør nogen forskel :/

Dette står i posten:
<a href="index.php?design=1">Design 1</a>
<a href="index.php?design=2">Design 2</a>
...
<a href="index.php?design=6">Design 6</a>

Men det hele kommer på samme linje med
echo nl2br(eval('?>'.$row['indhold'].'<?'));
Avatar billede dennismp Nybegynder
02. september 2004 - 11:17 #17
Damn.. Det _må_ da være en fejl, at den ikke kan genkende <?php
Avatar billede dennismp Nybegynder
02. september 2004 - 11:18 #18
Nej, du skal, som sagt, bruge ob_start() før og ob_get_contents() og ob_end_clean() lige efter.. Som i mit eksempel i mit svar.
Avatar billede Slettet bruger
02. september 2004 - 11:47 #19
Ahh, smart, og det virker :)

Godt nok laver den ikke en <br /> ved linjeskiftet efter ?>, men det er jo til at leve med.

Hvis du laver et svar kan du få pointene. Jeg siger tak!
Avatar billede dennismp Nybegynder
02. september 2004 - 12:07 #20
Det kan du jo nemt fixe selv, ved at tilføje en <br> manuelt. Herligt det virker :)
Avatar billede Slettet bruger
02. september 2004 - 12:20 #21
Tilføje manuelt?

Ideen er at lavet noget lignende et CMS system, hvor man via en admin side skal kunne skrive siderne - og herunder også bruge PHP i siden.

Derfor skal brugeren ikke tænke på linjeskift osv (ud over at lave dem med enter naturligvis). Så må jeg bare tilføje en note om at der skal laves to linjeskift efter endt php, da den æder det ene.

Kunne også bare lave noget så simpelt som
echo nl2br(eval('?>'.str_replace("?>","?> ",$row['indhold']).'<?'));
da det åbenbart virker, om end det ikke er hensigtsmæssigt at putte et mellemrum ind, hvis det er meningen der ikke skal være et.
Avatar billede dennismp Nybegynder
02. september 2004 - 12:43 #22
ja:

echo nl2br(eval(..)) .'<br>';

Vil det ikke virke?
Avatar billede dennismp Nybegynder
02. september 2004 - 12:43 #23
Det er lidt svært at bedømme,uden at være mere inde i dit system :)
Avatar billede Slettet bruger
02. september 2004 - 12:51 #24
Nej, altså jeg mener:

Hej!
Hej!<?php echo "Hest"; ?>
Hej!

Burde give:

Hej!
Hej!Hest
Hej!

Ikke?

Men det giver:

Hej!
Hej!HestHej!

Den spiser altså linjeskiftet efter PHP'en afsluttes med ?>
Avatar billede dennismp Nybegynder
02. september 2004 - 13:07 #25
Ah. Ja, så lyder din str_replace som en ok løsning. Så kommer der vel et linjeskift?
Avatar billede Slettet bruger
02. september 2004 - 13:13 #26
Jep. Jeg synes bare ikke mellemrummet er smart.
Avatar billede dennismp Nybegynder
02. september 2004 - 15:55 #27
Kan du ikke bare replace med ?>\n ? så du bruger linjeskift istedet for mellemrum?

Men der er nok ikke nogen hel god løsning på det..
Avatar billede Slettet bruger
02. september 2004 - 18:38 #28
Nej for det er jo ikke sikkert jeg skal have linjeskift.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester