2012-03-22 24 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