Codeigniter,使用URL作为查询参数

4

我正在使用CodeIgniter,尝试创建一个页面,当输入URL example.com/mobil/bekas/toyota/avanza 时,它将显示所有品牌为Toyota、型号为Avanza的二手车,当输入URL example.com/mobil/bekas/toyota 时,它将显示所有品牌为Toyota的二手车。以下是我的控制器:

public function bekas($brand_nama,$model_nama='NULL')
        {      
               $this->load->model('listing_model');
               $data['cars'] = $this->listing_model->viewListingByBrandAndModel($brand_nama, $model_nama);
               $this->load->view('product_listing.php', $data);
        }

以下是模型:

function viewListingByBrandAndModel($brand_nama, $model_nama)
    {

        $this->load->library('pagination');
            $this->load->library('table');
            $config['base_url'] = 'http://example.com/mobil/bekas/'.$brand_nama.'/'.$model_nama;
            $config['total_rows'] = $this->db->select('*')
                            ->join('car_list_tbl','car_list_tbl.car_list_ID = user_listing_tbl.car_list_ID')
                            ->join('member_tbl','member_tbl.mID = user_listing_tbl.mID')
                            ->join('model_tbl','model_tbl.model_ID = car_list_tbl.model_ID')
                            ->join('series_tbl','series_tbl.series_ID = car_list_tbl.series_ID')
                            ->join('body_type_tbl','body_type_tbl.body_type_nama = car_list_tbl.body_type_nama')
                            ->join('brand_tbl','brand_tbl.brand_name = car_list_tbl.brand_name')
                            ->where('car_list_tbl.brand_name',$brand_nama)
                            ->like('model_tbl.model_nama', $model_nama)
                            ->where('user_listing_tbl.listing_type','BEKAS')
                            ->get('user_listing_tbl')->num_rows();
            $config['per_page'] = 20;
            $config['num_links'] = 10;
            $config['display_pages'] = TRUE;
            $config['full_tag_open'] = '<ul class="pagination">';
            $config['full_tag_close'] = '</ul>';
            $config['cur_tag_open'] = '<li class="active"><a href="#">';
            $config['cur_tag_close'] = '</a></li>';
            $config['num_tag_open'] = '<li>';
            $config['num_tag_close'] = '</li>';
            $config['first_link'] = FALSE;
            $config['last_link'] = FALSE;
            $config['prev_link'] = false;
            $config['next_link'] = false;
            $config['next_tag_open'] = '<li><a href="#"><i class="fa fa-chevron-left">';
            $config['next_tag_close'] = '</i></a></li>';
            $config['prev_tag_open'] = '<li><a href="#"><i class="fa fa-chevron-right">';
            $config['prev_tag_close'] = '</i></a></li>';
            $this->pagination->initialize($config);

             //Pagination End

            $sql = $this->db->select('*')
                            ->join('car_list_tbl','car_list_tbl.car_list_ID = user_listing_tbl.car_list_ID')
                            ->join('member_tbl','member_tbl.mID = user_listing_tbl.mID')
                            ->join('brand_tbl','brand_tbl.brand_name = car_list_tbl.brand_name')
                            ->join('model_tbl','model_tbl.model_ID = car_list_tbl.model_ID')
                            ->join('series_tbl','series_tbl.series_ID = car_list_tbl.series_ID')
                            ->where('car_list_tbl.brand_name',$brand_nama)
                            ->like('model_tbl.model_nama', $model_nama)
                            ->where('user_listing_tbl.listing_type','BEKAS')
                            ->get('user_listing_tbl', $config['per_page'], $this->uri->segment(5));
            return $sql->result();

我还是一个Web编程的新手,能否给我一些意见,告诉我哪些方面我还需要提升?因为当我输入example.com/mobil/bekas/toyota/avanza时它可以正常工作,但是当我输入example.com/mobil/bekas/toyota时就无法显示任何内容。

2个回答

1

1 ) 在参数中传递了NULL字符串。

2) 请在数据库查询时基于$model_name使用if条件。不要在查询中传递额外的条件,如 model_name LIKE '';

$this->db->select('*')
    ->join('car_list_tbl','car_list_tbl.car_list_ID = user_listing_tbl.car_list_ID')
    ->join('member_tbl','member_tbl.mID = user_listing_tbl.mID')
    ->join('brand_tbl','brand_tbl.brand_name = car_list_tbl.brand_name')
    ->join('model_tbl','model_tbl.model_ID = car_list_tbl.model_ID')
    ->join('series_tbl','series_tbl.series_ID = car_list_tbl.series_ID')
    ->where('car_list_tbl.brand_name',$brand_nama);

if($model_nama){
    $this->db->like('model_tbl.model_nama', $model_nama);
}
    $this->db->where('user_listing_tbl.listing_type','BEKAS');
    ->get('user_listing_tbl', $config['per_page'], $this->uri->segment(5));
return $this->db->result(); 

0

你的函数声明存在一个小语法错误。在PHP中,值NULL是一个特殊的值,因此不应该用引号括起来。因此,你查询数据库时使用了类型为'toyota',制造商为'NULL'而不是NULL。 更改你的控制器代码应该可以解决这个问题:

 public function bekas($brand_nama,$model_nama=NULL) 
 {
 //...
 }

谢谢提供信息,但是如果我输入example.com/mobil/bekas/toyota/仍然不会显示任何内容。 - Nouzar Wijaya
编写条件语句 if ($model_nama == NULL){/* 只获取 $brand */} else {/* 获取两者 */} - Tpojka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接