【发布时间】:2014-05-21 14:26:04
【问题描述】:
所以,我已经为此苦苦挣扎了一段时间,但无济于事。我的研究也没有太大帮助。就是这样:我构建了一个测试,以防止人们通过直接在 url 中键入地址而不需要更改注册表的 id 来访问模块的更改页面(因此在数据库中造成麻烦)。简单来说就是在数据库中搜索url中作为参数传递的id;如果匹配,则继续,否则,我重定向到主模块页面,并通过 flashdata 传递错误消息。如果未定义来自不同表的字段(因为两者都需要它才能工作,因为表是相关的),我会使用类似的过程来阻止注册表的插入/更改。我在 Controller 中所做的一个粗略示例是:
if(is_numeric($id)) $search=$this->model_foo->search($id);
else
{
$this->session->set_flashdata('error_message','not numeric');
redirect('myurl/index','refresh');
}
if($search->num_rows()==0)
{
$this->session->set_flashdata('error_message','not found');
redirect('myurl/index','refresh');
}
$search=$this->model_foo2->list();
if ($search->num_rows()==0)
{
$this->session->set_flashdata('error_message','other table empty');
redirect('myurl/index','refresh');
}
而我的观点(索引)是这样的:
<?php
$error=$this->session->flashdata('error_message');
$success=$this->session->flashdata('success_message'); /*success_message goes after a successful inset/update*/
if ($error!="")echo $error;
?>
所以这是问题所在:成功消息正常显示(我检查并仔细检查,它们在控制器中的声明方式与错误消息完全相同),以及“非数字”消息,但不是“未找到”和“其他表为空”。我对此感到非常困惑,因为 flashdata 似乎在某些情况下有效,而在其他情况下无效,这特别奇怪,因为 flashdata 的声明方式几乎相同... =/ 对不起,如果我不是很清楚,这是我在这里的第一篇文章,所以(尽量)耐心等待;D 提前感谢您在这件事上的任何帮助。
编辑:找出问题的根源。这与我的浏览器缓存存储有关。重新启动我的机器并清理缓存,输出就像一个魅力。感谢所有的帮助。
【问题讨论】:
-
你检查过flashdata是否真的被设置了吗?尝试打印 $this->session->all_userdata();exit; $this->session->set_flashdata('error_message','not found');并检查那里的值...
-
其实我不认为 print $this->session->all_userdata();exit;会起作用的,可能 $this->session->flashdata('error_message');exit;...我只是想确保在重定向之前设置了该值。
-
您可能想尝试在重定向中不使用“刷新”选项 - 这可能会干扰闪存数据。
-
@pecci,我确实对此进行了一些测试。 “未找到”的 flashdata 确实没有被设置,但“不是数字”是,女巫再次是最尴尬的,因为我设置它们的方式几乎相同......我几乎可以肯定我正在设置使用正确语法的“未找到”,但仍然没有设置。有什么想法吗?
-
@SamDufel,我在系统的几乎所有模块中都使用 flashdata 运行刷新,但没有一个显示出问题的迹象。此外,有效的消息也设置在“刷新”重定向之前
标签: php codeigniter session