in SQL +Zeichensetzung

Hallo Community.
Ich habe folgendes Problem.
Zur Zeit arbeite ich an ein PHP-Script das sich Daten aus einer MySQL Datenbank holen kann.
Die Daten die in der Datenbank zu finden sind, sind aber nicht alle nur einfach Daten, sondern auch PHP-Befehle.
Aber diese auszugeben ist irgendwie ein Problem, vorallen wenn sie in meinem Beispiel noch mit dem Script fest "verankert" sind und die nächste Problematik die Zeichen von PHP ist.
Ich erkläre es mal. In einer "Configdatei" habe ich den Pfad für ein Bild in einer Variable gespeichert. Z.B. $bildvar = "/images/"
Damit Leute die kaum etwas von PHP verstehen den Pfad auch einfacher und bequemer mit all den anderen Daten in der Config ändern können.
Weiter gehts. Diese Config wird in einer Datei(z.B. datei.php) eingeleßen, die zusätzlich Kontakt zur Datenbank aufnimmt und bestimmte Daten aus einer Tabelle zieht und diese auch problemlos ausgeben kann.
Nun möchte ich aber zu diesen Daten noch ein Bild ausgeben.
Dazu habe ich für das Bild eine extra Spalte angelegt, in der besagten Tabelle und dort den Pfad + Bilddatei angegeben und zwar in PHP. So: $bildvar."datei.gif"

Diese Kombination aus Dateinamen muss ich nun dazu bewegen in meinem Script(datei.php) ausgegeben und auch ausgeführt zu werden.
Mein Script, baut sich folgendermaßen auf:
Dadurch das meine Tabelle mehr Zeilen hat, also mehrere Datensätze, so werden diese nach Zeile geordnet und entsprechend der Zeile, alos ID wird der Datensatz bestimmt und kann so mit seinen gesamten Spalten verarbeitet werden. Die Zeile wird z.B. in $zeile gespeichert. Um aber aus der Zeile nur die Spalte "Text" anzusprechen muss ich folgendermaßen die eingaben durchführen: $zeile->Text So dargestellt wird auch die Zelle Text, der entsprechenden Zeile ausgegeben.

Das Tabellengerüst, was den PHP-Code schmückt ist eben mit HTML gemacht und all das steckt in einem echo. Dort musste ich haufen "\" mit angeben, damit er mir nicht rummeckert. Das funktioniert in Dreamweaver auch wunderbar, denn er markiert den ganzen Syntax entsprechend, so das man erkennt ob man Beispielweiße ein " vergessen hat.
Meine ganzen Tabellenausgaben (z.B.: $zeile->Text) stehen mit dem Tabellengerüßt und werden auch ohne zu meckern ausgegeben.
Außer eben die Bilddatei.
Wie ihr sicher wisst müssen Bilddateien mit IMG-Tag definiert werden. Dies tat ich auch und dort schrieb ich auch meine Datenausgabe für die Imagespalte. So sah es dann ungefähr aus:
Code:
	<img src="$zeile->image">
Er erkannte auch das es sich um den Bezug zur Tabelle handelte. Also $bildvar."datei.gif". Das Bild gab er trotzdem nicht aus und als Bildpfad war nur $bildvar."datei.gif" zu erkennen, aber mit dem Unterschied das anstatt den " nur die Platzhalter % für dieses Zeichen definiert waren. Nun entschied ich mich eben dafür, den direkten Namen für das Bild (datei.gif) in einer Variable ($bildatei) umzuwandeln. So ging ich den Dillema aus den weg. Aber trotzdem wollte er noch nichts ausgeben. Kein Wunder, laut gut gebildeten PHP-Programmierern würde die Funktion eval() fehlen: http://de2.php.net/manual/de/function.eval.php
Auf diese Idee kam ich auch und schrieb sie mit ins Echo hinein. So etwa:
Code:
<img src=\"eval(\"$zeile->image\");\">
Versuchte auch die Methode mit der Gleichsetzung - siehe Beispiel $str=$str in obigen Link.
Die "/" mussten übrigens sein, da er sonst rumgemeckert hätte. Es kann sein das es zuviel oder zuwenig für euch sind, aber so waren sie in meinem Script schon richtig, denn ich musste auch ohne eval welche angeben.

