2013-03-19 3 views
0

У меня есть сайт недвижимости, построенный на codeIgniter, который ищет с помощью формы. Все работает нормально, если вы не ищете 2 слова, а затем не приносит результатов, даже считая, что ключевые слова есть. Я не вижу, где я ошибся. URL выглядит нормально, и это ставит там вводить слова, какCodeigniter Search Query with 2 words

например:

/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); 
} 

ответ

0

, если ключевое слово "Семья% 20home" вы пробовали urldecode(), чтобы удалить кодировку URL?

+0

Да, это все еще возвращает 0 результатов при использовании urldecode. Я уверен, что это что-то в контроллере, которое неправильно передает ключевые слова. – user1857612

+0

Немного перекодировки и да, это сработало отлично! – user1857612

0

Я не уверен, что понимаю, что вам на самом деле нужно делать. Если вы хотите выполнить поиск, используя несколько ключевых слов, вы бы тогда могли взорвать ключевые слова переменной в массив

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

, а затем сделать петлю и построить поисковый запрос

1

В CodeIgniter, когда строка запроса или ключевые слова передаются в контроллер, как

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

Codeigniter предполагает $ запрос как URL и кодирует его, который становится World% 20Hospital. Конечно, mysql не даст вам результата с этой строкой. Вам нужно декодировать строку до фактического использования переменной в вашем контроллере в качестве JCO, упомянутой в вышеприведенном ответе. Сделайте это как;

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

Надеюсь, что это сработает.