我一直致力于新的CodeIgniter应用程序,到目前为止,我已经能够创建" page_categories"进入表格,现在我的问题是当我尝试更新某个类别时。
我们说在page_categories表上有两条记录:
好的,现在更具体的是当我尝试更改" Page Category Two"我的表单更新了第一个记录" Page Category One"而不是更改该名称。知道如何解决这个问题吗?
这就是我在控制器上的内容:
public function edit($id){
$this->form_validation->set_rules('name', 'Name', 'trim|required|min_length[3]');
if($this->form_validation->run() == FALSE){
// Get Current Subject
$data['item'] = $this->Pages_categories_model->get($id);
// Load template
$this->template->load('admin', 'default', 'pages_categories/edit', $data);
} else {
$old_name = $this->Pages_categories_model->get($id)->name;
$new_name = $this->input->post('name');
// Create Post Array
$data = array(
'name' => $this->input->post('name')
);
// Insert Subject
$this->Pages_categories_model->update($id, $data);
// Activity Array
$data = array(
'resource_id' => $this->db->insert_id(),
'type' => 'subject',
'action' => 'updated',
'user_id' => 1,
'message' => 'A page category ('.$old_name.') was renamed to ('.$new_name.')'
);
// Insert Activity
$this->Activity_model->add($data);
// Set Message
$this->session->set_flashdata('success', 'Page category has been updated');
//Redirect
redirect('admin/pages_categories');
}
}
这就是我在模特身上所拥有的:
<?php
class Pages_categories_model extends CI_MODEL{
function __construct(){
parent::__construct();
$this->table = 'pages_categories';
}
public function get_list(){
$query = $this->db->get($this->table);
return $query->result();
}
public function get($id){
$query = $this->db->get($this->table);
$this->db->where('id', $id);
return $query->row();
}
public function add($data){
$this->db->insert($this->table, $data);
}
public function update($id, $data){
$this->db->where('id', $id);
$this->db->update($this->table, $data);
}
public function delete($id){
$this->db->where('id', $id);
$this->db->delete($this->table);
}
}
最后我的观点:
<h2 class="page-header">Edit Page Category</h2>
<?php echo form_open('admin/pages_categories/edit/'.$item->id); ?>
<div class="form-group">
<?php echo form_label('Page Category Name', 'name'); ?>
<?php
$data = array(
'name' => 'name',
'id' => 'name',
'maxlength' => '100',
'class' => 'form-control',
'value' => $item->name,
);
?>
<?php echo form_input($data); ?>
</div>
<?php echo form_submit('mysubmit', 'Update Page Category', array('class' => 'btn btn-primary')); ?>
<?php echo form_close(); ?>
我想说我的flash数据消息没有按预期工作。 (虽然它并不重要。)
我希望flash数据消息以不同的视图显示;这是我的观点:
<h2 class="page-header">Page Categories</h2>
<?php $CI =& get_instance(); if($CI->session->flashdata('success'){ ?>
<div class="alert alert-success">
<strong>Success!! </strong><?php echo $this->session->flashdata('success'); ?>
</div>
<?php } ?>
<?php if($this->session->flashdata('error')) : ?>
<?php echo '<div class="alert alert-danger">'.$this->session->flashdata('error').'</div>'; ?>
<?php endif; ?>
<?php if($subjects) : ?>
<table class="table table-striped">
<tr>
<th>ID</th>
<th>Name</th>
<th>Date Created</th>
<th></th>
</tr>
<?php foreach($subjects as $subject) : ?>
<?php $date = strtotime($subject->create_date); ?>
<?php $formatted_date = date('F j, Y, g:i a', $date); ?>
<tr>
<td><?php echo $subject->id; ?></td>
<td><?php echo $subject->name; ?></td>
<td><?php echo $formatted_date; ?></th>
<td>
<?php echo anchor('admin/pages_categories/edit/'.$subject->id.'', 'Edit', 'class="btn btn-default"'); ?>
<?php echo anchor('admin/pages_categories/delete/'.$subject->id.'', 'Delete', 'class="btn btn-danger"'); ?>
</td>
</tr>
<?php endforeach; ?>
</table>
<?php else : ?>
<div class="alert alert-danger">No Page Category Found</div>
<?php endif; ?>
&#13;
答案 0 :(得分:1)
在模型中的此代码中添加查询前的where子句
public function get($id){
$this->db->where('id', $id); // Give where clause before query
$query = $this->db->get($this->table);
return $query->row();
}
编辑:为flashdata添加答案
嗯,对于flashdata,您必须直接致电$_SESSION
。资料来源:codeigniter documentation here
所以而不是
<?php $CI =& get_instance(); if($CI->session->flashdata('success'){ ?>
写
<?php if(isset($_SESSION['success']) { ?>
答案 1 :(得分:0)
您是否尝试过回显控制器中的$id
?您的代码似乎没有任何问题。
关于Flash数据,您不会在视图中的任何位置使用它。这就是它没有被显示的原因。
<?php $CI =& get_instance(); if($CI->session->flashdata('success'){ ?>
<div class="alert alert-success">
<strong>Success!! </strong><?php echo $this->session->flashdata('success'); ?>
</div>
<?php } ?>
这样可以正常工作。