Ankündigung

Einklappen
Keine Ankündigung bisher.

problem mit preg_split

Einklappen

Neue Werbung 2019

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

  • problem mit preg_split

    hallo leute,
    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 (was wichtig wäre, da die bildertitel durchgehen so benannt sind ; A_0007)

    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
    bei PHP: Hypertext Preprocessor wenn man nach preg_split sucht steht folgendes Beispiel:
    Code:
    <?php
    // split the phrase by any number of commas or space characters,
    // which include " ", \r, \t, \n and \f
    $keywords = preg_split("/[\s,]+/", "hypertext language, programming");
    ?>
    The above example will output:
    
    Array
    (
        [0] => Array
            (
                [0] => hypertext
                [1] => 0
            )
    
        [1] => Array
            (
                [0] => language
                [1] => 10
            )
    
        [2] => Array
            (
                [0] => programming
                [1] => 19
            )
    
    )

    Kommentar


    • #3
      $keywords_split ist ein Array, also kann nicht nch diesem gesucht werden. Zeige halt mal die Stelle, wo gesucht wird, bzw die entsprechende Abfrage zusammengesetzt wird.
      Und was heisst, es können keine Unterstriche eingegeben werden? Ist das wirklich so, oder werden sie einfach herausgefiltert?

      Kommentar


      • #4
        hi lazydog,
        danke für die schnelle antwort ...
        also wenn man in das suchfeld z.b eingibt "A_0007" springt es um auf "A0007" und somit findet es natürlich nicht das bild.

        hier mal mehr von dem code:

        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


        • #5
          danke gabriele-mohl, hab ich auch schon gefunden, hilft mir aber nicht so richtig weiter ... danke trotzdem

          Kommentar


          • #6
            Wer schreibt solchen Code?
            Zitat von phpwicca Beitrag anzeigen
            PHP-Code:
            ...
                    
            $keywords_split preg_split("/[\s,]+/"$keywords_get);
                    
            $keywords "";
                    foreach(
            $keywords_split as $keyword)
                        
            $keywords .= trim($keyword)."|";
                    
            $keywords substr($keywords,0,strlen($keywords)-1);
            ... 
            Wenn man das gleiche mit
            PHP-Code:
                    $keywords_split preg_split("/[\s,]+/"$keywords_get);
                    
            $keywords implode('|'$keywords_split); 
            erreichen kann? Aber das nur nebenbei.
            Es ist ja offensichtlich nicht so, die einzelnen Worte zu einem zusammengefügt werden, sondern es wird nach jedem einzelnen, aber nicht nach einem ganzen Ausdruck ("haus mit baum" ), gesucht. Das habe ich allerdings auch nur in dem Code gesehen, den du hier schnell wieder verschwinden liessest. Und wo die Underscores verschwinden sollen, sehe ich auch nirgends.

            Kommentar


            • #7
              danke, holzauge sei wachsam
              den hab ich wieder verschwinden lassen, weil ich dachte er sei nicht relevant ... hier isser in voller länge:

              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::pagination($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;
              	}
              	
              }
              ?>

              Kommentar


              • #8
                ...und hier is der code vom search-form, vielleicht liegt ja auch hier das problem:
                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>

                Kommentar

                Lädt...
                X