CodeIgniter flashdata incoerence

时间:2014-05-21 14:26:05

标签: php codeigniter session

所以,我一直在努力解决这个问题,但无济于事。我的研究也没多大帮助。这是:我构建了一个测试,通过直接在URL中键入地址来防止人们转到模块的alter页面,而不需要更改注册表的id(因此会导致DB出现问题)。简单地说,它搜索在DB的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;
?>

所以这就是问题:成功消息正常显示(我检查并仔细检查,它们在Controller中以与错误方式完全相同的方式声明),以及'非数字',但不是'未找到'和'其他表空'。我真的很困惑这个,因为flashdata似乎在某些情况下工作而不是在其他情况下,这是特别奇怪的,因为flashdata以几乎相同的方式被声明... = /抱歉,如果我不是很清楚,这是我在这里发表的第一篇文章,所以(试着)要有耐心; D在这件事情上事先得到任何帮助。

编辑:找出问题的根源。这与我的浏览器缓存存储有关。重新启动我的机器并清理缓存,输出工作就像一个魅力。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

所以,我只是改进了你的代码,所以你可以尝试调试......

控制器:

$arr = array('error_message' => '');
if(!empty($id) && is_numeric($id)) {
  $search=$this->model_foo->search($id);

  if($search->num_rows()==0) {
    $arr['error_message'] = 'not found';
  } else {
    $search=$this->model_foo2->list();
    if ($search->num_rows()==0) {
      $arr['error_message'] = 'other table empty';
    }
  }
} else {
  $arr['error_message'] = 'not numeric';
}

$this->session->set_flashdata($arr);
redirect('myurl/index');

查看(相同):

<?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。