Avatar billede madsens90 Praktikant
16. marts 2010 - 16:37 Der er 12 kommentarer og
1 løsning

PHP og HTML gemt i MySQL, hvorefter sat ind på PHP side. Load PHPen efter indsættelse?

Hej Eksperter!

Jeg har lavet en slags CMS system til min kammerat, hvori han kan ændre teksten på alle sider osv.

Nu er det så kommet til at han gerne vil have noget sat ind på de forskellige sider, hvortil jeg har lavet ham en funktion i PHP som han kan sætte ind der hvor det passer ham.

Problemet er (som jeg ser på det) at når han gemmer PHP funktionen i MySQL'en, og PHP siden så derefter loader den igen, så loader den ikke PHP som PHP. Tror ikke det bliver sendt til serveren.

Dog hvis du skriver <?PHP echo "test"; ?> og gemmer det i MySQL, så bliver det ikke vist på siden.

Hvis nogen skulle være interesseret er her et eksempel på hvad han kunne sætte ind, hvor det så slet ikke bliver vist:

<?PHP ratings("Test - Test"); ?>

Håber i kan hjælpe!!

- Christian
Avatar billede arne_v Ekspert
16. marts 2010 - 16:49 #1
Du skal bruge eval funktionen for at faa udfoert PHP kode.
Avatar billede arne_v Ekspert
16. marts 2010 - 16:50 #2
Men check lige din sikkerhed. Dette her er en 16 sporet motorvej med sikkerhedsproblemer !!
Avatar billede madsens90 Praktikant
16. marts 2010 - 16:54 #3
Må lige læse lidt om eval funktionen..

Jeg glemte i øvrigt at sige at jeg laver en mysql_real_escape_string() på teksten også, om det har noget at sige  til det.?

Jeg ved ikke hvordan ellers bortset fra at bruge POST, og ikke GET, og bruge mysql_real_escape_string() og MD5 kryptering på passwords at jeg kan beskytte mig.
Avatar billede madsens90 Praktikant
16. marts 2010 - 16:59 #4
Har kigget på den der eval() funktion.

Kræver det ikke at alt hvad min kammerat skriver i databasen er PHP?

lige nu har han bare skrevet alt i HTML, og så skulle han forhåbentlig kunne bruge funktion ved bare at starte og slutte php..
så f.eks:


-----------
hans html kode
------------
<?PHP ratings("test - test"); ?>
------------
mere af hans html kode
-----------------
Avatar billede arne_v Ekspert
16. marts 2010 - 17:08 #5
mysql_real_escape_string() beskytter kun mod SQL injection
Avatar billede arne_v Ekspert
16. marts 2010 - 17:13 #6
Nej.

Demo:

<?php
$s = "linie 1<br><php? echo 'linie 2<br>';?>linie 3<br>";
eval('?>' . $s . '<?php');
?>
Avatar billede zynzz Praktikant
16. marts 2010 - 17:18 #7
eval kan blive en farlig cocktail.. Jeg ville nok hellere bruge: http://dk.php.net/manual/en/function.preg-replace-callback.php

Og så kalde de forskellige funktioner ved en form for syntax i teksten... fx: [RATING:10]
Avatar billede madsens90 Praktikant
17. marts 2010 - 09:32 #8
arne_v:
Ved godt at mysql_real_escape_string() kun er mod SQL injection, men nævnte bare de sikkerheds ting jeg har på min side.

Ud fra hvad jeg kan se, der virker det som om at preg_replace_callback() er den der passer bedst til det behov jeg har, selvom eval() også er ret smart!

Har forsøgt mig lidt med den førstnævnte, og det ser sådan ud:

$side = $row['side']; //output fra MySQL

$side = preg_replace_callback("/<?PHP ratings\(\"(.*)\"\); ?>/","ratings\(\"$1\"\)",$side);

echo $side;

Min funktion ligger på en included side, men det burde vel ikke give problemer?
Kan en af jer se fejlen i min kode? Er ikke super til REGGEX. ;)
Avatar billede madsens90 Praktikant
17. marts 2010 - 09:49 #9
Sidder fast her:

$side = preg_replace_callback("/\[ratings=\"(.*?)\"\]/s","ratings(\"$1\")",$side);

Hvordan får jeg $1 sendt med funktionen?
Avatar billede madsens90 Praktikant
17. marts 2010 - 10:54 #10
Hej igen igen!!

Dette var koden der fik det til at virke efter at have googlet længe, og prøvet en masse forskellige ting:

$side = preg_replace_callback("/\[ratings=\"(.*?)\"\]/","ratings",$side);


Men der er stadig et problem..

Lad os sige at jeg har teksten:

hej med dig

og vil udskifte "dig" med "mig".

Når jeg så bruger preg_replace_callback funktionen så skifter den godt nok "dig" ud med "mig", men den indsætter det toppen af siden så der står:

mig
hej med

Nogen idé om hvorfor?
Avatar billede madsens90 Praktikant
17. marts 2010 - 12:17 #11
Endelig!
Jeg fandt ud af hvad problemet var.

Først kunne jeg ikke lave en <div> uden om det der var i min funktion, så troede der var noget galt med min DIV.. Så fandt jeg ud af at det var ligemeget hvilket tag jeg brugte, og så undrede det mig virkelig meget!

Så kom jeg til at se at min funktion brugte echo "" i stedet for return til at retunere svaret. Så efter det blev ændret fra echo til return, virker alt fint igen!

zynzz: kom med et svar!

arne_v: Tak for hjælpen! Funktionen kan jeg helt sikkert bruge en anden gang, valgte bare ikke lige at bruge den i denne omgang. Men tak!
Avatar billede zynzz Praktikant
17. marts 2010 - 18:27 #12
Undskyld forsinkelsen, jeg har bare ikke overværet dette indlæg..

Husk på at preg_replace_callback retunere et array, som beskrevet på: http://dk2.php.net/manual/en/function.preg-replace-callback.php
Avatar billede madsens90 Praktikant
17. marts 2010 - 23:52 #13
Yeps. :) Har fået det til at virke perfekt!
Tak!
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