problem mit preg_split

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • problem mit preg_split

    guten tag
    ich brauch umbedingt ne kleine hilfe
    alsoooo, ich habe ein gallerysystem (php,mysql) in dem es ein search-feld gibt, um bestimmte bilder direkt nach keywords zu suchen und zu finden. das funktioniert auch wunderbar solange man in das suchfeld nur ein wort schreibt wie zb. " Haus", sobald man aber rein schreibt "haus mit baum" werden die einzelnen worte automatisch zusammen gezogen zu einem wort "hausmitbaum". außerdem kann man keine unterstriche eintragen, wenn man in das suchfeld z.b eingibt "A_0007" springt es um auf "A0007"

    ich kenne mich halt nicht so sehr mit php aus, denke aber, dass es an diesem scriptteil liegen muss:

    function search($keywords_get)
    $keywords_split = preg_split("/[s,]+/", $keywords_get);


    danke für die hilfe ...

  • #2
    Nö, die von dir beschriebenen Symptome liegen sicher nicht an dem Stückchen Quellcode, den du gezeigt hast.

    Also musst du wohl mehr zeigen ...
    Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

    Kommentar


    • #3
      ... danke für die schnelle antwort, hier ist der ganze code:
      <?php
      class Catalog
      {
      function Catalog($config,$db,$dbtable_categs,$dbtable_items,$admin=false,$htpf=array())
      {
      //echo " ".basename(__FILE__).":".__LINE__;
      $this->items = new CatalogItemController($config,$db,$dbtable_items,$admin,$htpf);
      $this->categs = new CatalogCategController($config,$db,$dbtable_categs,$admin,$htpf);
      $this->admin = $admin;
      $this->postget = $_POST?$_POST:$_GET;
      $this->config = $config;
      $this->db = $db;
      }

      function think()
      {
      switch (@$this->postget["action"])
      {
      case $this->categs->dbtable."_clean_submit":$this->categ_clean_submit($this->postget["id"]);break;
      case $this->categs->dbtable."_delete_submit":$this->categ_delete_submit($this->postget["id"]);break;
      case $this->categs->dbtable."_update_submit":$this->categs->update($this->postget);break;
      }
      $this->items->think();
      //$this->categs->think();
      }

      function categs_gets($id=0)
      {
      //echo " ".basename(__FILE__).":".__LINE__;
      $result = $this->categs->gets($id);
      return $this->categs_gets_recursive($result);
      }

      //count categories items
      function categs_gets_recursive($categs=array())
      {
      //echo " ".basename(__FILE__).":".__LINE__;
      for($i=0;$i<count($categs);$i++)
      {
      $categs[$i]['total'] = $this->items->count_("WHERE categ_id=".$categs[$i]['id']);//10;//$this->count_total($result[$i]['id']);
      $categs[$i]['childs'] = $this->categs_gets_recursive($categs[$i]['childs']);
      foreach($categs[$i]['childs'] as $child_cat)
      {
      @$categs[$i]['subtotal'] += $child_cat['subtotal'];
      }
      @$categs[$i]['subtotal'] += $categs[$i]['total'];
      }
      return $categs;
      }

      function items_gets_by_categ($categ_id=0)
      {
      //echo " ".basename(__FILE__).":".__LINE__;
      //return $this->items->gets("WHERE categ_id=".(int)$categ_id);
      $conditions = "";
      $conditions = " WHERE categ_id IN (".(int)$categ_id;
      if(!$this->admin)
      {
      $childs = $this->categs->get_subcategs((int)$categ_id);
      if(count($childs))
      {
      foreach($childs as $child_categ)
      {
      $conditions .= ", ".$child_categ;
      }
      }
      }
      $conditions .= " ) ";
      return $this->items->gets($conditions);
      }

      function get_default_categ_id()
      {
      echo " ".basename(__FILE__).":".__LINE__;
      $categ_id = 0;
      if(@$this->postget["id"]>0)
      {
      $item = $this->items->get(" WHERE id=".$this->postget["id"]);
      return $item["categ_id"];
      }
      else if($this->admin)
      {
      $categ = $this->categs->get();
      return $categ["id"];
      }
      else
      return null;
      }

      function categ_clean_submit($categ_id)
      {
      // $this->items->config["pagination"] = 0;
      $items = $this->items->model->gets(" WHERE categ_id=".$categ_id);
      foreach($items as $item)
      {
      $this->items->delete($item["id"]);
      }
      }

      function categ_delete_submit($categ_id)
      {
      $subcategs = $this->categs->get_subcategs($categ_id);
      $subcategs[] = $categ_id;
      foreach($subcategs as $subcateg_id)
      {
      $this->categ_clean_submit($subcateg_id);
      $this->categs->delete($subcateg_id);
      }

      }

      function _getCount_search($keywords)
      {
      $sql = "SELECT COUNT(*) FROM ".$this->items->model->dbtable." AS i LEFT JOIN ".$this->categs->model->dbtable." AS c ON i.categ_id=c.id WHERE i.is_enabled='1' AND (i.title REGEXP '$keywords' OR i.comment REGEXP '$keywords' OR i.description REGEXP '$keywords' OR i.description REGEXP '$keywords') AND (c.is_enabled='1' OR i.categ_id=0) ORDER BY i.rank,i.title,i.id ";
      $result = $this->db->query($sql);
      //var_dump($result);
      if($result)
      return $result[0]["COUNT(*)"];
      return null;
      }

      function _get_items_search($offset,$limit,$keywords)
      {
      $sql = "SELECT i.* FROM ".$this->items->model->dbtable." AS i LEFT JOIN ".$this->categs->model->dbtable." AS c ON i.categ_id=c.id WHERE i.is_enabled='1' AND (i.title REGEXP '$keywords' OR i.comment REGEXP '$keywords' OR i.description REGEXP '$keywords') AND (c.is_enabled='1' OR i.categ_id=0) ORDER BY i.rank,i.title,i.id LIMIT $offset,$limit";
      $html["items"] = $this->db->query($sql);
      return($html["items"]);
      }

      function search($keywords_get)
      {
      //echo $keywords_safe = htmlspecialchars($keywords_get, ENT_QUOTES);
      $keywords_split = preg_split("/[\s,]+/", $keywords_get);
      $keywords = "";
      foreach($keywords_split as $keyword)
      $keywords .= trim($keyword)."|";
      $keywords = substr($keywords,0,strlen($keywords)-1);
      $html = array();
      //if($keywords)
      {

      $html["pagination"] = Misc:agination($this->_getCount_search($keywords),$this->config["pagination"],@$this->postget["page"]);
      $html["items"] = $this->_get_items_search($html["pagination"]["offset"], $this->config["pagination"],$keywords);
      }
      return $html;
      }

      function categs_get()
      {
      $categ_id = 0;
      if(isset($this->postget["categ_id"])) $categ_id = (int)$this->postget["categ_id"];
      if(@(int)$this->postget["id"])
      {
      $id = (int)$this->postget["id"];
      $result = $this->items->get("WHERE id=".$id );
      $categ_id = $this->items->model->fields["categ_id"];
      }
      $result = $this->categs->get("WHERE id=".$categ_id);
      if($result)
      return $result;
      return null;
      }

      }
      ?>

      ...und hier is der code vom search-form, vielleicht liegt ja auch hier das problem:

      <style type="text/css">
      <!--
      .Stil2 {font-family: Arial, Helvetica, sans-serif; color: #666666; font-size: 12px;}
      -->
      </style>
      <table class="tbl">
      <tr><th align="left">Nach Bildern suchen:</th>
      </tr>
      <tr><td align="left">
      <form method="get" action="index.php">
      <input type="text" name="search" value="<?php echo isset($_GET["search"])?htmlspecialchars($_GET["search"], ENT_QUOTES):"";?>">
      <input type="submit" value="Go">
      </form>
      </td></tr>
      </table>

      Kommentar


      • #4
        ick weeses doch ohh ni

        Kommentar


        • #5
          Original geschrieben von hoellensturz
          ick weeses doch ohh ni
          OffTopic:
          drängeln bringt dich hier nicht nach vorne.

          und solange du deinem code nicht ein paar [php]-tags verpasst, wird das mit der hilfe auch eher wenig
          Kissolino.com

          Kommentar


          • #6
            easy, war aber garüberhaupt nicht als drängeln gemeint ... bin das erstemal in so einem forum

            wie meinstn das mit den php-tags ?
            ich probier ma rum ... nen schönen abend noch, danke

            Kommentar


            • #7
              PHP-Code:
              <?php 
              class Catalog
              {
              function 
              Catalog($config,$db,$dbtable_categs,$dbtable_items,
              $admin=false,$htpf=array())
              {
              //echo " ".basename(__FILE__).":".__LINE__;
              $this->items = new CatalogItemController($config,$db,$dbtable_items,
              $admin,$htpf); 
              $this->categs = new CatalogCategController($config,$db,$dbtable_categs,
              $admin,$htpf);
              $this->admin $admin;
              $this->postget $_POST?$_POST:$_GET;
              $this->config $config;
              $this->db $db;
              }

              function 
              think()
              {
              switch (@
              $this->postget["action"])
              {
              case 
              $this->categs->dbtable."_clean_submit":$this->categ_clean_submit
              ($this->postget["id"]);break;
              case 
              $this->categs->dbtable."_delete_submit":$this->categ_delete_submit
              ($this->postget["id"]);break;
              case 
              $this->categs->dbtable."_update_submit":$this->categs->update
              ($this->postget);break;
              }
              $this->items->think(); 
              //$this->categs->think(); 
              }

              function 
              categs_gets($id=0)
              {
              //echo " ".basename(__FILE__).":".__LINE__;
              $result $this->categs->gets($id);
              return 
              $this->categs_gets_recursive($result);
              }

              //count categories items
              function categs_gets_recursive($categs=array())
              {
              //echo " ".basename(__FILE__).":".__LINE__;
              for($i=0;$i<count($categs);$i++)

              $categs[$i]['total'] = $this->items->count_("WHERE categ_id=".$categs[$i]
              [
              'id']);//10;//$this->count_total($result[$i]['id']);
              $categs[$i]['childs'] = $this->categs_gets_recursive($categs[$i]['childs']);
              foreach(
              $categs[$i]['childs'] as $child_cat)
              {
              @
              $categs[$i]['subtotal'] += $child_cat['subtotal'];
              }
              @
              $categs[$i]['subtotal'] += $categs[$i]['total'];
              }
              return 
              $categs;
              }

              function 
              items_gets_by_categ($categ_id=0)
              {
              //echo " ".basename(__FILE__).":".__LINE__;
              //return $this->items->gets("WHERE categ_id=".(int)$categ_id);
              $conditions "";
              $conditions " WHERE categ_id IN (".(int)$categ_id
              if(!
              $this->admin)

              $childs $this->categs->get_subcategs((int)$categ_id);
              if(
              count($childs))
              {
              foreach(
              $childs as $child_categ)
              {
              $conditions .= ", ".$child_categ;


              }
              $conditions .= " ) ";
              return 
              $this->items->gets($conditions); 
              }

              function 
              get_default_categ_id()
              {
              echo 
              " ".basename(__FILE__).":".__LINE__;
              $categ_id 0;
              if(@
              $this->postget["id"]>0)
              {
              $item $this->items->get(" WHERE id=".$this->postget["id"]);
              return 
              $item["categ_id"];
              }
              else if(
              $this->admin)
              {
              $categ $this->categs->get();
              return 
              $categ["id"];
              }
              else
              return 
              null;
              }

              function 
              categ_clean_submit($categ_id)
              {
              // $this->items->config["pagination"] = 0;
              $items $this->items->model->gets(" WHERE categ_id=".$categ_id);
              foreach(
              $items as $item)
              {
              $this->items->delete($item["id"]);
              }
              }

              function 
              categ_delete_submit($categ_id)
              {
              $subcategs $this->categs->get_subcategs($categ_id);
              $subcategs[] = $categ_id;
              foreach(
              $subcategs as $subcateg_id)
              {
              $this->categ_clean_submit($subcateg_id);
              $this->categs->delete($subcateg_id);
              }

              }

              function 
              _getCount_search($keywords)
              {
              $sql "SELECT COUNT(*) FROM ".$this->items->model->dbtable.
              AS i LEFT JOIN "
              .$this->categs->model->dbtable." AS c ON i.categ_id=c.id 
              WHERE i.is_enabled='1' AND (i.title REGEXP '
              $keywords' OR i.comment 
              REGEXP '
              $keywords' OR i.description REGEXP '$keywords' OR i.description 
              REGEXP '
              $keywords') AND (c.is_enabled='1' OR i.categ_id=0) 
              ORDER BY i.rank,i.title,i.id "
              ;
              $result $this->db->query($sql);
              //var_dump($result);
              if($result)
              return 
              $result[0]["COUNT(*)"];
              return 
              null;
              }

              function 
              _get_items_search($offset,$limit,$keywords)
              {
              $sql "SELECT i.* FROM ".$this->items->model->dbtable.
              AS i LEFT JOIN "
              .$this->categs->model->dbtable." AS c ON i.categ_id=c.id 
              WHERE i.is_enabled='1' AND (i.title REGEXP '
              $keywords' OR i.comment 
              REGEXP '
              $keywords' OR i.description REGEXP '$keywords') 
              AND (c.is_enabled='1' OR i.categ_id=0) ORDER BY i.rank,i.title,i.id 
              LIMIT 
              $offset,$limit";
              $html["items"] = $this->db->query($sql);
              return(
              $html["items"]);
              }

              function 
              search($keywords_get)
              {
              //echo $keywords_safe = htmlspecialchars($keywords_get, ENT_QUOTES); 
              $keywords_split preg_split("/[s,]+/"$keywords_get);
              $keywords "";
              foreach(
              $keywords_split as $keyword)
              $keywords .= trim($keyword)."|";
              $keywords substr($keywords,0,strlen($keywords)-1);
              $html = array();
              //if($keywords)
              {

              $html["pagination"] = Misc:agination($this->_getCount_search($keywords),
              $this->config["pagination"],@$this->postget["page"]);
              $html["items"] = $this->_get_items_search($html["pagination"]["offset"], 
              $this->config["pagination"],$keywords);
              }
              return 
              $html
              }

              function 
              categs_get()

              $categ_id 0;
              if(isset(
              $this->postget["categ_id"])) $categ_id = (int)$this->
              postget["categ_id"];
              if(@(int)
              $this->postget["id"]) 
              {
              $id = (int)$this->postget["id"];
              $result $this->items->get("WHERE id=".$id );
              $categ_id $this->items->model->fields["categ_id"]; 

              $result $this->categs->get("WHERE id=".$categ_id);
              if(
              $result)
              return 
              $result;
              return 
              null;
              }

              }
              ?>
              Zuletzt geändert von hoellensturz; 30.03.2009, 18:44.

              Kommentar


              • #8
                Und jetzt liest du bitte noch mal die Regeln, und brichst den Code dann so um, dass man nicht meterweit querscrollen muss.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Na, das mit den Tags hat doch schonmal intuitiv ganz gut geklappt. Wenn du dir jetzt noch schnell unsere Regeln durchliest, dann sollte das auch noch richtig klappen. Das sind so die Basics, damit es in einem Forum klappt. Danke!

                  Kommentar


                  • #10
                    so ?

                    Kommentar


                    • #11
                      Danke,

                      nur eine Spur von nem Ansatz wäre gut. Geh nicht davon aus, dass hier jemand die Zeit hat, hunderte von Zeilen Quellcode zu lesen.

                      Meine Vermutung, ohne den Quellcode gelesen zu haben, ist dass du auch an den SQL-Queries anpassen musst und schlimmstenfalls sogar das Datenbankmodell. Aber wie gesagt, ich kann mir nicht den ganzen Quellcode reinziehen.

                      Kommentar


                      • #12
                        meine vermutung war ja , dass dieser teil geändert werden muss

                        preg_split("/[s,]+/, ...


                        PHP-Code:
                        function search($keywords_get)
                        {
                        //echo $keywords_safe = htmlspecialchars($keywords_get, ENT_QUOTES); 
                        $keywords_split preg_split("/[s,]+/"$keywords_get);
                        $keywords "";
                        foreach(
                        $keywords_split as $keyword)
                        $keywords .= trim($keyword)."|";
                        $keywords substr($keywords,0,strlen($keywords)-1);
                        $html = array();
                        //if($keywords) 

                        Kommentar


                        • #13
                          ... oder kann es am eigendlichen serach-form selber liegen:

                          PHP-Code:
                          <style type="text/css">
                          <!--
                          .Stil2 {font-family: Arial, Helvetica, sans-serif; color: #666666; font-size: 12px;}
                          -->
                          </style>
                          <table class="tbl">
                          <tr><th align="left">Nach Bildern suchen:</th>
                          </tr>
                          <tr><td align="left">
                          <form method="get" action="index.php">
                          <input type="text" name="search" value="<?php echo isset
                          (
                          $_GET["search"])?htmlspecialchars($_GET["search"], ENT_QUOTES):"";?>">
                          <input type="submit" value="Go">
                          </form>
                          </td></tr>
                          </table>
                          hier vielleicht ... ["search"])?htmlspecialchars($_GET["search"], ENT_QUOTES):
                          EDIT:
                          php-tags sponsored by kropff. und bitte halte dich jetzt mal daran.
                          Zuletzt geändert von Kropff; 30.03.2009, 20:17.

                          Kommentar


                          • #14
                            Vermuten ist wie raten...

                            hast du mal versucht, nachzuvollziehen was der Code macht? Scheint mir nicht, denn sonst hättest du zumindest mal versucht, das Komma im Pattern durch ein Leerzeichen zu ersetzen. Ob das dein Problem endgültig löst, kann ich nicht sagen, aber zumindest bringt es dich ein Stück in die Richtung in die du willst.

                            Übrigens, mal probiert "Haus,mit,Baum" einzugeben?

                            Kommentar


                            • #15
                              ... oder kann es am eigendlichen serach-form selber liegen:
                              Unfug, jetzt lern bitte erstmal Grundlagen, bevor wir dir alles vorkauen und von Null anfangen müssen zu erklären...

                              Kommentar

                              Lädt...
                              X