【问题标题】:Issue with saving an update information in Codeigniter在 Codeigniter 中保存更新信息的问题
【发布时间】:2014-04-06 17:04:36
【问题描述】:

我的目标是更新job_contract。 有两种方法可以做到这一点。 1. 通过客户页面和 2. 通过提供商页面。

我目前的工作模式是:

 public function update_job_contract($post_obj)
{
    $id = $post_obj['id'];
    $data = array 
    (
        'client_feedback' => $post_obj['client_feedback'],
        'client_notetoself' => $post_obj['client_notetoself'],
        'contract_status' => $post_obj['contract_status'],
        'client_id' => $this->auth_model->get_user_id()
    );

    $this->db->insert('job', $data);
}

public function provider_update_job_contract($post_obj)
{
    $id = $post_obj['id'];
    $data = array 
    (
        'provider_feedback' => $post_obj['provider_feedback'],
        'provider_notetoself' => $post_obj['provider_notetoself'],
        'provider_id' => $this->auth_model->get_user_id()
    );

    $this->db->insert('job', $data);
}

我的客户端控制器页面中有以下几行:

public function update_job_contract() 
{
    $this->validateRole('client');
    $this->load->model('job_model');

    $id = $this->uri->segment(3,0);


    $data['job'] = $this->job_model->get_job($id);  

    $this->load->view('client/update_job_contract', $data);
}   

public function update_job_contract_submit() 
{
    $this->validateRole('client');
    $this->load->model('job_model');

    if ( '0' == $_POST['id'] ) {
    $this->job_model->update_job_contract($_POST);
    //} 
    redirect('client/manage_job_contracts?message=Congratulations!');
}

这在我的提供者控制器页面中:

 public function provider_update_job_contract() 
{
    $this->validateRole('provider');
    $this->load->model('job_model');

    $id = $this->uri->segment(3,0);


    $data['job'] = $this->job_model->get_job($id);  

    $this->load->view('provider/provider_update_job_contract', $data);
}   

public function provider_update_job_contract_submit() 
{
    $this->validateRole('provider');
    $this->load->model('job_model');

    if ( '0' == $_POST['id'] ) {
    $this->job_model->provider_update_job_contract($_POST);
    } 
    redirect('provider/job_contracts?message=Congratulations!');
}

问题是,他们并没有真正更新条目。请帮忙..

【问题讨论】:

  • 什么是 $post_obj ?这是在其他地方定义的吗?如果不看一下 codeigniter 教程 for form to db basics ellislab.com/codeigniter/user-guide/tutorial/index.html
  • 您好,感谢您的回复。公共函数 update_job_contract($obj) { $id = $obj['id']; $data = array ( 'client_feedback' => $obj['client_feedback'], 'client_notetoself' => $obj['client_notetoself'], 'contract_status' => $obj['contract_status'], 'client_id' => $ this->auth_model->get_user_id() ); $this->db->insert('job', $data); } 仍然不起作用..

标签: php sql arrays codeigniter add


【解决方案1】:

您正在使用 $this->db->insert(),但使用 Active Record 更新您应该使用 $this->db->update() 的行

$data = array(
   'title' => $title,
   'name' => $name,
   'date' => $date
);

$this->db->where('id', $id);
$this->db->update('mytable', $data);

换句话说,你的函数应该是这样的:

public function update_job_contract($post_obj)
{
    $id = $post_obj['id'];
    $data = array 
    (
        'client_feedback' => $post_obj['client_feedback'],
        'client_notetoself' => $post_obj['client_notetoself'],
        'contract_status' => $post_obj['contract_status'],
        'client_id' => $this->auth_model->get_user_id()
    );
    $this->db->where('id', $id);
    $this->db->update('job', $data);
}

public function provider_update_job_contract($post_obj)
{
    $id = $post_obj['id'];
    $data = array 
    (
        'provider_feedback' => $post_obj['provider_feedback'],
        'provider_notetoself' => $post_obj['provider_notetoself'],
        'provider_id' => $this->auth_model->get_user_id()
    );
    $this->db->where('id', $id);
    $this->db->update('job', $data);
}

另外,控制器内部的 $_POST 应该替换为 $this->input->post()

以此为例:

public function provider_update_job_contract_submit() 
{
    $this->validateRole('provider');
    $this->load->model('job_model');

    $post = $this->input->post();
    if ( '0' == $post['id'] )
    {
        $this->job_model->provider_update_job_contract($post);
    } 
    redirect('provider/job_contracts?message=Congratulations!');
}

确保以相同的方式更新其他控制器

【讨论】:

  • 你的意思是什么都没有改变或添加到数据库?对于这些特定领域,仅此而已..只有这部分负责..
  • 好吧,这有点傻,但我猜你实际上是在提供不同的数据进行更新?当数据与已经存储在数据库中的数据相同时,mysql 不会在更新时返回 true,它会被忽略,因为实际上没有任何变化。我猜不是这样?
  • 在模型内部试试 。它包括您的 $_POST 数据吗?这是您期待的内容吗?
  • 对于客户端,他使用 update_job_contract() 而提供者使用 provider_update_job_contract()
  • 你的意思是 echo "
    "; print_r($post_obj);出口;在 update_job_contract 里面?它没有显示任何内容...
猜你喜欢
  • 2016-06-15
  • 2014-08-08
  • 1970-01-01
  • 2021-07-07
  • 2023-01-30
  • 2010-11-19
  • 2017-01-29
  • 1970-01-01
  • 2021-04-01
相关资源
最近更新 更多