我是一个PHP和CodeIgniter的新手。我正在建立一个CRUD应用程序,期待更新操作的良好工作。
我的控制器:
class Site extends CI_Controller {
function __construct()
{
parent::__construct();
$this->is_logged_in();
}
function members_area()
{
$data = array();
if($query = $this->site_model->get_records()) // site model is autoloaded.
{
$data['records'] = $query;
}
$this->load->view('members_area', $data);
}
function create()
{
$data = array(
'title' => $this->input->post('title'),
'content' => $this->input->post('content')
);
$this->site_model->add_record($data);
$this->members_area();
}
function delete()
{
$this->site_model->delete_row();
$this->members_area();
}
function update()
{
$data = array(
'title' => $this->input->post('updtitle'),
'content' => $this->input->post('updcontent')
);
$this->site_model->update_record($data);
$this->members_area();
}
function is_logged_in()
{
$is_logged_in = $this->session->userdata('is_logged_in');
if(!isset($is_logged_in) || $is_logged_in != true)
{
$this->load->view('login_form');
}
}
}我的模型:
class Site_model extends CI_Model {
function get_records()
{
$query = $this->db->get('data');
return $query->result();
}
function add_record($data)
{
$this->db->insert('data', $data);
return;
}
function delete_row()
{
$this->db->where('id', $this->uri->segment(3));
$this->db->delete('data');
}
function update_record($data)
{
$this->db->where('id', $id);
$this->db->update('data', $data);
} 我的观点是:
<h2>update</h2>
<?php echo form_open('site/update');?>
<p>
<label for="update title">Update Title:</label>
<input type="text" name="updtitle" id="updtitle" />
</p>
<p>
<label for="update content">Update Content:</label>
<input type="text" name="updcontent" id="updcontent" />
</p>
<p>
<input type="submit" value="Update" />
</p>
<?php echo form_close(); ?>
<hr />如果我试图更新我的数据库中的一条记录,我在我的模型中得到一个错误("Severity: Notice","Message: Undefined variable: id"),并且更新不会发生。
我遗漏了什么?你能帮帮忙吗?谢谢。
发布于 2011-04-29 03:35:15
我通过重新运行我的应用程序找到了一个解决方案。
回声$id和$data有所帮助。没有输出任何内容,因此没有捕获任何内容。做更多的阅读可以重新设计我的应用。
现在,我依赖于要更新的记录上的URI:
1)在我的控制器中,我添加了这个更新函数
function update() {
$id = $this->uri->segment(3);
$title = $this->input->post('title');
$content = $this->input->post('content');
$this->posts_model->update_record($id, $title, $content)
} 2)在我的模型中,我添加了这个函数
function update_record($id, $title, $content) {
$data = array(
'title' => $title,
'content' => $content
);
$this->db->where('id', $id);
$this->db->update('data', $data);
} 3)最后,我创建了一个仅用于更新的视图
<?php $this->load->helper('form'); ?>
<?php echo form_open('site/update/'.$id); ?>
<?php echo form_input('title'); ?>
<?php echo form_textarea('content'); ?>
<?php echo form_submit('submit', 'Submit'); ?>
<?php echo form_close(); ? 它现在运行得很好。我所要做的就是将浏览器指向site/update/post-id_number.
我需要弄清楚的是如何裁剪界面,这样我就可以将更新的视图与我拥有的另一个视图合并。
谢谢你抽出时间来。
发布于 2011-04-28 06:58:44
您没有在模型调用中定义$id:
function update_record($data)
{
$this->db->where('id', $id);// <-- $id is not defined
$this->db->update('data', $data);
} 你也没有在你的控制器调用中使用它:
function update()
{
$data = array(
'title' => $this->input->post('updtitle'),
'content' => $this->input->post('updcontent')
);
$this->site_model->update_record($data);
$this->members_area();
// Where is id??
}https://stackoverflow.com/questions/5811230
复制相似问题