You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter框架双表用户单表单登录实现方案咨询

合并管理员与员工登录表单的实现方案

没问题,我帮你梳理下怎么把两个独立的登录流程合并成一个表单。核心思路就是让用户选择登录类型,然后在后端根据类型去对应的数据表验证身份,具体步骤如下:

1. 修改登录视图(login.php)

把原来提交到特定方法的表单,改成提交到一个统一的登录方法,同时添加用户类型选择控件(下拉框或单选按钮都可以):

<?php echo form_open('index.php/Auth/login'); ?>
<!-- 添加用户类型选择 -->
<div class="form-group">
    <label>登录身份</label>
    <div class="d-flex gap-3">
        <div class="form-check">
            <input class="form-check-input" type="radio" name="user_type" id="admin" value="administrator" checked>
            <label class="form-check-label" for="admin">管理员</label>
        </div>
        <div class="form-check">
            <input class="form-check-input" type="radio" name="user_type" id="worker" value="werknemer">
            <label class="form-check-label" for="worker">员工</label>
        </div>
    </div>
</div>

<!-- 原有的用户名、密码输入框 -->
<div class="form-group">
    <i class="fa fa-user"></i>
    <input type="text" name="username" class="form-control" placeholder="用户名" required>
</div>
<div class="form-group">
    <i class="fa fa-lock"></i>
    <input type="password" name="password" class="form-control" placeholder="密码" required>
</div>

<button type="submit" class="btn btn-primary">登录</button>
<?php echo form_close(); ?>

2. 编写统一的登录控制器方法

在你的Auth控制器里新增一个login方法,负责处理统一登录逻辑:

public function login() {
    // 获取表单提交的参数
    $user_type = $this->input->post('user_type');
    $username = $this->input->post('username');
    $password = $this->input->post('password');

    // 先验证用户类型是否合法,防止恶意提交
    if (!in_array($user_type, ['administrator', 'werknemer'])) {
        $this->session->set_flashdata('error', '无效的登录身份');
        redirect('Auth/login');
        return;
    }

    // 根据用户类型选择对应的数据表
    $target_table = $user_type;
    // 查询该用户是否存在
    $user = $this->db->get_where($target_table, ['username' => $username])->row();

    if ($user) {
        // 验证密码(假设你的密码是用password_hash加密存储的,用password_verify验证)
        if (password_verify($password, $user->password)) {
            // 设置会话信息,标记登录状态和用户类型
            $session_data = [
                'user_id' => $user->id,
                'username' => $user->username,
                'user_type' => $user_type,
                'logged_in' => TRUE
            ];
            $this->session->set_userdata($session_data);

            // 根据用户类型跳转到不同的后台页面
            $redirect_url = $user_type === 'administrator' ? 'admin/dashboard' : 'werknemer/dashboard';
            redirect($redirect_url);
        } else {
            $this->session->set_flashdata('error', '密码错误,请重试');
            redirect('Auth/login');
        }
    } else {
        $this->session->set_flashdata('error', '该用户名不存在');
        redirect('Auth/login');
    }
}

3. 补充注意事项

  • 确保你的项目已经加载了session库,可以在config/autoload.php里配置:$autoload['libraries'] = array('session');
  • 如果你的密码不是哈希存储的,需要调整密码验证逻辑(但强烈建议用password_hash加密存储密码)
  • 原来的werknemer_login和administrator_login方法可以暂时保留,等新流程测试稳定后再逐步移除

内容的提问来源于stack exchange,提问作者Jeremy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:38:18