使用数据库中的数据预填充更新表单

时间:2017-08-04 14:24:07

标签: php codeigniter codeigniter-3

更新:

如果在视图中我执行<?php echo $customer->first_name; ?>,则会正确输出名字。

在同一个视图文件'value' => set_value($customer->first_name)上不输出任何内容。

我在CodeIgniter 3中创建了一个“客户”CRUD应用程序。我有一个更新表单,我希望预先填充对应于客户的数据,该数据已存在于数据库中。< / p>

该模型如下所示:

class Customer extends CI_Model {
  /*Lots
    of
   code*/

 public function getAllCustomers($customer_id) {
    $query = $this->db->get_where('customers', array('id' => $customer_id));
    if ($query->num_rows() > 0) {
        return $query->row();
    }       
  }
}

控制器如下所示:

class Home extends CI_Controller {

/*Lots
    of
   code*/

 public function edit($customer_id){
    $this->load->model('Customer');
    $customer = $this->Customer->getAllCustomers($customer_id);
    $this->load->view('update', ['customer'=>$customer]);
 }
}

在视图文件(update.php)中我有:

<?php echo form_input('first_name', '', [
            'type'  => 'text',
            'id'    => 'first_name', 
            'class' => 'form-control',
            'value' => set_value($customer->first_name),
            'placeholder' => 'First name',
    ]); 
?>

客户的first_name虽然存在于名为“first_name”的数据库列中,但不预先填充表单。

为什么会这样?

2 个答案:

答案 0 :(得分:0)

始终使用$this->db->last_query()进行调试,以检查您的查询是否正确执行 如果last_query()没有返回任何内容,请确保在'save_queries' => TRUE

中设置app/config/database.php

您的查询可能会返回多个结果

像这样改变你的模型

 public function getAllCustomers($customer_id) {
    $q = $this->db->get_where('customers', array('id' => $customer_id));
          log_message("error",$this->db->last_query()); //use this to get the complied query for debugging purpose 
        if ($q->num_rows() > 0) {
                foreach (($q->result()) as $row) {
                    $data[] = $row;
                }
                return $data;
            }
            return FALSE; 
}

如果您确定查询可能只返回一个结果,请检查$customer_id中是否有数据

 public function getAllCustomers($customer_id) {
    if($customer_id){
    $q = $this->db->get_where('customers', array('id' => $customer_id),1); //specify the limit if you want to get only one row
          log_message("error",$this->db->last_query()); //use this to get the complied query for debugging purpose 
        if ($q->num_rows() > 0) {

                return $q->row();
            }

         }
             return FALSE; 

}

答案 1 :(得分:0)

那是怎么做的:

<?php echo form_input('first_name', set_value('first_name', $customer->first_name),[
    'id' => 'first_name',
    'class' => 'form-control'
    ]);
?>