wahsaga: Variablen oder auch preg_match

Beitrag lesen

hi,

Es gibt in der DB ein Feld TreeOberKat mit den Daten:
"<a href='/nav.php?db=F&ID=F$sess'>Kategorie</a>"

$ass = mysql_fetch_assoc($headres);
$Tree = "<h5>".$ass[TreeOberKat]."</h5>";

Jetzt hatte ich eigentlich die Hoffnung,
das $sess würde sich automatisch durch 12345 erstzen.
Tut es aber nicht.

Natürlich nicht.
Wäre ja fatal, wenn alle Daten, die von irgendwoher reingeschneit kommen, als PHP-Code interpretiert würden!

Dachte ich: OK, machste halt noch 'ne Ersetzung:
$Tree = preg_match("/$sess/",$sess,$Tree);

Du meinst vermutlich preg_replace.

Funktioniert aber auch nicht,
egal, ob ich das Such-Dollarzeichen \ maskiere oder nicht.

Wenn du dein error_reporting vernünftig auf E_ALL eingestellt hättest, würde PHP dir an dieser Stelle mitteilen, dass die Variable $sess, die im String "/$sess/", den du an die Funktion übergibst, nicht definiert ist. (Bzw., sollte sie es doch sein, weil diese vorher bereits verwendet wird, dann würde deren _Inhalt_ an der Stelle eingesetzt.)

Beschäftige dich damit, wann Variablen in Strings gesucht und ersetzt werden, und wann nicht: http://www.php.net/manual/de/language.types.string.php
Und dann wähle eine geeignetere Notation für das Textliteral, welches du der Funktion als Parameter übergeben willst.

Was mache ich falsch
oder was wäre der eleganteste Weg,
dass sich $sess möglichst schon bei der Abfrage durch 12345 ersetzt ?

Von eval möchte im gleichen Atemzug, in dem ich es erwähne, auch stark abraten. (Damit könnte man Daten als PHP parsen lassen, aber "schön" ist das nicht.)

Überlege dir, ob du die Daten vielleicht anders ablegen kannst - bspw. in einem Format, welches sprintf() versteht, so dass du damit nachher Platzhalter durch Werte ersetzen lassen kannst.
Es per preg_replace/str_replace zu machen, ist aber auch in gängiger Weg in Template-Systemen.

gruß,
wahsaga

--
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }