我使用CodeIgniter 2.1.0,我希望在数据库中插入数据后得到一条消息,例如“您的信息已成功更新。”。对于这项工作,我在CI_Controller中有以下函数:
function myCiInser(){
... Here is my query ...
//$data: this var is result query that is true
if($data){
$this -> session -> set_flashdata('message', 'Your information was successfully updated.');
redirect('url/myurl');
}
}
我认为:
<?php
$message = $this->session->flashdata('message');
if($message){
echo '<div id="error_text">' . $message . '</div>';
}
//I test this : "echo $message;" but don't give output
?>
但是我不会在视图中给出消息,但是redirect
已经完成并且正常工作。在表ci_sessions
列user_data
的数据库中,我有:
一个:2:{S:9: “的user_data”; S:0: “”; S:19: “闪光:新的:消息”; S:42:“您的 信息已成功更新。“;}
如何解决这个问题?
更新
我遇到以下错误(我使用chorme并通过Ctrl + Shift + j获取此警告):
无法加载资源:服务器响应状态为404 (未找到)
我修复它(现在我没有错误)但显示消息仍然是同样的问题。我该怎么办?
答案 0 :(得分:18)
从Codeigniter Session Class documentation,关于 Flashdata ,我们可以阅读:
CodeIgniter支持“flashdata”,或者只支持会话数据 可用于下一个服务器请求,然后自动执行 清零。
您的问题可能是当您重定向时,该过程需要多个请求,清除您的flashdata。
要查看是否是这种情况,只需将以下代码添加到要重定向到的控制器的构造函数中:
$this->session->keep_flashdata('message');
这将使flashdata保留另一个服务器请求,允许以后使用它。
答案 1 :(得分:12)
我也有这个问题。我不记得我在哪里看到了,但这是我的解决方案。
redirect('url/myurl','refresh');
CodeIgniter没有将重定向视为另一个请求。所以flashdata没有在重定向中设置,但它是在我加载的下一页上。
答案 2 :(得分:3)
//在我们的控制器文件中设置闪存数据
$this->session->set_flashdata('sessionkey', 'Value');
//之后我们需要使用重定向功能
redirect("admin/signup");
//在视图中获取Flash数据
$this->session->flashdata('sessionkey');
答案 3 :(得分:2)
使用数据库会话有时会引起我的问题。我建议在 config.php 中设置$config['sess_use_database'] = FALSE;
,看看flashdata是否正常工作。
答案 4 :(得分:2)
您也可以使用数据库进行会话,但必须设置配置项:
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = FALSE;
以这种方式,会话flashdata将再次运行
答案 5 :(得分:1)
除了一页,我能够使用session显示/传递值。我尝试使用var_dump($this->session)
并获得:
["flash:old:Array"]=> bool(false)
["flash:new:message"]=> string(10) "My Message"
我尝试在设置数据后回显页面中的flash数据而不重定向,但结果是一样的。我建议减少代码,并尝试在其他页面中设置会话。如果问题仍然存在,请检查var_dump
。这可能不是解决方案,但我认为它可以提供帮助。
更新:修剪文本中的空格和换行符 工作。我正在传递两个长句子,空行和空格。
if (0) //Assume this condition is false
{
$this->load->view('error_page');
// Generate validation error
}
else
{
//Show success message
$data = array(
'message' => 'My message'
);
$this->session->set_flashdata($data);
$this->session->keep_flashdata($data);
echo $this->session->flashdata('message');
//echo var_dump($this->session);
//redirect(base_url().'success_page');
}
答案 6 :(得分:1)
我遇到了同样的问题。在检查了我找到的代码后,我正在调用$this->session->sess_destroy();
,这会导致问题。
答案 7 :(得分:0)
404(未找到)计为1个服务器请求。它将删除你的flashdata。
答案 8 :(得分:0)
当我观察codeigniter flashdata时。 当我在使用codeigniter redirect()方法的第二个请求中使用它时,它在mozila中正常工作,但在chrome的情况下它不起作用。
答案 9 :(得分:0)
我知道我已经很晚了,但我遇到了这个问题而且我无法相信在我的情况下解决方案很容易
只需替换
$this->session->flashdata('message');
到
print_r($this->session->flashdata('message'));
答案 10 :(得分:0)
我打开了Chrome开发者控制台,并删除了Flashdata。将其关闭并重试后即可。 版本71.0.3578.98(正式版本)(64位)
答案 11 :(得分:0)
我将其用于闪存数据,并且易于使用。 首先,需要创建会话,然后在控制器的方法中,在要重定向页面之前使用它。
在创建会话后在Controller上,不要忘记加载会话和url库。
$this->session->set_flashdata('success', 'Oops. This email id already exist.' );
redirect("You Mehod or page");
在这种情况下,您无需转到特定的查看页面即可添加额外的php代码。
然后在footer.php上查看此脚本代码之后的
<!-- Code for flashdata toaster -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css">
<script type="text/javascript">
<?php if($this->session->flashdata('success')){ ?>
toastr.success("<?php echo $this->session->flashdata('success'); ?>");
<?php }else if($this->session->flashdata('error')){ ?>
toastr.error("<?php echo $this->session->flashdata('error'); ?>");
<?php }else if($this->session->flashdata('warning')){ ?>
toastr.warning("<?php echo $this->session->flashdata('warning'); ?>");
<?php }else if($this->session->flashdata('info')){ ?>
toastr.info("<?php echo $this->session->flashdata('info'); ?>");
<?php } ?>
</script>
<!-- End of flashdata script -->
祝您好运,希望对您有帮助。