Codeigniter表单填充db结果不起作用

时间:2015-03-14 09:38:33

标签: database forms codeigniter populate setvalue

我几天来一直在尝试使用表单类来填充数据库中的文本字段。我一直在寻找如何做到这一点,没有任何运气。

请有人看看我的代码并告诉我我做错了什么。

模型

    //This function brings up the selected users information for editing.
public function edit_user($id)
{
    $this->db->select('id, email, name, lastname, homeaddress, posteladdress, 
    mobile, hometel, idnum');
    $this->db->where('id', $id)->limit(1);
    $query = $this->db->get('user');
    return $query->result();

}

控制器

public function get_user_edit($id)
{
    $this->load->helper('form');
    $this->load->model('model_users'); //Load the user model

    //Get the database results from the model

    $data['results'] = $this->model_users->edit_user($id);
    foreach ($data['results'] as $key => $row)
    {
        $data['results'] = array(   'id' => $row->id,
                        'email' => $row->email,
                        'name' => $row->name, 
                        'lastname' => $row->lastname,
                        'homeaddress' => $row->homeaddress,
                        'posteladdress' => $row->posteladdress,
                        'mobile' => $row->mobile,
                        'hometel' => $row->hometel,
                        'idnum' => $row->idnum);

    }
    $this->load->view('edit_user', $data);
}

查看

<div id="body">
        <p>Edit user information.</p>

    <?php 


    echo form_open('user_admin/user_update', $results);

    echo validation_errors();

    echo "<p><lable>Email:</lable>";
    echo form_input('email', set_value('email'));
    echo "</p>";


    echo "<p><lable>Name:</lable>";
    echo form_input('name', set_value('name'));
    echo "</p>";

    echo "<p>";
    echo form_submit('edit_submit', 'Update');
    echo "</p>";

    echo form_close();

    ?> 

我一直收到此错误

遇到PHP错误

严重程度:4096

消息:类stdClass的对象无法转换为字符串

文件名:helpers / form_helper.php

行号:1010

2 个答案:

答案 0 :(得分:0)

第一件事。您期望从数据库返回一行,对吗?但是你在控制器中循环结果。而不是在你的模型中这样做:

return $query->result();

这样做:

return $query->row();

并从控制器中删除foreach循环(它甚至有一个未使用的$ key var)。您最终会拥有更清洁,更短的代码。只有当你获得一行时,情况似乎就是这样。

继续前进。

您是否在此处阅读了文档:https://ellislab.com/codeigniter/user-guide/helpers/form_helper.html

form_open('user_admin/user_update', $results); - 你想在这做什么?

使用第二个参数将属性传递给开始标记。现在查看代码,$ results数组包含每个字段的值。把所有这些都推到表格开头标签中没有多大意义,是吗?

使用正确值进行场渲染。

这是文档中如何配置和呈现输入字段的示例:

$data = array(
              'name'        => 'username',
              'id'          => 'username',
              'value'       => 'johndoe',
              'maxlength'   => '100',
              'size'        => '50',
              'style'       => 'width:50%',
            );

echo form_input($data);

因此,您的电子邮件输入应格式化为具有以下最小配置:

$data = array(
              'name'        => 'email',
              'value'       => $results['email']
            );

echo form_input('email', $data);

在验证时(在user_admin控制器中的user_update()方法中),您必须执行一些逻辑来捕获您正在验证的值。所以你需要这样的东西:

$results['email'] = set_value('email');

希望有意义!

答案 1 :(得分:0)

非常感谢你的帮助。我确定你一定意识到我是Codeigniter的新手,但在你的帮助下,我能够解决我遇到的问题。

我更改了查询,只返回找到的一个结果,就像你建议的那样

return $query->row();

你是对的我不需要foreach循环来填充数组以传递给视图。

感谢您指出我尝试将db中的结果作为表单的属性传递。:)

我在下面为我遇到同样问题的人添加了我的代码。也许它会帮助他们。

我的控制器

    public function get_user_edit($id)
{
    $this->load->model('model_users'); //Load the user model

    //Get the database results from the model

    $data['results'] = $this->model_users->edit_user($id);
    $this->load->view('edit_user', $data);
}

我的模特

    //This fetches the selected users information for editing.
public function edit_user($id)
{
    $this->db->select('id, email, name, lastname, homeaddress, posteladdress, 
    mobile, hometel, idnum');
    $this->db->where('id', $id)->limit(1);
    $query = $this->db->get('user');
    return $query->row();

}

我的观点

<div id="container">
<h1>Edit user</h1>

<div id="body">
        <p>Edit user information.</p>

    <?php 



    echo form_open('user_admin/user_update');

    echo validation_errors();

    echo form_hidden('id', $results->id);

    echo "<p><lable>Email:</lable>";
    echo form_input('email', $results->email);
    echo "</p>";


    echo "<p><lable>Name:</lable>";
    echo form_input('name', $results->name);
    echo "</p>";

    echo "<p><lable>Last name:</lable>";
    echo form_input('lastname', $results->lastname);
    echo "</p>";

    echo "<p><lable>Home address:</lable>";
    echo form_input('homeaddress', $results->homeaddress);
    echo "</p>";

    echo "<p><lable>Postal address:</lable>";
    echo form_input('posteladdress', $results->posteladdress);
    echo "</p>";

    echo "<p><lable>Mobile number:</lable>";
    echo form_input('mobile', $results->mobile);
    echo "</p>";

    echo "<p><lable>Home telephone:</lable>";
    echo form_input('hometel', $results->hometel);
    echo "</p>";

    echo "<p><lable>ID number:</lable>";
    echo form_input('idnum', $results->idnum);
    echo "</p>";

    echo "<p>";
    echo form_submit('edit_submit', 'Update');
    echo "</p>";

    echo form_close();

    ?> 

    </div>