我正在使用uri段删除数据库中的信息:
anchor('site/delete_note/'.$row->id, 'Delete')
型号:
function delete_note()
{
$this->db->where('id', $this->uri->segment(3));
$this->db->delete('note');
}
它运行正常,但我想要更新我的信息并且无法使其工作 所以这是链接视图:
anchor('site/edit_note/'.$row->id, 'Edit')
我的控制器:
function edit_note()
{
$note_id = $this->uri->segment(3);
$data['main_content'] = 'edit_note';
$this->load->view('includes/template', $data);
$this->load->library('form_validation');
$this->form_validation->set_rules('content', 'Message', 'trim|required');
if($this->form_validation->run() == TRUE)
{
$this->load->model('Note_model');
$this->Note_model->edit_note($note_id);
redirect('site/members_area');
}
}
我的模特:
function edit_note($note_id)
{
$content = $this->input->post('content');
$data = array('content' => $content);
$this->db->where('id', $note_id);
$this->db->update('note', $data);
}
我对edit_note的看法:
<?php
echo form_open('site/edit_note');
echo form_textarea('content', set_value('content', 'Your message'));
echo form_submit('submit', 'Change');
echo anchor('site/members_area', 'Cancel');
echo validation_errors('<p class="error">'); ?>
当我试图直接在编辑模型中获取段时,编辑不能用作删除,就像我在删除模型中使用的那样。
如果我将$ note_id设置为我的控制器中的数字,而不是这个'$ this-&gt; uri-&gt; segment(3)',它会更新我的数据库。但如果我使用获取段它不起作用。我认为uri段在控制器中可用,如模型中所示,但有些东西我不知道。
答案 0 :(得分:1)
更好的是,您可以将功能更改为:
,而不是通过段手动读取ID function delete_note($note_id)
和
function edit_note($note_id)
删除$note_id = $this->uri->segment(3);
行。
听起来很傻,生成的网址肯定是正确的,对吧?
最后一个问题,你有没有做过任何路线?
修改强>
我还注意到在编辑中,您可以在表单中使用它:
echo form_open('site/edit_note');
因此,当表单提交时,它提交的网址为site/edit_note
而不是site/edit_note/{SOME_ID}
。因此,一旦您进行了更改,并且表单提交,就不会成为第3个网址段!
答案 1 :(得分:0)
在我看来,在模型中使用uri段是一种“坏”方法......你应该从控制器函数传递一个id作为参数。
function delete_note()
{
$this->db->where('id', $this->uri->segment(3));
$this->db->delete('note');
}
如果您想重新使用此删除方法,该怎么办?例如从管理面板,通过cron作业等删除注释,然后上面依赖于uri段,您将需要创建其他删除方法来完成这项工作。此外,如果你继续使用相同的,你甚至不需要一个模型然后..如果你知道我的意思,只需在你的控制器中调用这些行......
$this->db->where('id', $this->uri->segment(3));
$this->db->delete('note');
最好将其更改为类似于edit_note
()模型函数。
答案 2 :(得分:0)
您的代码中存在一些逻辑错误。
function edit_note()
{
$note_id = $this->uri->segment(3);
$data['main_content'] = 'edit_note';
$this->load->view('includes/template', $data);
//// What is the use of loadig a view when you are editing
$this->load->library('form_validation');
$this->form_validation->set_rules('content', 'Message', 'trim|required');
if($this->form_validation->run() == TRUE)
{
$this->load->model('Note_model');
$this->Note_model->edit_note($note_id);
redirect('site/members_area');
}
}
而是像这样做
function edit_note()
{
if($this->input->post()){
$this->load->library('form_validation');
$this->form_validation->set_rules('content', 'Message', 'trim|required');
if($this->form_validation->run() == TRUE)
{
$this->load->model('Note_model');
$this->Note_model->edit_note($note_id);
redirect('site/members_area');
}
}else{
$note_id = $this->uri->segment(3);
$data['main_content'] = 'edit_note';
$this->load->view('includes/template', $data);
}
}
最重要的是 另外你应该注意到你使用锚点来访问编辑注释,但实际上并没有提交表单,所以它没有得到任何更新的帖子数据。