Codeigniter搜索查询有2个字

时间:2013-03-19 13:04:15

标签: php database codeigniter

我有一个基于codeIgniter构建的属性站点,它使用表单进行搜索。一切都工作正常,除非你用2个单词搜索,然后即使关键字在那里也没有结果。我看不出哪里出错了。 URL看起来很好,它把关键词放在那里

例如:

    /family%20home/

但没有带来任何结果。如果您只是搜索家庭,结果会很好。

希望有人可以帮忙解决这个问题! : - )

控制器看起来像:

function index($page=0,$keyword='0',$min='0',$max='0',$bed='0',$rentbuy='0',$ord_by='DESC')
{ 
  $condition=" where 1 ";
  $keyword=empty($keyword)?(!empty($_POST["keyword"])?trim($_POST["keyword"]):'0'):$keyword;
  if(!empty($keyword)){
    $data['keyword']=$keyword;
    $condition.=" and (town like '%$keyword%' or street like '%$keyword%' or postcode like '%$keyword%' or main_advert like '%$keyword%' or main_advert2 like '%$keyword%' or main_advert3 like '%$keyword%' or main_advert4 like '%$keyword%')";
  }
  $bed=empty($bed)?(!empty($_POST["bed"])?$_POST["bed"]:'0'):$bed;
  if($bed>0){
    $condition.=" and bedrooms>=$bed";
  }    
  $min=empty($min)?(!empty($_POST["min"])?$_POST["min"]:0):$min;
  if($min>0){
    $condition.=" and price>=$min";
  }       
  $max=empty($max)?(!empty($_POST["max"])?$_POST["max"]:0):$max;
  if($max>0){
    $condition.=" and price<=$max";
  }       
 $orderby=' order by price DESC';
 // $ord_by=(!empty($_POST["ord_by"]))?$_POST["ord_by"]:$ord_by;      
  $rentbuy=empty($rentbuy)?(!empty($_POST["rentbuy"])?$_POST["rentbuy"]:'0'):$rentbuy;
  if(!empty($rentbuy)){
  $rarry=array('','Residential Sales','Residential Lettings');
    $condition.=" and department='".$rarry[$rentbuy]."'";
  }
  //echo $condition;
  $perpage=4;
  $start=($page);

  $limit=" LIMIT ".$start.",".$perpage."";

    $data["count"] = $this->property->get_count($condition);
    $data["list"] = $this->property->get_list($condition.$orderby.$limit);
    $config['urlpara']='/'.$keyword."/".$min."/".$max."/".$bed."/".$rentbuy."/".$ord_by."/";
    $config['total_rows']=$data["count"] ;
    $config['uri_segment']=3;
    $config['per_page']=$perpage;
    $config['base_url']=base_url().'/properties/index/';

    $this->load->library('pagination');
    $this->pagination->initialize($config);

    $data['links']=$this->pagination->create_links();
    if($_POST){
        redirect(base_url().'properties/index/0'.$config['urlpara']);       
    }
    $data['page']=$page;
    $data['bed']=$bed;
    $data['min']=$min;
    $data['max']=$max;
    $data['rentbuy']=$rentbuy;
    $data['ord_by']=$ord_by;       
    $this->_common($data);
    $this->load->view('property_results',$data);
}

3 个答案:

答案 0 :(得分:1)

在codeigniter中,查询字符串或关键字发送到控制器,如

$query="World Hospital";
echo site_url('Controller/Controller_Function/'.$query);

Codeigniter假定$ query为URL并对其进行编码,成为World%20Hospital。 Ofcourse mysql不会给你这个字符串的结果。你需要的是在实际使用控制器中的变量之前解码字符串作为上面答案中提到的JCO。这样做;

Public function something()
{
   $my_query=urldecode($this->url->segment(3));
   // Now you can use $my_query in your query.
}

希望这会奏效。

答案 1 :(得分:0)

如果关键字是“Family%20home”,您是否尝试过urldecode()来删除网址编码?

答案 2 :(得分:0)

我不确定我明白你真正需要做什么。 如果您想使用多个关键字执行搜索,则可以将关键字变量分解为数组

$keywords=explode(' ',$keywords);

然后创建一个循环并构建搜索查询