CodeIgniter中set_flashdata失效求助:数据入库成功但无提示
嘿,我看你已经搞定了数据插入,但flashdata的提示死活不出来,这几个细节应该是问题的关键,咱们一个个捋清楚:
1. Session实例的大小写错误 + 加载时机问题
你在插入成功后才加载session库,还犯了个大小写的低级错误:
$this->load->library('session'); $this->Session->set_flashdata('success', 'successfully added');
CodeIgniter里的session实例是小写的$this->session,大写的Session会直接导致调用失败——flashdata根本就没被存进去!
另外,session库建议提前自动加载,去application/config/autoload.php里把session加入自动加载列表:
$autoload['libraries'] = array('session');
这样就不用在控制器里每次手动加载,也能避免遗漏初始化的问题。
2. 直接调用方法而非重定向,导致flashdata未触发
你插入成功后直接调用$this->welcome();,这是在同一个HTTP请求里直接渲染视图。但CodeIgniter的flashdata是为下一次请求设计的,同一个请求里设置的flashdata,当前视图根本读不到。
正确操作应该用redirect()跳转到welcome页面:
if ($submit >0) { $this->session->set_flashdata('success', 'successfully added'); redirect('Registrationc/welcome'); // 替换成你实际的welcome方法路由 }
这样浏览器会发起新的请求,flashdata就能被视图正确读取了。
3. 表单Action里的多余空格
你的视图form action里有个不该存在的空格:
action="<?php echo base_url(); ?> index.php/Registrationc/add_patient"
base_url()后面的空格会让URL变成http://你的域名/ index.php/...,虽然你说数据能插入,但这个问题可能导致后续请求异常,赶紧去掉空格:
action="<?php echo base_url('index.php/Registrationc/add_patient'); ?>"
如果你的config里已经设置$config['index_page'] = '';,还能简化成:
action="<?php echo base_url('Registrationc/add_patient'); ?>"
4. 模型调用的拼写不一致
你控制器里加载的模型是addpatientM,但调用的时候用的是$this->addpatients:
$this->load->model('addpatientM'); // ... $submit = $this->addpatients->insert_patient (...);
虽然你说数据插入成功了,但这大概率是你输入代码时的笔误,建议统一模型名称,避免后续出问题。
额外优化:视图里的flashdata显示逻辑
可以给提示信息加个判断和样式,让它更直观:
<?php if($this->session->flashdata('success')): ?> <div class="alert alert-success"> <?php echo $this->session->flashdata('success'); ?> </div> <?php endif; ?>
这样只有当flashdata存在时才显示,不会出现空内容。
按照上面的步骤修改后,应该就能正常看到成功提示啦!
内容的提问来源于stack exchange,提问作者Nisha

