我几天来一直在尝试使用表单类来填充数据库中的文本字段。我一直在寻找如何做到这一点,没有任何运气。
请有人看看我的代码并告诉我我做错了什么。
模型
//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
答案 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>