Variablen oder auch preg_match
Frank
- php
Hi,
da ist mal wieder 'ne Sache, die verstehe ich nicht :o(
Angenommen ich habe eine Variable
$sess = "12345";
Dann mache ich eine SQL-Abfrage
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.
$Tree enthält leider nur "<h5><a href='/nav.php?db=F&ID=F&sess=$sess'>Kategorie</a></h5>"
_________
Dachte ich: OK, machste halt noch 'ne Ersetzung:
$Tree = preg_match("/$sess/",$sess,$Tree);
Funktioniert aber auch nicht,
egal, ob ich das Such-Dollarzeichen \ maskiere oder nicht.
Wenn ich es rausnehme
$Tree = preg_match("/sess/",$sess,$Tree);
führt PHP die Ersetzung durch.
(Also es liegt nicht an einem fehlenden global $sess; oder so ...)
_________
Was mache ich falsch
oder was wäre der eleganteste Weg,
dass sich $sess möglichst schon bei der Abfrage durch 12345 ersetzt ?
Danke, Frank
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
Hi Wahsaga,
es ist spät und ich bin ziemlich durch,
aber bevor ich ein DANKE vergesse ... :o)
Wäre ja fatal, wenn alle Daten, die von irgendwoher reingeschneit kommen, als PHP-Code interpretiert würden!
Das hatte ich eigentlich gehofft !!!
$Tree = preg_match("/$sess/",$sess,$Tree);
Du meinst vermutlich preg_replace.
Jou, so hatte ich es auch im Code
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
Guuute Seite, Danke, hätte bei meinen Versuchen aber klappen sollen ...
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.)
Jou :o)
Ü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.
Ja, ich habe 'ne Krücke gefunden!
Aber die ist schonmal 1000mal besser, als die vorherigen zig SQL-Abfragen:
Gibt's da jetzt noch 'ne Unterkategorie?
Oder gibt's hierzu noch 'ne Oberkategorie?
Unterm Strich: Vielen Vielen Dank, Frank :o)