Avatar billede kbisgaard Nybegynder
09. maj 2011 - 14:17 Der er 13 kommentarer og
1 løsning

CMS system

Hej alle

Jeg har rodet lidt med at lave et CMS system, men har indtil nu brugt en metode hvor jeg inkluderer funktioner i databasen. altså fx står der mailform() i databasen hvor jeg har defineret funktionen mailform() i et dokument som jeg har inkludet på alle sider. Jeg er i tvivl om hvorvidt det er den rigtige måde at gøre det på?
Er der andre måder at gøre det på?

Med venlig hilsen
Kasper Bisgaard
Avatar billede kjeldsted Novice
09. maj 2011 - 14:23 #1
Der er vel ikke noget der hedder "den rigtige måde". Det er mere et spørgsmål om at finde en måde at gøre tingene på som man selv finder mest overskueligt.

Dog forvirre du mig en del idet du skriver "hvor jeg inkluderer funktioner i databasen."

Vil det sige at du i din database, dér hvor du indsætte tekst og sådan vil kunne skrive fx. mailform() for så at få vist mailformen?
Avatar billede kbisgaard Nybegynder
09. maj 2011 - 14:34 #2
Jeps. Det er præcis det jeg gør.. så når jeg retter noget på siden via min browser står der fx:
"Her kan du kontakte mig<br>
<?php mailform(mail); ?>". Og det er så det som bliver sat ind i databasen.. Derefter bruger jeg eval() til at afvikle koden fra databasen.
Avatar billede phillips Nybegynder
09. maj 2011 - 14:39 #3
Umiddelbart virker det som en lidt skæv fremgangsmåde. En del af den grundlæggende ide bag et CMS er netop at adskille kode fra indhold - på den måde blander du det.

Du bør måske tænke i banen, at en bruger af CMS'et skal kunne anvende det uden at kende til én eneste linie HTML eller PHP-kode.
Avatar billede kjeldsted Novice
09. maj 2011 - 14:45 #4
Jeg ville nok overveje at passe kraftigt på med lige den idé. Det ville nok være bedre at lave noget á la Wordpress, så du fx. i noget fil eller noget definere de funktioner der skal kunne udskrives og så fx. udskriver dem ved [visMailform].

Hvis du bare giver brugeren adgang til at udføre PHP funktioner uden begrænsning har brugeren fuld kontrol over din server og kan snildt hente SAMTLIGE database infomationer. Eller slette det hele.
Avatar billede kbisgaard Nybegynder
09. maj 2011 - 14:53 #5
Jamen det er faktisk også det jeg gør Kjeldsted. Jeg har lavet en php fil som hedder funktioner.php hvor jeg skriver alle mine funktioner. Derefter inkluderer jeg den fil på alle sider, hvorefter jeg kan udskrive dem ved mailform().. Kan godt se det fornuftige i det du siger :) kender bare ikke til nogen anden løsning.
Avatar billede kjeldsted Novice
09. maj 2011 - 15:02 #6
Ja, og dog. Det du gør er jo at eksekvere en hvilken som helst PHP funktion.

Og har du lyst til at jeg fx. går ind og skriver:

Nu skal vi have det lidt sjovt mysql_query(\"DELETE from users WHERE 1=1\")

Nej vel!?

Det er simpelthen så satans risikabelt at du bliver nødt til at gøre noget andet. Og som sagt ville jeg anbefale at du udskriver dine ting via [VisMailform]. Og hvis du så får brug for parametre kan du jo fx. skrive [VisMailform="1"] hvis der er forskellige udgaver.
Avatar billede kbisgaard Nybegynder
09. maj 2011 - 15:04 #7
Forstår ikke helt hvad du mener med VisMailform ?
Det er ikke sikkert jeg har fået de helt grundlæggende ting med i min "php uddannelse", da jeg er 100% selvlært :P
Avatar billede wanze Nybegynder
09. maj 2011 - 15:05 #8
I langt de fleste tilfælde kan man sige, at hvis du har behov for at benytte funktionen eval(), så gør du det forkert.
Avatar billede kjeldsted Novice
09. maj 2011 - 15:12 #9
Altså:

Hvis du nu fx. i CMS interfacet skriver følgende:

"Her på siden kan du kontakte mig. [VisMailform]"

Så vil du jo gerne have at at den skriver "Her på siden kan du kontakte mig. " og så viser mailformen.

Dét du så skal gøre er via regular ekspressions at lede efter [ og ] og finde ud af om teksten mellem [ og ] er navnet på en funktion som brugeren må eksekvere.

På denne måde undgår du at en bruger kan gå hen og udføre fx. uønskede mysql funktioner.
Avatar billede kjeldsted Novice
09. maj 2011 - 15:50 #10
Det er ikke en 100% færdig løsning. Men mine tanker var noget lingende dette:


<?
function VisMailform()
{
    return "Indsæt mailform hér";   
}

function udskift()
{
   
}

function patternArray()
{
    $patterns = array();
    $patterns[0] = '/\[VisMailform\]/';
    return $patterns;
}

function replacementArray()
{
    $replacements = array();
    $replacements[0] = VisMailform();
    return $replacements;
   
}

function reg($str)
{
    $patterns = patternArray();
    $replacements = replacementArray();
    ksort($patterns);
    ksort($replacements);
    return preg_replace($patterns, $replacements, $str);
}

$str = "Her kan du kontakte mig: [VisMailform]";

echo reg($str);

?>
Avatar billede kjeldsted Novice
09. maj 2011 - 15:51 #11
Hov. Funktionen udskfit() skal jo naturligvis bare fjernes.

Resultatet af dette script kan ses på: http://jenskjeldsted.dk/exp/938401/
Avatar billede kbisgaard Nybegynder
09. maj 2011 - 16:13 #12
genialt :) Mange tak det virker sku bare!
Hvordan giver jeg dig points?
Avatar billede kjeldsted Novice
09. maj 2011 - 16:17 #13
Du giver mig points ved at acceptere dette svar. Men husk at holde styr på arrays og sådan. Og husk det er noget der lige hurtigt er smækket sammen.
Avatar billede kbisgaard Nybegynder
09. maj 2011 - 16:24 #14
Jeps. Jeg tror jeg har styr på det :)
Mange tak for svarene :)
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