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

CodeIgniter取数后发送SMS遇变量未定义等错误求助

让我们一步步拆解这两个错误的根源,毕竟在CodeIgniter里处理表单提交和视图渲染的问题,大多和数据传递、流程逻辑的严谨性有关:

1. 「变量$result未定义」的问题分析

这个错误本质是视图渲染时找不到控制器传递的$result变量,通常有两种场景:

  • 你的SEND按钮触发POST请求后,处理提交的控制器方法里,没有在所有代码分支下给视图传递$result。比如只有短信发送成功时赋值了$result,失败或者查询出错时直接跳过了赋值,导致视图找不到这个变量。
  • 表单提交的目标控制器方法,和首次加载SENDSMS视图的方法不是同一个,而新方法里完全没处理$result的传递。

解决建议:
在处理SEND请求的控制器方法里,先初始化$result变量,确保无论逻辑分支如何,都能传递给视图:

public function send_sms() {
    $data = [];
    // 初始化$result为null,避免未定义
    $data['result'] = null;
    
    if ($this->input->post()) {
        // 处理客户信息查询、短信发送逻辑
        $customer_id = $this->input->post('customer_id');
        $data['result'] = $this->db->where('id', $customer_id)->get('customers')->row();
        
        // 短信发送逻辑...
    }
    
    $this->load->view('item/sms', $data);
}

2. 「尝试获取非对象的属性」的问题分析

这个错误指向你视图第15行的代码,说明你在尝试访问某个变量的属性(比如$result->phone),但这个变量并不是预期的对象——它可能是null、false或者数组。
常见原因:

  • 控制器里查询客户信息失败,返回了null(比如用row()方法查询不到数据时会返回null),但你直接把这个null传给了视图,视图里直接访问它的属性就会报错。
  • 你用了result_array()获取查询结果(返回数组),但视图里却用对象语法(->)访问属性。

解决建议:

第一步:在控制器里校验查询结果

$customer_id = $this->input->post('customer_id');
$customer = $this->db->where('id', $customer_id)->get('customers')->row();

if (!$customer) {
    $data['error_msg'] = '未找到对应客户信息';
    $data['result'] = null;
} else {
    $data['result'] = $customer;
}

第二步:在视图里做防御性判断

在第15行代码处,先判断$result是否有效再访问属性:

<div class="form-group">
    <?php if (isset($result) && is_object($result)): ?>
        <label>客户手机号:</label>
        <input type="text" value="<?= $result->phone ?>" class="form-control">
    <?php else: ?>
        <p class="text-danger"><?= isset($error_msg) ? $error_msg : '客户信息异常' ?></p>
    <?php endif; ?>
</div>

额外排查点:表单提交的流程一致性

确认你的SEND按钮所在的表单,action属性指向的是正确的控制器方法,并且该方法同时处理了「首次加载视图展示客户信息」和「提交后处理短信发送」两种场景——避免因为请求路径不一致,导致数据传递逻辑断裂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:23:27