Codeigniter 表单填充数据库结果不起作用

Codeigniter form populate with db results not working

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

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

型号

    //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

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

文件名:helpers/form_helper.php

行号:1010

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

return $query->result();

这样做:

return $query->row();

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

继续前进。

您是否阅读过此处的文档: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');

希望这是有道理的!

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

我将查询更改为 return 只有一个它按照您的建议找到的结果

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>