2

我有一个奇怪的问题,所以请耐心等待。我正在使用 _remap 函数在我的 URI 中实现 example.com/user/username 协议,并且我正在使用以下代码:

function _remap()
    {       
                //URI Segment I am retrieving (this part works for me)
        $profile_name = $this->uri->segment(2,0);
                // Query the DB where user_name (column in DB) == $profile_name
        $query = $this->db->get_where('users', array('user_name' => $profile_name));
                    // Load user data when URI segment is retrieved, load page
            foreach($query->result() as $row){
                $this->load->view('user_view', $data);          
            }       

}

所以我的问题是,每当我输入一个无效的 URI 段时,即在数据库中找不到它,它只会返回一个空白页。我尝试了一堆条件语句,但基本上我想要这个算法:

if $profile_name = FOUND (in DB)
display page
else 
redirect to error page

就像我说的那样,我可以让它接受有效的数据库用户名,但是如果使用无效的用户名,它只会显示一个空白页。我认为这是因为我在 segment(2,0) 函数中包含了 0 参数。让我知道你的想法......非常感谢大家!

PS 以防您想知道为什么我不使用路由功能,我不确定是否可以通过路由来完成所有这些操作(无论如何都要对照数据库进行检查)。

4

2 回答 2

3

就在你的 foreach 之前,插入这个:

if (!$query->num_rows()) {
    $this->load->helper('url');
    redirect('error_page_uri_here');
}
于 2011-02-12T01:15:53.963 回答
2

您不需要返回 0,因为如果在该位置找不到段,URI 类将返回 FALSE(这与返回 0 一样好)

 function _remap()
    {       
                //URI Segment I am retrieving (this part works for me)
        $profile_name = $this->uri->segment(2);

        if(!$profile_name){
            redirect('error_page');
        }
        // Query the DB where user_name (column in DB) == $profile_name
        $query = $this->db->get_where('users', array('user_name' => $profile_name));
        // Load user data when URI segment is retrieved, load page

       /* 
        *  Assuming $query returns false if no records are found.  
        *  Or else substitute with another condition
        */

        if($query){ 
            foreach($query->result() as $row){
                $this->load->view('user_view', $data);          
            }
        }else
             show_error('msg goes here', 404);       

}

现在到您的另一个问题,您可以通过设置自定义路由规则轻松地做到这一点,并在您路由到的方法中执行用户数据库检查(因此您可以将_remap重命名为实际方法,我们将其称为*fetch_user($username) *为了讨论起见)

在您的 routes.php 中,在末尾添加:

$route['user/(:any)'] = "user/fetch_user";

URI 路由参考

您的新 fetch_users 功能:

function fetch_user($username)
 { 
     // first check if $username has a value or not. We don't want to run a query if this is null.      
    if(!$username)
        redirect('to_some_page')

    $query = $this->db->get_where('users', array('user_name' => $username));

    /* 
    *  Assuming $query returns false if no records are found.  
    *  Or else substitute with another condition
    */

    if($query){ 
       foreach($query->result() as $row){
             $this->load->view('user_view', $data);          
       }
    }else
      show_error('msg goes here', 404);       

}
于 2011-02-12T01:06:40.170 回答