0

コントローラーで間違った関数にアクセスすると、404 エラー ページが正常に機能します。しかし、「http://example.com/model/detail/116」のような URL にアクセスすると、116 は間違った番号 [データベースにない] で、404 エラー ページが機能しません。

コントローラーに次のコードがあります。

public function detail()
 {
    $id['id_galeri'] = $this->uri->segment(3);
    $detail = $this->app_model->getSelectedData("tbl_galeri",$id);
    foreach($detail->result() as $d)
    {
        $bc['jdl'] = "View";
        $bc['id_galeri'] = $d->id_galeri;
        $bc['nama'] = $d->nama;
        $bc['foto'] = $d->foto;
        $bc['deskripsi'] = $d->deskripsi;
        $bc['stts_input'] = "deskripsi";
    }

    if($this->uri->segment(3) == '' && $id['id_galeri'] == FALSE)
    {
        $segment_url = 0;
    }else{
        if(!is_numeric($this->uri->segment(3)) || !is_string($this->uri->segment(3))){
        redirect('404');
        }else{
        $segment_url = $this->uri->segment(3);
        }
    }

    $this->load->view('frontend/global/bg_top');
    $this->load->view('frontend/page/bg_view_model',$bc);
    $this->load->view('frontend/global/bg_footer');
}

私の悪い英語で申し訳ありませんが、助けてください:-)ありがとう..

4

1 に答える 1

1

それ以外の:

redirect('404');

CodeIgniter のネイティブを使用してみてください:

show_404('page');

編集

このコードを試してみてください。少しクリーンアップすると、ビューで使用するために保存される前にチェックが行われます。

public function detail()
 {
    $id['id_galeri'] = $this->uri->segment(3);

    // Check if the supplied ID is numeric in the first place
    if ( ! is_numeric($id['id_galeri']))
    {
        show_404($this->uri->uri_string());
    }

    // Get the data
    $detail = $this->app_model->getSelectedData("tbl_galeri",$id);

    // Check if any records returned
    if (count($detail->result()) === 0)
    {
        show_404($this->uri->uri_string());
    }

    foreach($detail->result() as $d)
    {
        $bc['jdl'] = "View";
        $bc['id_galeri'] = $d->id_galeri;
        $bc['nama'] = $d->nama;
        $bc['foto'] = $d->foto;
        $bc['deskripsi'] = $d->deskripsi;
        $bc['stts_input'] = "deskripsi";
    }

    /**
     * Here do whatever you want with the $segment_url which doesn't seem to be
     * used in your code
     */

    $this->load->view('frontend/global/bg_top');
    $this->load->view('frontend/page/bg_view_model',$bc);
    $this->load->view('frontend/global/bg_footer');
}
于 2013-02-04T04:28:28.850 に答える