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

CodeIgniter 3.1.5登录查询无法校验用户输入错误求助

帮你搞定CodeIgniter 3.1.5的登录校验问题

嘿,作为CodeIgniter新手碰到这个问题太正常了,我来一步步帮你排查和修复~先看看你的代码里几个关键的调整点:

1. 视图加载顺序错了,导致验证错误没法显示

你现在先加载了login视图,之后才做表单验证——这会导致验证失败时,错误信息根本传不到视图里(因为视图已经提前输出了)。正确的逻辑是先处理表单验证,再根据结果决定加载视图还是处理登录:

class Auth extends CI_Controller {
    public function __construct() {
        parent::__construct();
        // 提前加载需要的库和助手,避免重复加载
        $this->load->library('form_validation');
        $this->load->library('session');
        $this->load->helper('url');
    }

    public function login() {
        // 先设置表单验证规则
        $this->form_validation->set_rules('username','Username','required');
        $this->form_validation->set_rules('password','Password','required|min_length[5]');

        if($this->form_validation->run() == true){
            // 验证通过,处理登录逻辑
            // 用框架自带的输入类,比直接用$_POST更安全,还能自动过滤恶意内容
            $username = $this->input->post('username');
            $password = $this->input->post('password');

            // --- 补上用户校验的核心逻辑 ---
            // 假设你的用户表名为users,先根据用户名查询用户
            $this->db->where('username', $username);
            $user = $this->db->get('users')->row();

            if($user){
                // 重点:如果数据库里存的是用password_hash加密的密码,必须用password_verify验证
                if(password_verify($password, $user->password)){
                    // 密码匹配,登录成功——设置会话信息
                    $this->session->set_userdata([
                        'user_id' => $user->id,
                        'username' => $user->username
                    ]);
                    // 跳转到登录后的页面,比如仪表盘
                    redirect('dashboard');
                } else {
                    // 密码错误,传递错误信息到视图
                    $data['error'] = '用户名或密码错误';
                    $this->load->view('login', $data);
                }
            } else {
                // 用户名不存在
                $data['error'] = '用户名或密码错误';
                $this->load->view('login', $data);
            }
        } else {
            // 验证失败或者首次访问页面,加载登录视图
            $this->load->view('login');
        }
    }
}

2. 视图里要加上错误信息显示

在你的login.php视图里,记得添加验证错误和自定义登录错误的显示区域,不然用户看不到哪里错了:

<!-- 显示表单验证的错误提示 -->
<?php echo validation_errors('<div class="alert alert-error">', '</div>'); ?>

<!-- 显示登录失败的自定义错误 -->
<?php if(isset($error)): ?>
    <div class="alert alert-error"><?php echo $error; ?></div>
<?php endif; ?>

<!-- 你的登录表单 -->
<form method="post" action="<?php echo base_url('auth/login'); ?>">
    <input type="text" name="username" placeholder="请输入用户名" value="<?php echo set_value('username'); ?>">
    <input type="password" name="password" placeholder="请输入密码">
    <button type="submit">登录</button>
</form>

3. 别忘了配置自动加载数据库

确保你已经在application/config/autoload.php里设置了自动加载数据库库,不然查询会报错:

$autoload['libraries'] = array('database', 'form_validation', 'session');
$autoload['helper'] = array('url');

这样调整后,你的登录校验逻辑应该就能正常工作啦~如果还是有问题,可以检查下数据库里的密码是不是用password_hash()加密存储的(千万别存明文!),或者确认用户名字段的拼写和数据库里一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:32:42