HTML mit PHP Code aus Datenbank auslesen + ausführen
Huhu Leute,
Ich weiß, dass das Thema schon häufiger angesprochen wurde und sicher seid ihr es auch leid. Also folgender Sachverhalt: Für meine Website habe ich ein "Grundgerüst". Kopfbereich, Navigation und so weiter werden durch php includet was alles auch super funktioniert. Der eigentliche, seitenspezifische Inhalt (also HTML- und ggf. PHP-Code [der wiederum php-Dateien Includen soll]) soll aus einer Datenbank geladen werden. Solange es sich nur um HTML-Code handelt ist alles recht einfach. Der HTML Code der Seite wird mit htmlentitys() Datenbankkonform umgewandelt und dort gespeichert. Mit html_entity_decode() wird der Code aus der Datenbank wieder in gültigen HTML Code umgewandelt. Wenn sich im HTML Code nun php Code befindet. Zum Beispiel <?php echo "test" ?> Wird dieser nicht ausgeführt sondern erscheint nur im Quellcode da der Browser damit nix anfangen kann. Ich habe schon nach Lösungen für das Problem gesucht und diese beiden hilfreichen Forendiskussionen gefunden: SELFHTML Forumsarchiv / 2009 / Februar / PHP aus Datenbank nur in Quelltext sichtbar http://xhtmlforum.de/41680-php-code-...-beziehen.html Aber leider konnten mir diese auch nicht wirklich weiterhelfen. Sehr oft wird die Funktion eval() erwähnt die aber ein hohes Sicherheitsrisiko darstellen soll. Mittlerweile vermute ich, das ich vielleicht ein konzeptionelles Problem bei meiner Website habe. Könnt ihr mir bei diesem Problem vielleicht Weiterhelfen? Gruß Garlandt |
Zitat:
Das Problem das du allerdings in deinem Design hast, ist, dass es sich ja auf MySQL stützt. deswegen erhälst du von MySQL für dein HTML-Content einen String als Rückgabetyp. In dem String kann aber normalerweise kein PHP ausgeführt werden (was auch gut so ist), weil alles was zwischen den "" steht PHP so ziemlich egal ist ;) Die Funktion eval() ist dazu da um Variablen in Strings zu ersetzen. Sicherheitstechnisch halte ich sie aber auch für bedenklich, weil du damit ziemlich anfällig für MySQL-injection wirst... Zitat:
HTML Content ist bei einer Webseite ja Statisch, deswegen wird er in .tpl-Dateien gespeichert, dazu baut man sich mit PHP dann ein Template-System (oder wenn man keine Lust hat nimmt man einfach Smarty). Die Idee dahinter ist einfach gesagt, Content vom Design komplett zu trennen, so dass das Template System hinterher nur noch dafür zuständig ist, was vorne angezeigt wird. Sich mir Smarty zu beschäftigen lohnt sich auf jeden Fall (ist einfach und schnell zu installieren) und ist sicher genau das, was du brauchst. Und noch ein Merksatz: Verwende die Datenbank nur für Daten :) |
Ich würde dir empfehlen nicht die Templates, sondern nur die Inhalte in der Datenbank zu speichern. Dein Problem tritt denn auch gar nicht erst auf, da PHP-Code nicht zum Inhalt zählt.
Zitat:
Im Template solltest du dann bei der Ausgabe von Variablen htmlspecialchars verwenden. (Zur sauberen Trennung braucht man übrigens kein Smarty und auch keine andere Template-Engine.) |
Zitat:
Das ist so nicht ganz richtig, ich hoffe/denke Du weißt das, aber es sollte hier nicht falsch stehen bleiben. ;) eval() führt eine Zeichenkette als PHP-Code aus (wie es auch im Link steht), man kann mit dessen Hilfe Variablen ersetzen, aber der Punkt ist, dass beliebiger PHP-Code ausgeführt werden kann. Schleifen, Bedingungen, andere Funktionen, include, require, ... gehört alles dazu. [/klugscheiß-modus] |
Zitat:
Zum Thema: Hmm verdammt. Scheint als wäre die Lösung für mein Problem nicht ganz so einfach wie ich gehofft habe. Von Templates habe ich leider (noch) keine Ahnung. Zitat:
Etwa so: Code:
mysql_real_escape_string("HTML Code mit spezifischen sonderzeichen etc...") Code:
htmlspecialchars("umgewandelter HTML-Code-String aus der Datenbank") Bezüglich meiner Eingangsfrage: Wenn ich euch richtig verstehe, ratet ihr mir meine Website mit einem Templatesystem aufbauen und in der Datenbank nur Daten zu speichern. Gruß Garlandt |
Zitat:
|
OK jetzt bin ich verwirrt. Dem letzten Post entnehme ich das Template-Systeme, CMS und so weiter aus diversen Gründen schlecht sind.
Ich nehme an das es sich hierbei eine Frage handelt für die es keine klare Antwort gibt: Sollten Websites mit Templates entwickelt werden oder nicht? Ich bin noch Einsteiger was Website Konzeption angeht. Gruß Garlandt Edit: Hab mir jetzt dieses "Tutorial" über Templates durchgelesen und verstehe nur Bahnhof xD. Naja zumindest verstehe ich was passiert. |
Zitat:
Ich benutzte momentan Smarty, weil es sehr einfach zu schreiben ist (einfacher als mit der eigenen von PHP) und denke, das auch Anfänger damit eventuell weniger Probleme haben... 8) @mantiz ich hab noch nie mit der Funktion gearbeitet, deswegen hab ich nur das erste Beispiel auf der Seite überflogen. :? Für solche Sachen finde ich sprintf() besser... Und PHP-Code schreibt kein Vernünftiger in einen String :D Back to Garlandt: Also: Es ist völliger Unsinn HTML-Daten in der Datenbank abzuspeichern. Wie gesagt: MySQL nur für Daten nehmen. Du solltest dir folgende Struktur aufbauen (im FTP): Code:
./ PHP-Code:
content1.php und content2.php sind dann deine Variablen PHP-Sachen. Vorteil dabei ist, das du in den einzelnen includeten Dateien dann wieder irgendwelchen PHP-Code schreiben kannst, der dann hinterher in der index.php angezeigt wird. |
Hmm ok. Ich verstehe das Prinzip. Im Grunde habe ich so eine ähnliche Konstruktion Bereits.
Kopf, Fuß und Navigation werden aus ausgelagerten php Dateien includet. Nur der Inhalt, der eben Seitenindividuell ist, soll dynamisch erstellt werden. Wenn also kein HTML-Code in der Datenbank gespeichert werden soll, dann vielleicht der Inhalt das HTML-Codes? Ein Beispiel wäre vielleicht ein Newssystem. Und weils so lustig ist das ganze auch noch Mehrsprachig. Auf der news-Seite würde wie auf jeder Seite des Projektes head, foot und navigation includet. Im Inhaltsbereich wird eine php-datei includet die quasi das "Gerüst" für den Newsbeitrag/-artikel darstellt. Der Newstext, also reiner Text ohne Code, könnte aus einer Datenbank geladen werden. Die Sprache kann über eine $_GET variable geregelt werden. Nur sehe ich dabei ein kleines Problem. Wenn der Newstext mehrere Absätze hat sollte jeder Absatz auch in in einem p-Tag stehen. Wenn im Text auch noch Bilder oder Videos enthalten sind wirds noch komplizierter. Ich kann ja schlecht jeden Absatz als eigenen Datensatz speichern. Außerdem bräuchte dann jeder Artikel eine eigene Tabelle (wenn ich mich nicht irre) und das ist nun wirklich nicht zweckmäßig. Ich hoffe das Problem, welches ich hier sehe, konnte ich verständlich machen. Was würdet ihr empfehlen? Gruß Garlandt |
Zitat:
Zitat:
Zum Beispiel Wordpress. Dazu müsstest du aber vielleicht noch sagen, was das genau für eine Webseite ist, an der du arbeitest. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 00:53 Uhr. |
Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
© Dirk H. 2003 - 2023