Aber dies funktionierte auch nicht. Scheinbar da er denkt das $zeile->image die zum Ausgeben bestimmten Variablen sind, dabei wurden die eigentlichen Variablen in der Datenbank ausen vor gelassen.
Ich muss selbst zugeben das ich noch nie direkte Scripte bzw. Variabeln in einer Datenbank gespeichert habe und ausgeben musste. Dazu kommt ja noch dieses verzwickte Problem mit der Zeichensetzung hinzu und das sich alles in einem Echo abspielt.
Habt ihr vielleicht einen guten Lösungsvorschlag, bei dem ich nicht den größten Teil meines Scriptes über den Haufen werfen muss?
 
Wenn du unbedingt eval() einsetzen willst, musst du es so machen:

Code:
<? eval ("echo \"<img src=\\\"\".$zeile->image.\"\\\">\";"); ?>

Das Problem bei deinem Code war, dass eval() keine richtige Anweisung enthielt (etwas, das alleine zwischen zwei Semikola stehen kann) und dass du die Escape-Zeichen und Punkte vergessen/falsch gesetzt hast.
Ich würde aber eher dazu raten, eval() wegzulassen, weil die Funktion völlig überflüssig ist und sogar Sicherheitsrisiken birgt.

Code:
<? echo "<img src=\"".$bildvar.$zeile->image."\">"; ?>

So ist der Code kürzer und übersichtlicher, du musst nur die alle Werte in der Spalte image von $bildvar."datei.gif" nach datei.gif ändern.

cya xsheep
 
Original von Prometheus
Die Daten die in der Datenbank zu finden sind, sind aber nicht alle nur einfach Daten, sondern auch PHP-Befehle.
Waß hat PHP-Code in der Datenbank zu ßuchen? In die Datenbank kommen einfache Daten, deren Außwertung erfolgt dann außerhalb via Skript. Eß genügt alßo, den Dateinamen in die DB zu ßchreiben, den Pfad kannßt du dann im Nachhinein bei der Außgabe ergänzen.

Das Tabellengerüst, was den PHP-Code schmückt ist eben mit HTML gemacht und all das steckt in einem echo. Dort musste ich haufen "\" mit angeben, damit er mir nicht rummeckert.
Immer noch kein Freund von Templates? :)

Wenn du es unbedingt mit echo ausgeben willst, kann ich dir die Heredoc-Syntax ans Herz legen. Damit kannst du's dir sparen, die ganzen Quotes zu escapen und außerdem sieht der Quellcode dann sauberer formatiert aus.

Performanter wäre es allerdings, HTML auch als HTML auszugeben und nur an den Stellen, wo was aus PHP kommt, den Parser mit <?php echo $stuff; ?> anzuwerfen.

Bezogen auf dein Beispiel also:

PHP:
<img src="<?php echo $zeile -> image; ?>" alt=""/>
 
Vielen Dank für euren Rat.
@xsheep
Wenn du meinst das es ein großes Sicherheitsrisiko ist - und nach einigen Überlegen kann ich es mir auch schon denken - , so werde ich es auch ohne eval programmieren.
Ohne dieser Funktion funktioniert es ja auch wunderbar:

Original von xsheep
Code:
<? echo "<img src=\"".$bildvar.$zeile->image."\">"; ?>

@LX
:D Es handelt sich hier ja auch erstmal um ein Script womit ich die Programmierung praktisch üben kann.
Um daraus gleich ein Templatekonformes Script zu machen, stecke ich schon zu weit drin. Es wird auch kaum Verwendung haben, denn wie schon erähnt geht es mir mehr um die praktische Übung und kennenlernen der Möglichkeiten was PHP betrifft.
Bevor ich mit einem richtigen Projekt anfange, werde ich mich natürlich an einer sauberen Programmierung mit Funktionen und besserer Übersicht halten.

P.S.: Schau mal auf deine Rechtschreibung - nicht alles wird heutzutage mit ß geschrieben. Auch wenn es für dich cool aussieht, es ließt sich nicht gut.

Das die "s"- Taste im Eimer ist, kannst du mir da sicher nicht erzählen, denn manche Buchstaben sind immernoch mit "s" geschrieben.
Waß hat PHP-Code in der Datenbank zu ßuchen? In die Datenbank kommen einfache Daten, deren Außwertung erfolgt dann außerhalb via Skript. Eß genügt alßo, den Dateinamen in die DB zu ßchreiben, den Pfad kannßt du dann im Nachhinein bei der Außgabe ergänzen.
 
Zurück
Oben