您好我是codeigniter的新手。我正在通过开发测试应用程序来学习这个框架。我正在显示用户列表,并在每个记录前面有一个锚标记来编辑该记录。该锚标记看起来像
echo(anchor('first/edit_user/'.$value->id,'Edit'));
它将浏览器重定向到第一个控制器和edit_user函数。在edit_user函数中,我像这样加载编辑视图。
$this->load->view('edit_user',$data);
它加载关于所选记录的视图以编辑记录,并且网址看起来像
http://localhost/CodeIgniter/index.php/first/edit_user/9
每件事都很好。但是当用户点击更新按钮时,它再次出现相同的功能。它更新记录,然后再次尝试加载相同的视图,但这里出现问题。现在更新记录后,它加载视图,网址就像这样
http://localhost/CodeIgniter/index.php/first/edit_user
由于没有所选记录的ID,因此会产生错误。如果我像这样更改我的函数的加载视图代码
$this->load->view('edit_user/'$this->uri->segment(3)),$data);
它生成了一个错误的edit_user / .php没有定义,有些类似的东西。现在我想问一下如何将用户重定向到相同的编辑表单,告诉他的记录已更新?如何加载视图 从控制器的功能中选择记录?
答案 0 :(得分:2)
要重定向到与当前网址相同的网址:
redirect(current_url());
否则,请具体指定您要重定向的位置。
$这 - >负载>查看( 'edit_user /' $这 - > URI->链段(3)),$数据);
它生成了一个错误的edit_user / .php没有定义,有些类似的东西。
不使用特定的URL段,而是使用传递给控制器的参数并设置默认值,以及处理传递的参数(url段)可能缺失或无效。例如:
function edit_user($id = NULL)
{
if ( ! $id) // handle error (redirect with message probably)
$user = $this->user_model->get($id);
if ( ! $user) // User not found, handle the error
// If user found, load the view and data
}
请记住,控制器仍然只是php类和函数,并接受用户输入(我可以在地址栏中输入任何内容) - 所以永远不要假设URL中的内容,如果您需要的数据不是那里。
答案 1 :(得分:2)
首先加载URL帮助程序“config / autoload.php”
/*
| -------------------------------------------------------------------
| Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['helper'] = array('url', 'file');
*/
$autoload['helper'] = array('url');
或者在函数本身中加载URL帮助程序
public function edit_user($user_id = '')
{
if(!is_numeric($user_id) {
// user id is not here redirect somewhere //
redirect('home/index');
}
if(isset($_POST['submit'])) {
// proceed to model // @param is optional // you can pass hidden field from form also //
$this->user_model->edit_user($user_id)
}
$this->load->helper('url');
$this->load->view('first/edit_user', $data);
}
现在转到你的表格:
<form method="post" action="<?php echo current_url(); ?>">
</form>
这也将在提交后返回到相同的编辑页面。
希望这可以帮助你,让我们知道那里有什么...谢谢!!