使用Codeigniter从数据库填充表单域

时间:2013-03-28 17:06:55

标签: php forms codeigniter

我正在尝试从数据库中检索的数据中填充两个表单字段,以便用户更新它们。该表名为records,非常简单:

RECORD_ID
标题
含量

我的模特:

function get_data()
{
    $r = $this->uri->segment(3);

    $query = $this->db->get_where('records', array('Record_ID' => $r));
    return $query->result();
}

我的控制器:

function set_values()
{
    $data = $this->entries_model->get_data();
    $this->load->view('update_view', $data);                       
}

和我的更新记录视图:

<?php

echo form_open('site/update',$data);?>
Title:
<?php echo form_input('title',set_value('title'));?>
Content:
<?php echo form_input('content',set_value('content'));
echo form_submit('submit', 'Submit');?>

<?php echo form_close();?>

问题是我收到以下错误:

  

遇到PHP错误

     

严重性:注意

     

消息:未定义的变量:数据

     

文件名:views / update_view.php

     

行号:10

我的问题有两个:

  1. 如何在我的视图表单和
  2. 中访问此数据
  3. 如何用它填充相应的字段。
  4. 我是Codeigniter的新手,我的问题可能看起来过于简单,但任何帮助都会受到赞赏。提前谢谢。

4 个答案:

答案 0 :(得分:0)

您应该将数组传递给视图文件。所以替换:

$data = $this->entries_model->get_data();

使用:

$data['entries_data'] = $this->entries_model->get_data();

并在您的视图文件中替换:

echo form_open('site/update',$data);?>

使用:

echo form_open('site/update',$entries_data);?>

答案 1 :(得分:0)

这里有一些事情发生:

  1. $ data是passed to a view的数组或对象。然后它的ELEMENTS可用作视图中的变量。因此,控制器中的$ data ['myelement'] ='somevalue'将在视图中以$ somevalue的形式访问。

  2. 如果将第二个参数传递给form_open()方法,则它应该是将生成的标记的键/值属性对。比如,array('class'=&gt;'form_class','id'=&gt;'form_id')

  3. 如果要设置表单输入的值,请使用视图助手函数set_value()。在您的情况下,使用控制器设置您将传递给视图的$ data数组中的元素。 $data['form_values'] = array('title' => $title, 'content' => $content);

  4. 然后,在视图中:

答案 2 :(得分:0)

首先你需要以正确的方式传递数据

替换

$data = $this->entries_model->get_data();

with:

$data['data'] = $this->entries_model->get_data();

要设置set_value中的值,你需要进行内联条件检查以检查数据是否为对象,如果对象然后将值另外放置为空

<?php echo form_input('title',set_value((is_object($data)?$data->title:'')));?>

你必须为你的所有表单字段做同样的事情

答案 3 :(得分:0)

Jcory已经回答了你的问题,但让我补充一点。

  1. 在您的模型中而不是return $query->result();执行此操作return $query->row();这是因为使用返回返回对象需要您在视图中循环遍历结果集
  2. 而不是$data = $this->entries_model->get_data();执行此操作$data['entry'] = $this->entries_model->get_data();
  3. 在您的视图中执行此操作<?php echo form_input('title',set_value('title',$entry->title));?> 我希望这些改变可以解决问题