zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden HTML mit PHP Code aus Datenbank auslesen + ausführen

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 29.04.2011, 11:21
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 21.02.2011
Beiträge: 35
Garlandt befindet sich auf einem aufstrebenden Ast
Standard 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
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 29.04.2011, 14:05
ofHouse
XHTMLforum-Mitglied
 
Registriert seit: 20.04.2011
Beiträge: 128
Borsti befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Garlandt Beitrag anzeigen
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.
Erst mal: gute Sache, weil du damit dynamisch bist & bleibst.

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:
Mittlerweile vermute ich, das ich vielleicht ein konzeptionelles Problem bei meiner Website habe.
Richtig vermutet, normalerweise geht das so:
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
__________________
LG f

@ofhouse

Geändert von Borsti (29.04.2011 um 14:10 Uhr)
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 29.04.2011, 14:36
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

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:
Zitat von Garlandt Beitrag anzeigen
Der HTML Code der Seite wird mit htmlentitys() Datenbankkonform umgewandelt und dort gespeichert.
htmlentities ist nicht dafür gedacht, verwende an dieser Stelle mysql_real_escape_string.

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.)
Mit Zitat antworten
  #4 (permalink)  
Alt 29.04.2011, 16:57
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Zitat:
Zitat von Borsti Beitrag anzeigen
Die Funktion eval() ist dazu da um Variablen in Strings zu ersetzen.
[klugscheiß-modus]
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]
Mit Zitat antworten
  #5 (permalink)  
Alt 29.04.2011, 19:31
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 21.02.2011
Beiträge: 35
Garlandt befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat:
Zitat:
Zitat von Garlandt Beitrag anzeigen
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.
Erst mal: gute Sache, weil du damit dynamisch bist & bleibst.
Danke, ich versuche mir gleich alles richtig beizubringen und Standard konform zu arbeiten. Auch wenns oft nicht so leicht auf alle Browser Rücksicht zu nehmen.

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:
Zitat:
Zitat:
Zitat von Garlandt Beitrag anzeigen
Der HTML Code der Seite wird mit htmlentitys() Datenbankkonform umgewandelt und dort gespeichert.
htmlentities ist nicht dafür gedacht, verwende an dieser Stelle mysql_real_escape_string.
Wenn wir gerade dabei sind: Wie speichere ich HTML Code "richtig" in einer Datenbank und lese ihn sicher wieder aus?

Etwa so:

Code:
mysql_real_escape_string("HTML Code mit spezifischen sonderzeichen etc...")

Das Ergebnis wird in die Datenbank geschrieben.
Und auslesen wäre dann:

Code:
htmlspecialchars("umgewandelter HTML-Code-String aus der Datenbank")
Ist das so richtig oder muss noch mehr beachtet werden um sicher zu Programmieren?

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
Mit Zitat antworten
  #6 (permalink)  
Alt 29.04.2011, 19:48
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 07.04.2005
Ort: Kuchen
Beiträge: 119
Dani@okraina befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Borsti Beitrag anzeigen
[...] dazu baut man sich mit PHP dann ein Template-System (oder wenn man keine Lust hat nimmt man einfach Smarty). [...]
Bin der gleichen Meinung wie Inta. Hab da noch einen Link ausgegraben... PHP Blogger: PHP ist eine Template Engine! - Ein PHP Blog auf deutsch
__________________
Gruß
Dani
Mit Zitat antworten
  #7 (permalink)  
Alt 29.04.2011, 20:41
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 21.02.2011
Beiträge: 35
Garlandt befindet sich auf einem aufstrebenden Ast
Standard

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.

Geändert von Garlandt (30.04.2011 um 01:15 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 30.04.2011, 15:06
ofHouse
XHTMLforum-Mitglied
 
Registriert seit: 20.04.2011
Beiträge: 128
Borsti befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Dani@okraina Beitrag anzeigen
Bin der gleichen Meinung wie Inta. Hab da noch einen Link ausgegraben... PHP Blogger: PHP ist eine Template Engine! - Ein PHP Blog auf deutsch
Kommt immer drauf an, bis zu welcher Größe.
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...

@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

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:
./
/template/
header.php
content1.php
content2.php
footer.php
index.php
deine index.php sieht dann so aus:
PHP-Code:
<?PHP
include("template/header.php");

if(
IRGENDWAS) {
    include(
"template/content1.php");
} else {
    include(
"template/content2.php");
}

include(
"template/footer.php");
?>
in die header.php kommt alles, was du als Kopfteil haben willst, in die footer.php, Alles, was du auf jeder Seite unten haben willst.

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.
__________________
LG f

@ofhouse

Geändert von Borsti (30.04.2011 um 15:09 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 30.04.2011, 20:48
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 21.02.2011
Beiträge: 35
Garlandt befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 30.04.2011, 22:15
ofHouse
XHTMLforum-Mitglied
 
Registriert seit: 20.04.2011
Beiträge: 128
Borsti befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Garlandt Beitrag anzeigen
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?
Ja, jetzt bist du auf dem richtigen Pfad

Zitat:
Ein Beispiel wäre vielleicht ein Newssystem. Und weils so lustig ist das ganze auch noch Mehrsprachig.
Wenn du ein Newssystem haben willst, würde ich dir ein CMS ans Herz legen, damit wirst du mehr Erfolg haben, als alles selbst zu programmieren.

Zum Beispiel Wordpress.

Dazu müsstest du aber vielleicht noch sagen, was das genau für eine Webseite ist, an der du arbeitest.
__________________
LG f

@ofhouse
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
HTML Code in Datenbank speichern, aber wie? Garlandt Serveradministration und serverseitige Scripte 5 03.05.2011 18:41
Redesign für Steiner Cycling Team pkipper Site- und Layoutcheck 11 09.02.2011 13:25
PHP Code aus einer Datenbank beziehen und ausführen? Zen5656 Serveradministration und serverseitige Scripte 3 03.09.2006 17:20
HTML Code auf Webseite darstellen Lloyd Larkin Offtopic 7 18.07.2006 17:15
Per PHP Seitenteile includen - als PHP, HTML oder anderes? jottlieb Serveradministration und serverseitige Scripte 9 24.01.2006 15:46


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:40 Uhr.