Moin!
In einer Datenbank habe ich in einer BLOB-Spalte Text stehen.
Mittels PHP moechte ich die Zeilen auslesen und dann im Blob-Bereich
enthaltene Variablen (die stehen da in dieser Form drinnen: $variablenname) mit Inhalt fuellen. Doch leider wird mir immer nur der Variablenname angezeigt. Ich habe es auch schon mit "$n" und und '$n' ausprobiert (und immer mit und ohne ) - doch es hat nicht
funktioniert...Habe ich da einen gedanklichen Fehler gemacht?
Ja. Wenn du in einem PHP-Skript schreibst:
echo "Hallo, $vorname! Wie gehts?";
dann wird PHP erkennen, dass du doppelte Anführungszeichen benutzt hast, und den speziellen Variablen-Ersetzungs-Modus ausführen, der den Inhalt der Variablen $vorname an die Stelle setzt, wo $vorname steht.
Wenn du aus der Datenbank Text liest, ist das wirklich literaler Text: Ein Zeichen namens "$", ein Zeichen namens "v", ein Zeichen "o", "r", "n", "a", "m", "e" - alles wird Zeichen für Zeichen ausgegeben. Und das muß auch so sein, denn ansonsten könntest du ja nie z.B. sowas in der DB speichern: "Whisky kostet im Saloon $1" - wenn $1 immer mit dem Inhalt der Variablen $1 ersetzt würde, wäre das schon doof.
Wie kann ich ihn umschiffen?
Du mußt im aus der Datenbank ausgelesenen String nach den dort enthaltenen Variablen suchen und sie ersetzen lassen. Es gibt einen komplizierten und einen einfachen (und mit Sicherheit noch tausend andere) Weg.
Der komplizierte: Schreibe dir eine Funktion, die das für dich erledigt. Bedenke dabei insbesondere, dass du nicht einfach mehrfach str_replace() auf den Gesamtstring anwenden darfst. Was ist, wenn in $vorname der Name "$nachname" drinsteht, und beim zweiten Ersetzen wird $nachname mit "Müller" ersetzt - $vorname $nachname würde dann zuerst zu $nachname $nachname und dann zu Müller Müller - es hätte aber $nachname Müller heißen müssen.
Der zweite Weg: Nutze die Funktion eval(). Sie führt dynamisch generierten Code aus, beispielsweise auch den, der im Prinzip in deiner Datenbank drinsteht. Könnte sein, dass du noch Code drumherumbasteln mußt, beispielsweise echo für die Ausgabe. Allerdings (und das ist eben das dumme dabei) hast du dann wieder das Whisky-Problem, d.h. du mußt Dollar-Zeichen, die echt so gemeint sind, escapen (mit Backslash), damit sie wirklich erscheinen. Andernfalls kriegst du Probleme.
- Sven Rautenberg
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)