在Codeigniter中缺少论据让我疯狂

时间:2016-02-29 16:31:11

标签: php html mysql codeigniter

嗨大家快问我根据我的知识,下面的语句没有任何问题,因为代码执行时没有错误,但是它不是更新数据库中的信息,这里是我的模型和控制器代码

控制器:

    public function update_canvas($id){
    $this->check_is_validated();
    $data['success'] = 0;
    if ($_POST) {
        $data = array(
            'canvas_name' => $this->input->post('canvas_name')
        );
        $this->Art_m->edit_canvas($id,$data);
        $data['success'] = 1;
        redirect(base_url() . 'admin/art');
    }else {
        $data['arty'] = $this->Art_m->get_canvas($id);
        $data['title'] = 'Edit your Art Works';
        $data['content'] = 'admin/art/edit_canvas';
        $this->load->view('templates/dashboard/template', $data);
    }
}

型号代码:

    function edit_canvas($id,$data)
{
    $this->db->where('ID', $id);
    $this->db->update('art', $data);
}

因此,当我运行脚本并尝试更新信息时,我的错误日志提供了以下内容,我无法看到问题所在,因为它需要更新ID才能更新?

记录错误:

ERROR - 2016-02-29 16:25:48 --> Severity: Warning --> Missing argument 1 for Art::update_canvas() C:\wamp\www\alisonbull\application\modules\art\controllers\Art.php 80
ERROR - 2016-02-29 16:25:48 --> Severity: Notice --> Undefined variable: id C:\wamp\www\alisonbull\application\modules\art\controllers\Art.php 87

请告知

2 个答案:

答案 0 :(得分:1)

将我的评论作为答案写下来,因为它已被确认为正确:

问题是在没有$id中指定的值的情况下调用函数,因为$ id的值是通过$ _POST发送的。

在CodeIgniter application / config / routes.php中,会出现如下行:

$route['art/update/(:any)'] = 'art/update_canvas/$1';

这告诉CodeIgniter,例如,当art/update/42上的请求进入时,它应该调用艺术控制器,该控制器中的函数update_canvas,并将42作为参数传递给控制器

当你在$ _POST请求中提交id时,这没有被正确路由,因此没有设置$ id。这会导致更新失败,因为它无法使用空ID进行更新

答案 1 :(得分:0)

根据错误消息,您可能没有传递$id? CodeIgniter控制器的工作方式如下:

假设您有此网址:

example.com/index.php/stack/your/url/42

url之后的两个细分(42your)将作为参数传递给函数:

class Stack extends CI_Controller {
    public function your($url, $id) {
        echo $url;
        echo $id;
    }
}