Codeigniter 3 & CI Bonfire 0.7:注册后传递用户ID至课程注册页的问询
解决方案:在CodeIgniter 3 + CI Bonfire 0.7中关联用户与课程注册记录
针对你要实现的用户注册后自动关联课程注册记录的需求,我给你一套适配Bonfire现有架构的具体实现步骤:
1. 先搞定数据库的关联结构
首先得确保你的bf_courseregistrations表已经添加了user_id字段,类型要和bf_users表的id字段一致(一般是INT类型),最好设置成外键关联bf_users.id,这样能保证数据的完整性。
你可以用这段SQL语句添加字段和外键:
ALTER TABLE bf_courseregistrations ADD COLUMN user_id INT NOT NULL; ALTER TABLE bf_courseregistrations ADD FOREIGN KEY (user_id) REFERENCES bf_users(id);
2. 注册完成后获取并暂存UserID
Bonfire的用户注册逻辑默认在Users模块的Register控制器里。你需要修改注册成功后的跳转逻辑,把生成的user_id存到会话里,方便后续页面调用。
打开application/modules/users/controllers/Register.php,找到register()方法里注册成功的分支(一般是if ($this->user_model->insert($user_data))的代码块),添加以下代码:
// 注册成功后获取当前用户的ID $user_id = $this->user_model->insert_id(); // 把user_id存入会话,供课程注册页面使用 $this->session->set_userdata('new_user_id', $user_id); // 直接跳转到课程注册页面 redirect('courseregistration/add');
注意:如果你的课程注册页面是自定义控制器,记得调整跳转的URL路径。
3. 在课程注册页面获取并传递UserID
在你的课程注册控制器(比如Courseregistration.php)的add()方法里,从会话中取出user_id,传递给视图:
public function add() { // 从会话中获取刚注册用户的ID $user_id = $this->session->userdata('new_user_id'); // 如果没获取到,说明用户可能直接访问这个页面,做个兜底处理 if (!$user_id) { redirect('users/register'); // 跳回注册页面或者提示错误信息 } // 把user_id传递给表单视图 $data['user_id'] = $user_id; $this->load->view('courseregistration/add_form', $data); }
然后在课程注册表单视图(add_form.php)里,添加一个隐藏字段来携带user_id:
<form method="post" action="<?php echo site_url('courseregistration/save'); ?>"> <!-- 这里放你的其他课程注册字段,比如课程名称、选择的班级等 --> <input type="hidden" name="user_id" value="<?php echo $user_id; ?>"> <button type="submit">提交课程注册</button> </form>
4. 保存课程注册记录时关联UserID
在课程注册控制器的save()方法里,获取表单提交的user_id和其他课程数据,插入到bf_courseregistrations表:
public function save() { $registration_data = array( 'user_id' => $this->input->post('user_id'), 'course_name' => $this->input->post('course_name'), // 这里添加其他课程注册字段,比如注册时间、班级ID等 ); // 插入到课程注册表 $this->db->insert('bf_courseregistrations', $registration_data); // 清理会话中的临时user_id,避免后续误用 $this->session->unset_userdata('new_user_id'); // 跳转到注册成功页面 redirect('courseregistration/success'); }
额外的小提醒
- 确保会话安全:Bonfire默认已经启用了会话加密,你可以在
application/config/config.php里确认$config['encryption_key']已经设置好。 - 兼容用户后续访问:如果用户可能注册后先去其他页面再进入课程注册,建议在课程注册页面判断用户是否已登录(用
$this->auth->is_logged_in()),如果已登录直接用$this->auth->user_id()获取ID,比依赖会话临时值更稳妥。 - 用最可靠的方式拿ID:获取注册后的用户ID,优先用
$this->user_model->insert_id(),这是CodeIgniter内置的获取插入后自增ID的方法,不会出错。
内容的提问来源于stack exchange,提问作者Tim Burks
相关产品推荐
相关产品推荐

