Php 如何在CodeIgniter中将用户id附加到url?

Php 如何在CodeIgniter中将用户id附加到url?,php,codeigniter,codeigniter-routing,Php,Codeigniter,Codeigniter Routing,我正在我的社交网络上创建用户模块。我正在尝试将其设置为如果您登录并查看自己的个人资料,您就是$user['id']如果您登录并查看其他人的个人资料,您就是$prof['id']我已经开始完成 然而,我对codeigniter和php都是新手,我试图弄清楚如何将用户id附加到url的末尾,这样我的系统就可以检查它是$user['id']还是$prof['id'] 控制器: public function profile() { $data['profile_icon']

我正在我的社交网络上创建用户模块。我正在尝试将其设置为如果您登录并查看自己的个人资料,您就是
$user['id']
如果您登录并查看其他人的个人资料,您就是
$prof['id']我已经开始完成

然而,我对codeigniter和php都是新手,我试图弄清楚如何将用户id附加到url的末尾,这样我的系统就可以检查它是
$user['id'
]还是
$prof['id']

控制器:

public function profile() 
    {
        $data['profile_icon'] = 'profile';
        $data['main_content'] = 'account/profile';
        $this->load->view('includes/templates/profile_template', $data);
        $this->load->helper('date');
        $this->load->library('session');
        $session_id = $this->session->userdata['id'];
        //USER ID LOOKING AT OWN PROFILE
        $this->load->model('account_model');
        $user = $this->account_model->user();
        $data['user'] = $user;
        //PROF ID LOOKING AT SOMEONE ELSE'S PROFILE
        $this->load->model('account_model');
        $prof = $this->account_model->prof();
        $data_prof['prof'] = $prof;


        if($session_id != $user['id'])
        {
            echo $prof['id'];
            echo "<br />";
            // FOR TESTING PURPOSES
            echo "other user";
        }

        elseif($session_id == $user['id'])
        {
            echo $user['id'];
            echo "<br />";
            // FOR TESTING PURPOSES
            echo "hey it's me ";

        }


    }
提前谢谢

***编辑//尝试将id附加到url

$this->load->view('includes/templates/profile_template', $data);
$this->load->helper('date');
$this->load->library('session');
$session_id = $this->session->userdata['id'];
$this->load->model('account_model');
//USER ID LOOKING AT OWN PROFILE
$data_user['user'] = $this->account_model->user();
$user['id'] = $this->uri->segment(3);
echo $user['id'];
$data['profile_icon'] = 'profile';
$data['main_content'] = 'account/profile/'.$user['id'];
***为管线编辑

route['default_controller'] = "home";
$route['404_override'] = '';
$route['profile/:num'] = "auth/profiles";
//控制器

public function profile() 
    {

        $this->load->helper('date');
            $this->load->library('session');
        $session_id = $this->session->userdata['id'];
        $this->load->model('account_model');
        $user = $this->account_model->user();
            $data['user'] = $user;
        $user['id'] = $this->uri->segment(4);
        $data['profile_icon'] = 'profile';
        $data['main_content'] = 'account/profile/'.$user['id'];
        $this->load->view('includes/templates/profile_template', $data);

    }

首先,我不认为有必要像那样切换ID,老实说,这没有实际意义。如果您正在查看一个配置文件,那么您可以通过用户ID进行查看,而不管它是您的配置文件还是其他人的配置文件。如果希望能够编辑配置文件页面,只需检查配置文件的用户标识是否与会话用户标识匹配即可

例如,在您的视图中,可以有一个链接:

<?php
    if($user['userId']==$this->session->userdata('userId'))
    {
        echo '<a href="users/edit_user/'.$user['userId'].'">Edit my profile</a>';
    }
了解uri段。 我认为有时人们会对URI段感到困惑。你的基本url是0,你从那里开始计数。它在实际URL结构中的位置并不重要,只要您记住基本URL始终为0。例如,如果您的基本URL是www.example.com/hello/world,那么uri段1位于world NOT.com之后

你也做了很多初学者的事情,说实话,我不知道为什么我总是看到教程向人们展示

    $prof = $this->account_model->prof();
    $data_prof['prof'] = $prof;
为什么不这样做呢?设置变量的目的是什么?设置变量:

    $data_prof['prof'] = $this->account_model->prof();

此外,在您的用户查询中,将限制去掉。这将确保即使您的查询匹配多个结果,也只能得到一个结果,您应该确保不能有多个用户在任何时候都具有相同的ID。显然,在查询排序中使用相同的ID会破坏if num rows语句的目的。无论发生什么情况,都会得到1或0。

基本上两者都是相同的,因此您只需使用if语句添加缺少的数据,而不是像现在这样做。无论如何,codeigniter的会话使用普通大括号()而不是[]$user['id']和$prof['id']完全不是由会话助手创建的。非常感谢。这是一个极好的答案,也是我一直在寻找的!我刚刚发现这篇有用的文章,我想我一定是应用了错误的逻辑,因为我无法加载请求的文件:。php错误代码:请参阅编辑******您能显示您的URL结构吗?有可能你没有抓住正确的部分。您可以尝试回显uri段是什么,以确保。在基本URL之后开始计数。因此,如果你的url是example.com/profile/25,25是你想要的ID,那么这个段是2,我刚才用了3作为例子,我应该放一个相应的url来告诉你它是如何工作的。我相信index.php算作一个段,试试4。老实说,在每个新项目中,我都会从URL中删除index.php,所以我从来没有处理过这个问题。
$userId = $this->uri->segment(3);
    $prof = $this->account_model->prof();
    $data_prof['prof'] = $prof;
    $data_prof['prof'] = $this->account_model->prof();