0

我有一个基于 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);
}
4

3 回答 3

1

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

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

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

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

希望这会奏效。

于 2013-03-19T13:43:10.610 回答
0

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

于 2013-03-19T13:22:27.757 回答
0

我不确定我是否了解您实际需要做什么。如果要使用多个关键字执行搜索,则可以将关键字变量分解为数组

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

然后进行循环并构建您的搜索查询

于 2013-03-19T13:33:30.930 回答