2012-03-22 27 views
0

因此,目前,我的CI網站被格式化以接收URI的一部分,讓我們說一個ID,並從數據庫中查找結果以顯示在頁面上。由URI確定的數據

如果我輸入的數據庫不在數據庫中,但是自然會出現數據庫錯誤。有沒有更好的方法來保護我的URI不受直接數據庫訪問的影響,並且,告訴用戶他們輸入的URL無效的最佳方法是什麼?

回答

0

IMO你不應該只顯示一個錯誤,但也拋出一個404(或301,取決於你的應用程序)爲SEO原因

一個簡單的實現:

MY_Controller。 PHP

... 
protected function error404() 
{ 

    set_status_header(404); 

    $data = array(); 

    $this->load->view('error404_view', $data); 
} 

examplecontro ller.php

... 
     $data = $this->Some_model->get_by_id($id); 
     if (empty($data)) 
     { 
      $this->error404();   
     } 
     else 
     { 
      // your view here   
     } 
... 

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

+0

是的,我基本上在模型中創建了一個函數來檢查頁面的ID。我將數據庫名稱傳遞給該函數,以便它知道在哪裏查找,然後重定向到404錯誤頁面。多謝你們! – Sneaksta 2012-03-23 03:09:37

0

假設你的id存儲在$ id中。然後你可以做這樣的事情。

if() // if $id not found - depends how you are doing check 
{ 
    $errorMsg = "Not found"; 
    $this->session->set_flashdata('errorMsg', $errorMsg); 
    redirect('home'); //Redirect to the page which is always available and display flashdata with error message here 
} 
+0

現在那會是最好的把我的控制器或我的看法? – Sneaksta 2012-03-22 01:35:58

+0

這應該在控制器中。 – Chirag 2012-03-22 01:38:40

+0

我通常使用flashdata來顯示消息。它只能用於下一個服務器請求,然後自動清除。所以你可以在你重定向到的頁面上抓住這個flash數據並在那裏顯示消息給用戶。關於flashdata的更多信息在這裏 - http://codeigniter.com/user_guide/libraries/sessions.html – Chirag 2012-03-22 02:46:55