Problem mit preg_replace und mysql_query
Philippo
- php
0 Andreas Dölling0 Philippo
0 seth
Hallo
ich habe einen Text aus dem ich folgendes Muster: [link=76,param=43] herauslesen, und den "Link" dann in nen mysql_query geben. Leider wird dann die \1 aber immer als Zahl 1 interpretiert und nicht als Variabler String der ausgelesen wurde.
preg_replace('@[link=([^"]+),param=([^"]+)]@si', mysql_query("SELECT name FROm test WHERE id='\1'"), $test);
Was mache ich falsch, oder wie kann ich das problem lösen?
Gruß
Philippo
Hallo,
preg_replace('@[link=([^"]+),param=([^"]+)]@si', mysql_query("SELECT name FROm test WHERE id='\1'"), $test);
Was mache ich falsch, oder wie kann ich das problem lösen?
ehrlich gesagt, verstehe ich Deinen ganzen Ansatz nicht (und kann mir auch nicht vorstellen, daß das so funktioniert, wie Du es oben geschrieben hast).
Also, Du hast einen Text, in dem es Zeichenketten à la [link=76,param=43] gibt. Diese Zeichenketten möchtest herauslesen und in einer SQL-Query verwenden.
Ich würde das Problem so angehen:
preg_match('@[link=([^"]+),param=([^"]+)]@si', $text, $matches);
$sql = "SELECT name FROM test WHERE id='".$matches[0]."'"
$result = mysql_query($sql);
...
Ciao,
Andreas
Moin,
ehrlich gesagt, verstehe ich Deinen ganzen Ansatz nicht
ich habe einen Text mit "[link=76,param=43]" welcher ersetzt werden soll , und zwar mit einem Text aus einer Datenbank!
Dein Ansatz funktioniert leider bei mir gearde nicht..
Gruß
philippo
hi,
ehrlich gesagt, verstehe ich Deinen ganzen Ansatz nicht
ich habe einen Text mit "[link=76,param=43]" welcher ersetzt werden soll , und zwar mit einem Text aus einer Datenbank!
Wenn Andreas dein _Vorhaben_ nicht verstanden hätte, hätte er das sicher gesagt.
Er sagte aber, dass er deinen (Lösungs-)_Ansatz_ nicht versteht - und ich ehrlich gesagt auch nicht. Wie kommst du beispielsweise auf die Idee, als zweiten Parameter von preg_replace den Funktionsnamen mysql_query hinzuschreiben ...?
gruß,
wahsaga
Hallo,
Er sagte aber, dass er deinen (Lösungs-)_Ansatz_ nicht versteht - und ich ehrlich gesagt auch nicht.
genau deswegen habe ich ihn ja auch nochmal erklärt ;-)
Also mein erster pre_replace Paramter ist das Suchmuster, nun hatte ich zuerst als zweiten Paramater "<a href="index.php?id=\16param=\2", welches mir den Text durchsucht und ja auch alles Automatisch so wie ich es will schön umwandelt.
Nun wollte ich das ganze etwas erweitern in "<a href="index.php?id=\16param=\2&folder=", wobei ich den "Folder" aus einer Datenbank auslese, welche allerings abhängig von der ersetzten ID, also dem "\1" String ist. Deswegen schrieb ich mysql_query als zweiten Paramter...
Gruß
philippo
hi,
Er sagte aber, dass er deinen (Lösungs-)_Ansatz_ nicht versteht - und ich ehrlich gesagt auch nicht.
genau deswegen habe ich ihn ja auch nochmal erklärt ;-)
Nein, hast du nicht - du hast lediglich dein Ziel noch mal genannt.
Das folgende ist die Erklärung deines Ansatzes:
Also mein erster pre_replace Paramter ist das Suchmuster, nun hatte ich zuerst als zweiten Paramater "<a href="index.php?id=\16param=\2", welches mir den Text durchsucht und ja auch alles Automatisch so wie ich es will schön umwandelt.
Nun wollte ich das ganze etwas erweitern in "<a href="index.php?id=\16param=\2&folder=", wobei ich den "Folder" aus einer Datenbank auslese, welche allerings abhängig von der ersetzten ID, also dem "\1" String ist. Deswegen schrieb ich mysql_query als zweiten Paramter...
... der aber leider in der Form reichlich unsinnig ist.
gruß,
wahsaga
Hallo,
ich habe einen Text mit "[link=76,param=43]" welcher ersetzt werden soll , und zwar mit einem Text aus einer Datenbank!
ah, also andersherum, als ich es verstanden hatte (und als Du es oben erklärt hattest).
Dann versuche es doch so:
// 1.: die ID aus dem Text holen
preg_match('@[link=([^"]+),param=([^"]+)]@si', $text, $matches);
// 2.: zu der ID den Namen aus der DB holen
$sql = "SELECT name FROM test WHERE id='".$matches[0]."'"
$result = mysql_query($sql);
$dataset = mysql_fetch_assoc($result);
// 3.: die ID im Text durch den Namen ersetzen
$text = preg_replace('@[link=([^"]+),param=([^"]+)]@si', $dataset['name'], $text);
Mir kommt das zwar alles ein bißchen schwurbelig vor - aber ich kenne den Kontext Deines Problems nicht. Es sollte so jedenfalls klappen.
(Alternativ könntest Du tatsächlich, wie ein anderer User ja schon vorschlug, mit preg_replace_callback() arbeiten.)
Ciao,
Andreas
gudn tach!
Was mache ich falsch, oder wie kann ich das problem lösen?
du koenntest den e-modifier (siehe php-manual: pattern modifiers oder preg_replace) benutzen oder preg_replace_callback einsetzen.
ausserdem solltest du dich noch ein wenig mit mysql_query (und deren rueckgabewert) befassen.
prost
seth