Philippo: Problem mit preg_replace und mysql_query

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

  1. 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

    --
    "Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)
    1. 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

      1. 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

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. 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

          1. 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

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. 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

        --
        "Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)
  2. 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