如何在 CodeIgniter 中正确调用控制器方法处理模态登录表单提交

8次阅读

如何在 CodeIgniter 中正确调用控制器方法处理模态登录表单提交

本文详解 codeigniter 中模态登录表单无法触发控制器方法的常见原因(如嵌套表单、url 路由错误、`.htaccess` 配置冲突),并提供完整修复方案,包括表单重构、安全密码哈希升级及调试要点。

在使用 CodeIgniter 构建登录模态框时,表单提交后“无响应”或直接关闭模态框,通常并非逻辑错误,而是 html 结构与框架路由机制不匹配所致。最典型的问题出现在你提供的代码中:同时使用了原生

标签和 CodeIgniter 的 form_open() 辅助函数

,导致浏览器解析出非法的嵌套表单结构(HTML 规范禁止嵌套

),从而使表单提交行为不可预测——甚至被完全忽略。

✅ 正确做法:统一使用 CI 表单辅助函数

请彻底移除原生

开始与结束标签,仅保留 CI 的 form_open() 和 form_close():

@@##@@">
'form-signin']); ?>

input->get('action'); if ($action === 'error') echo "Email atau Kata Sandi salah"; elseif ($action === 'notlog') echo "Anda belum masuk"; ?>

⚠️ 关键修正点:删除 和 原生标签;form_open(‘welcome/login_action’) 中 不加 index.php/,也不加前导 / —— 因你的 .htaccess 已启用重写,CI 会自动将请求映射到 Welcome::login_action();添加 required 属性增强前端校验;将提交按钮改为 ,语义更清晰。

? 安全升级:弃用 md5(),改用 password_hash() / password_verify()

当前控制器中使用 md5($password) 存储密码存在严重安全隐患(碰撞风险高、无盐值、已被淘汰)。请立即升级为 PHP 原生密码哈希方案:

1. 修改模型 m_welcome.php 的注册/登录逻辑:

// 注册时(示例) public function register_user($data) {     $data['password'] = password_hash($data['password'], PASSWORD_ARGON2ID); // 或 PASSWORD_DEFAULT     return $this->db->insert('users', $data); }  // 登录验证时 public function check_login($email) {     return $this->db->where('email', $email)->get('users'); }

2. 更新 Welcome.php 中的 login_action():

function login_action(){     $email = $this->input->post('email');     $password = $this->input->post('password');      // ✅ 改为先查用户,再验证密码(避免 SQL 注入风险)     $query = $this->m_welcome->check_login($email);     if ($query->num_rows() > 0) {         $user = $query->row();         if (password_verify($password, $user->password)) { // ✅ 安全比对             $data_session = [                 'nama'   => $user->nama, // 建议存真实姓名而非 email                 'email'  => $user->email,                 'status' => 'login'             ];             $this->session->set_userdata($data_session);             redirect('sdm'); // 注意:此处应为相对 URI,非 base_url()         } else {             redirect('welcome/?action=error');         }     } else {         redirect('welcome/?action=error');     } }

? 调试与验证建议

  • 检查 .htaccess 是否生效:访问 http://localhost/portalapp/welcome/login_action,若返回 404,请确认 apache mod_rewrite 已启用,并重启服务;
  • 开启 CI 调试模式:在 index.php 顶部设置 define(‘ENVIRONMENT’, ‘development’);,查看详细错误;
  • 验证路由:在浏览器直接访问 http://localhost/portalapp/index.php/welcome/login_action(带 index.php),若可访问说明控制器方法本身正常,问题必在前端表单或重写规则;
  • 检查 Network 面板:打开浏览器开发者工具 → Network → 提交表单,观察是否发出 POST 请求、状态码是否为 200/302,或出现 404/500。

✅ 总结

问题类型 错误表现 解决方案
嵌套表单 提交无反应、模态框关闭 删除原生

,只用 form_open()
URL 路由错误 404 Not Found 使用 welcome/login_action(无 index.php/,无前导 /)
密码存储不安全 易被暴力破解 替换 md5() 为 password_hash() + password_verify()
重定向异常 重定向到错误路径 redirect(‘sdm’) 而非 redirect(base_url(‘sdm’))

遵循以上规范,你的模态登录表单即可稳定调用控制器逻辑,同时兼顾安全性与可维护性。

如何在 CodeIgniter 中正确调用控制器方法处理模态登录表单提交

发表于:php框架
2026-02-07
text=ZqhQzanResources