2010-03-19 121 views
1

即时通讯启动codeigniter项目时出现问题,问题是,当我在控制器中做了一些事情,然后我想要一个页面来显示结果,例如:我有一个表单添加一个项目到数据库,我得到了所有在控制器中的数据并将其保存到数据库,然后我想(如果一切顺利的话)重定向到一个成功味精的主要页面,我用如何使用codeigniter处理重定向?

$this->load->view('admin', $data); 

问题这样做,这是该URL保持说管理员/ addItem所以每次页面刷新它增加了另一个项目,现在我发现:

redirect('admin','refresh'); 

,但这只能帮助我,当我不需要显示任何味精,因为这个功能不允许发送$数据变种。 任何想法? 也许这是很容易修复,但我无法找到一种方法来处理应用程序的流程我想要的方式,任何帮助是apreciated。 感谢;)

+0

3答案工作,我选择了一个来自dyllon只是因为我喜欢它:P感谢家伙,很好的答案; D – 2010-03-20 01:42:38

回答

3

Flashdata是你的朋友,这个链接和大约一半的页面,你会发现flashdata的文档。

基本上,如果您的表单功能成功,您可以使用您的成功信息设置flashdata,$this->session->set_flashdata('success', 'You successfully did something, yay!'); 现在重定向到您的管理页面。 redirect('admin','refresh');在管理页面检查现有flashdata,并将它显示给用户

+0

哦,这看起来像我需要,我要检查它; D – 2010-03-19 21:36:08

1

可以很容易修复,也可能是也难以解决, 看看有关URI的文档路由http://codeigniter.com/user_guide/general/routing.html

在我的测试程序,我用这个瓦尔

$route['default_controller'] = "main"; 
$route['scaffolding_trigger'] = ""; 

主要是一个控制器,所以如果你访问你的网站,它首先调用控制器主

在你的情况下,我会用这样的东西

$route['admin/:num'] = "catalog/products"; 

这将重定向到管理员的任何接入/ *到目录/产品

有创意;-)

0

我认为你应该使用这种形式给出:

而不是调用管理视图或重定向的头,你应该从帖子发送如果$ _POST变量不为空,意味着你应该将数据保存在调用其他函数的数据库中,或者在一个模型的示例中:($ this-> save_data_in_database(); )并将其结果再次发送到视图。 如果$ _POST变量为空,则应调用管理视图并将消息的数据作为NULL发送。

我送一个例子波纹管:

查看管理:(直接邮寄到控制器的管理功能)

<html> 
(...) 
<body> 

<?php echo $message_response; ?> 

<form method="post" action="<domain>/index.php/admin" /> 
    <imput (...)  
</form> 

</html> 

控制器:

function admin() 
{ 
    if (isset($_POST['fieldname'])) 
     $data['message_response']=$this->save_data_in_database($params...); 
    else 
     $data['message_response']=NULL;  

    $this->load->view('admin', $data); 
} 


function save_data_in_database($params...) 
{ 

(save data to database etc...) 

return (...message_to_display...); 

} 

最好的问候,
Pedro

+0

这看起来不错,现在即时尝试flashdata的东西,如果没有工作,就像我想要我会尝试这个,TY;) – 2010-03-19 23:56:42