[REGEX] Platzhalter in Datenbank ersetzen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [REGEX] Platzhalter in Datenbank ersetzen

    Hallo zusammen

    ich grübel schon seit ein paar Stunden über ein Problem nach. Von der Art warscheinlich wie hier nur halt mit einer DB deshalb auch das neue Thema (also bitte nicht schlagen ).

    Problem:
    Ich will Platzhalter in der Art: [[meinWord]] Die sich im Text befinden, der ebenfalls in einer DB gespeichert ist mit einem Link unterlegen.


    Beispiel:
    DB-Text: Bitte nutzt [[Google]] als Suchmaschine
    wird zu:
    Bitte nutzt :google als Suchmaschine


    Ich möchte jetzt nur nicht sowas wie:
    $returncontent=str_replace("[[irgendwas]]","irgendwas_mit_link",$returncontent);

    für jedes Suchwort anlegen müssen.


    Die DB sieht bei mir so aus:

    2 Spalten:
    1. Suchwort
    2. Link

    hat jemand eine Idee wie man das bewerkstelligen könnte? Oder auch nur einen kleinen Tip der mir weiterhelfen könnte? Denn mir fällt echt nix mehr ein :dontknow

    Edit:
    Beispiel hinzugefügt
    Last edited by Bastian_W; 03-06-2004, 22:16.
    require_once('gehirn_v_02.php');

  • #2
    da ich mich mit strings noch nich so auseinandergesetzt habe, halte ich str_replace am sinnvollsten...

    also ich würde
    alle suchwörter aus der DB selektieren und in nen array packen

    $array['id'][]
    $array['suchwort'][]
    $array['link'][]

    so dann durchläufste mit ner schleife alle suchwörter und guckst ob diese im content vorhanden sind... wenn ja --> strreplace

    also

    for(....)
    {
    $text .= str_replace("[[".$array['suchwort'][$i]."]]", $array['suchwort'][$i], $text)
    }

    ansonsten mussu dir ne andere variante ausdenken

    edit:
    ich seh grad dass deine tablle nur 2 spalten hat...
    ... ich empfehle dir Primärschlüssel zu verwenden, sonst wirds irgendwann schwer deine Datensätze eindeutig identifizieren zu können

    hoffe konnte helfen
    Marskuh

    Comment


    • #3
      Hm,

      ist auf jedenfall mal eine gute Idee.

      Wenn ich es richtig verstanden habe dann soll ich die Schleife solange durchlaufen lassen wie ich einträge in der DB habe... halt anhand des Primärschlüssel. Die Idee klingt echt mal nicht schlech. Dauert aber je nach einträgen ziemlich lange oder???
      require_once('gehirn_v_02.php');

      Comment


      • #4
        ich denke mal, dass sich letztendlich da nich sehr viel tun wird, denn andere funktionen werden es so ähnlich amchen müssen...
        es is immer nen suchen & ersetzen prinzip.

        d.h. man muss erst nen datensatz finden und ihn dann ersetzen.
        die diversen anderen funktoinen die es noch gibt machen das leben vll. einfacher, aber ich kann mirnich vorstellen, dass sie sehr viel schneller sind

        kann mich aber auch irren...
        ... kannstes ja ersmal so ausprobieren

        hab da noch was interessantes gefunden

        preg_replace()...
        guckst du auf www.php.net --> preg_replace, dann findeste paar infos darüber.
        das könnte doch schon das sein, was du suchst.

        greetz
        Marskuh

        Comment


        • #5
          Original geschrieben von Bastian_W
          Dauert aber je nach einträgen ziemlich lange oder???

          du kannst ja auch nur die suchwörter in ein array speichern und bereits bei der mysql_abfrage schauen ob das suchwort enthalten ist. dann haste weniger datensätze.

          SELECT * FROM table WHERE suchwort like "%Wort%"

          jperl

          Comment


          • #6
            @jperl

            das würde aber vorraussetzen das ich das Suchwort im Text kennen würde... dafür müßte ich dann aber wiederrum eine möglichkeit finden alle Wörter in solchen Klammern [[ ]] im Text auszulesen und als String oder so zu speichern. Mir fällt da aber spontan keine Idee zu ein :-(
            require_once('gehirn_v_02.php');

            Comment


            • #7
              @Bastian_W

              das mal nur als anregung


              Code:
              SELECT suchwort, ersetzwort FROM tabelle
              
              while mysql_fetch_array()
              {
                array_s[] = row->suchwort
                array_r[] = row->ersetzwort
              }
              
              echo str_replace(array_s, array_r, text)
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Comment


              • #8
                @Abraxax

                danke!!! Vielen DANK

                Mit deiner Anregung habe ich mal fogendes gebaut:

                PHP Code:
                $result mysql_query("SELECT `wort`, `http` FROM `$db_table`");

                while (
                $row mysql_fetch_array($result))   
                {
                $returncontent str_replace("[[".$row[0]."]]",
                "<a href=".$row[1].">".$row[0]."</A>"$returncontent);
                }
                echo 
                $returncontent
                UND das läuft ziemlich gut...

                Nun aber noch ein paar Fragen:
                Was bedeutet bei dir: $array_s[] = $row->suchwort???
                Wird mein Beispiel oben die DB stark belasten und würde es eine bessere möglichkeit geben?


                EDIT:
                umbruch by Abraxax
                Last edited by Abraxax; 04-06-2004, 20:33.
                require_once('gehirn_v_02.php');

                Comment


                • #9
                  $array_s[] = $row->suchwort; heisst, dass der nen array erstellt und jedesmal wenn er die while-schleife durchläuft hängt er ein neues arrayelement hinten an.
                  wenn du also 3 datenbankeinträge hast wird die whileschleife 3 x durchlaufen und er erzeugt dir nen array mit 3 feldern

                  z.b. so
                  $array_s[0] = "Browser";
                  $array_s[1] = "Maus";
                  $array_s[2] = "Analphabet";

                  Comment


                  • #10
                    genau. und erst NACH DER SCHLEIFE wird str_replace() NUR EINMAL eingesetzt.

                    du machst es jetzt mit jedem durchlauf. die array-lösung sollte schneller sein.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Comment


                    • #11
                      und weil du das ohne mucken selber probiert hast, was scheinbar in diesem forum nciht selbstverständlich zu sein scheint, bekommst du von mir auch die anpassung.

                      PHP Code:
                      $result mysql_query('SELECT `wort`, `http` FROM `'.$db_table.'`') or die(mysql_error());

                      $array_s $array_r = array();
                      while (
                      $row mysql_fetch_array($result))
                      {
                          
                      $array_s[] = '[['.$row[0].']]';
                          
                      $array_r[] = '<a href="'.$row[1].'">'.$row[0].'</a>';
                      }

                      $returncontent str_replace($array_s$array_r$returncontent);

                      echo 
                      $returncontent

                      und schaue dir den code genau an. es ist nicht alles auf den ersten blick zu sehen. also genau schauen und daraus lernen. ;-)
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Comment


                      • #12
                        Hm, wenn ich solche Fragen stelle ist es eigentlich auch selbstverständlich das ich mich um eine Lösung bemühe (require_once('gehirn_v_02.php'); ). Sonst kann ich bei www.scriptlance.com ja auch ein Script gegen Geld erstellen lassen.

                        Bezüglich der Änderung (Danke )
                        Sowas ähnliches habe ich mir auch schon gedacht und versucht. Aber mir war die Funktionsweise von:
                        array_s[] = row->suchwort
                        einfach nicht klar.

                        Ich bin nur noch die ganze Zeit am überlegen was das hier: $array_s = $array_r = array();
                        aussagt. Definierst du damit das $array_s + $array_r Arrays sind und kein String???
                        require_once('gehirn_v_02.php');

                        Comment


                        • #13
                          Original geschrieben von Bastian_W
                          Ich bin nur noch die ganze Zeit am überlegen was das hier: $array_s = $array_r = array();
                          aussagt. Definierst du damit das $array_s + $array_r Arrays sind und kein String???
                          ja. ich könnte das auch so schreiben ....
                          PHP Code:
                          $array_s = array();
                          $array_r = array(); 
                          ... aber man ist ja faul.

                          damit sage ich nur, dass die beiden variablen vom typ array sind. ich find's sauber(er) so. ohne dem würde es aber auch funktionieren. ;-)
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Comment


                          • #14
                            Original geschrieben von Marskuh
                            ich seh grad dass deine tablle nur 2 spalten hat...
                            ... ich empfehle dir Primärschlüssel zu verwenden, sonst wirds irgendwann schwer deine Datensätze eindeutig identifizieren zu können
                            Kannst du das mit dem Primärschlüssel mal genauer erklären? Ich weiß das ein Primärschlüssel dazu verwendet wird einen Eintrag eindeutig zu identifizieren (Normalerweise mache ich das mit "auto_increment"). Da ich in meinem Script ja nirgendwo so eine "EintragsID" verwende um etwas abzufragen denke ich mal das es überflüssig ist (Datenbankbalast?!?!). Oder liege ich da falsch????

                            Oder sollte ich mein Script dahingegen ändern? Wüßte nur so spontan nicht wie.

                            @Abraxax
                            Ah ok danke dann lag ich ja mal nicht falsch.
                            require_once('gehirn_v_02.php');

                            Comment


                            • #15
                              auto_inc != PK
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Comment

                              Working...
                              X