Wenn ich in $inhalt nun einfache Anführungszeichen habe ('), gibt es einen Syntax-Error. Wie kann ich das umgehen, damit ich beide Arten von Anführungszeichen nutzen kann, die dann in der DB gespeichert werden?
1. Schau dir mal die Funktion mysql_real_escape_string() an. Die sollte man immer benutzen wenn man Daten in die Datenbank eingeben möchte die von den Benutzern stammen.
Der Inhalt wird aktuell durch ein einfaches echo wiedergegeben. Nun möchte ich aber (wie im Titel geschrieben) auch PHP-Code in den Artikeln unterbringen, um bspw. eine zuvor definierte Funktion aufzurufen. Wie mache ich das?
2. Wie bereits vorher schon von anderer Seite gesagt wurde solltest du lieber Platzhalter im Text verwenden. Ähnlich wie bei Smilies oder BBCode würde an den Stellen dann bestimmte Funktionen aufgerufen. Halte ich aber nicht für ein gutes System, Inhalt sollte von der Logik der Seite getrennt sein.
Momentan habe ich alles in Dateien abgespeichert. Einzelne Templates etc. werden über include() aufgerufen. Wenn nun der Code in der DB steht, wie kann ich dann dass include() ersetzen, um das Template ebenfalls aus der DB abzurufen?
3. Generell solltest du Templates nicht in der Datenbank abspeichern. Wenn ein Design/Template erst einmal steht kann man sagen das die Daten statisch sind und schon alleine deswegen nicht in eine DB gehören. Ich persönlich schreibe meine Templates komplett in HTML und füge an Stellen an denen etwas dynamische eingefügt werden soll eine Variable mit echo ein.
<div id="content">
<h1><?php echo $title; ?></h1>
<p><?php echo $content; ?></p>
</div>
Die Variablen müssen vorher natürlich initialisiert werden. Ich mache das über eine kleine einfache Template-Klasse.
Vielleicht solltest du dich auch mal über Template-Systeme wie Smarty informieren.
Also ich rufe die URI host.de/pfad/news/13 auf.
--> Der Datensatz 'News' wird aufgerufen. Dieser enthält den Code, wie News zu behandeln sind.
----> 'News' ruft in der News-DB die entsprechenden Inhalte zur ID 13 ab.
----> 'News' ruft das Template für die Newsanzeige aus der DB ab
------> Das Template enthält das DOM und entsprechende Variablen für den Inhalt
Irgendwie machst du dir die Sache ziemlich kompliziert. Meine News-Datenbank enthält pro Eintrag nur ID, Titel, Text weite Infos sind eher unwichtig hier. Wenn man nun also die News lädt:
SELECT * FROM news
So erhält man ein schönes Array das mit foreach() einfach durchgegangen und ausgegeben werden kann. Wenn du jedes Mal für jeden Eintrag noch abspeicherst wie er behandelt werden soll, obwohl die meisten Einträge gleich zu behandeln wären, machst du es dir ziemlich schwer, wenn du etwas ändern willst. Soll heißen speichere nur Text und keinen Code.
Gruß Andreas