You need to enable JavaScript to run this app. CodeIgniter生成PDF证书时无法按传入ID展示对应学生姓名
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter生成PDF证书时无法按传入ID展示对应学生姓名

CodeIgniter电子证书系统姓名传递异常解决指南

异常根因定位

  • 控制器层存在两处逻辑断层:
    • 完成学生信息SQL查询后,未正确从查询结果中提取纯姓名字段值,且完全未将姓名变量传入视图,仅把URL段传入的原始学生ID(即$uri4)赋值给视图参数传递给证书页
    • 直接用result_array()方法接收查询结果时,未对返回的嵌套数组结构做取值处理,直接将数组替换原ID值传给视图时,因数据结构不匹配导致页面渲染失败
  • 基础业务上下文:
    • 核心逻辑为点击触发后,通过URL传入的学生ID匹配m_siswa表记录,生成可导出PDF的正式证书
    • 关联表m_siswa核心字段为id_siswa(学生ID,示例值9720)、nama(学生姓名)
    • 证书视图v_sertifikat已预留姓名展示位,因控制器传参缺失导致最终PDF仅显示原始ID值

可落地修复步骤

  1. 修正查询逻辑,正确提取学生姓名

    原错误写法:用result_array()接收查询结果后未取值,直接将数组赋值给$nama变量
    参考正确代码:

    // 接收URL第4段传入的学生ID
    $id_siswa = $this->uri->segment(4);
    // 预编译SQL查询,避免SQL注入
    $query = $this->db->query("SELECT nama FROM m_siswa WHERE id_siswa = ?", [$id_siswa]);
    // 单条记录查询场景,用row_array()获取一维数组结构,替代原result_array()
    $student_info = $query->row_array();
    // 提取纯姓名字段值
    $student_name = $student_info['nama'];
    
  2. 修正视图传参逻辑

    原错误写法:仅将$uri4赋值给视图变量,未传入查询得到的姓名
    参考正确代码:

    // 整理传递给证书视图的参数,同时包含ID和姓名
    $view_params = [
        'id_siswa' => $id_siswa,
        'student_name' => $student_name
    ];
    // 加载证书视图
    $this->load->view('v_sertifikat', $view_params);
    
  3. 调整视图层渲染逻辑
    打开v_sertifikat证书视图文件,将预留姓名展示位的输出变量从原引用的ID值,替换为传入的$student_name即可。
  4. 增加异常兜底判断
    在控制器中补充空值校验,避免传入无效ID时页面抛出未定义变量错误:
    if (empty($student_info)) {
        show_error('未匹配到对应学生信息,无法生成证书', 404);
    }
    

高频踩坑提示

  • 不要在单条查询场景下直接使用result_array()作为传值参数:result_array()返回的是二维嵌套数组结构,直接渲染会导致页面输出数组结构报错,单条精准匹配查询优先使用row_array()
  • 确保查询条件匹配的字段正确:核对WHERE子句中匹配的字段为m_siswa表的id_siswa,而非表的自增主键ID,避免因字段不匹配导致查询结果为空

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 00:45:02