【问题标题】:Populate form fields from database using Codeigniter使用 Codeigniter 从数据库中填充表单字段
【发布时间】:2013-03-28 17:06:54
【问题描述】:

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

记录 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. 如何使用它填充相应的字段。

我是 Codeigniter 的新手,我的问题可能看起来很简单,但我们将不胜感激。提前致谢。

【问题讨论】:

    标签: php forms codeigniter


    【解决方案1】:

    这里发生了一些事情:

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

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

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

    那么,在视图中:

    【讨论】:

    • 感谢您提供的所有信息,它确实帮助我理解了一些事情。但是我如何进入视图中的 set_value() 呢?已经尝试过 umefarooq 建议的语法,但我收到错误,即 title:'')));?>"> 并收到 A PHP 错误遇到严重性:通知消息:数组到字符串的转换文件名:helpers/form_helper.php 行号:1010 连续三次。
    • 这是我的一个应用程序中的一个示例,说明我是如何做到的:在这种情况下,控制器设置了一个值 $data['envs']...该值集是一个包含元素 'cluster' 的数组,例如: $data['envs'] = array('name' => $envName, 'cluster' => $clusterName)。因此,当 $data 被传递给视图时,$envs 成为视图中可用的 Array 类型的变量。 set_value() 将表单元素 name=cluster 的值设置为值 $envs['cluster']。有意义吗?
    • 非常感谢jcorry,几天后我发现了这个解决方案,就像你说的那样。再次感谢您的宝贵时间和回复。
    【解决方案2】:

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

    $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);?>
    

    【讨论】:

    • 感谢您的回复,已经这样做了。它似乎无法读取我在 setvalue() 函数中输入的值。
    【解决方案3】:

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

    替换

    $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:'')));?>
    

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

    【讨论】:

    • 感谢您的回复,我这样做了,得到以下错误:
    • 遇到 PHP 错误严重性:通知消息:数组到字符串的转换文件名:helpers/form_helper.php 行号:1010
    • 这里你用 $query->result() 获得了多条记录,如果你只编辑一条记录,那么你只需要返回 $query->row() 一行
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 2011-03-06
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多