所以这是错误:
消息:函数Admin :: edit_item()的参数太少,传入0 ..正好是预期的
/*
* Edit Item
*/
public function edit_item($id) {
// Validate Rules
$this->form_validation->set_rules('item_name','Item Name','trim|required|min_length[2]|max_length[30]');
$this->form_validation->set_rules('price','Price','trim|required|is_natural_no_zero');
$this->form_validation->set_rules('description','Description','trim|required|min_length[2]|max_length[500]');
$this->form_validation->set_rules('quantity','Quantity','trim|required|is_natural_no_zero');
// Get Item Details
$data['products'] = $this->Product_model->get_product_details($id);
if ($this->form_validation->run() == FALSE) {
// Load view
$data['main_content'] = 'admin_edit_item';
$this->load->view('layouts/main_admin', $data);
}
else
{
if ($_FILES['userfile']['size'] == 0 && $_FILES['userfile']['error'] == 0) {
// If There Is No Image Uploaded
$product_update = $this->Product_model->update_item();
if (!$product_update)
{
$this->session->set_flashdata('failed_edit_item', 'The Item Failed To Be Edited');
redirect('admin/edit_item');
}
else
{
$this->session->set_flashdata('success_edit_item', 'The Item Is Successfully Edited');
redirect('admin/edit_item');
}
}
else
{
// Update The Database
$this->Product_model->update_item();
$product_id = $this->input->post('product_id');
// Set Config For Uploading Image
$config['upload_path'] = './assets/images/product/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 10000;
$config['max_width'] = 225;
$config['max_height'] = 225;
$config['file_name'] = $product_id;
$this->load->library('upload', $config);
$this->upload->overwrite = true;
if ( ! $this->upload->do_upload('userfile'))
{
$this->session->set_flashdata('failed_edit_item', 'The Item Failed To Be Edited');
redirect('admin/edit_item');
}
else
{
// After Image Get Uploaded, Adjust The Image Field On The Database
$success_data['image_name'] = $this->upload->data('file_name');
$success_data['id'] = $product_id;
$update = $this->Product_model->adjust_image($success_data);
if($update) {
$this->session->set_flashdata('success_edit_item', 'The Item Is Successfully Edited');
redirect('admin/edit_item');
}
}
}
}
}
在admin_edit_item视图中
这是表格头
<form method="post" accept-charset="utf-8" enctype="multipart/form-data" action="<?php echo base_url(); ?>admin/edit_item/<?php echo $products->id; ?>">
如您所见,我已经在表单上设置了操作,
所以,它应该工作。
我的意思是,即使我得到了这个错误,当我重新加载数据库时,
数据已根据我更改的编辑数据进行更新
但我仍然得到那个错误
我试图找到这个bug,但没有运气。
答案 0 :(得分:0)
警告告诉您$products->id
未被传递。我不知道为什么不......看起来应该这样。
请注意,这是警告而不是致命错误,这意味着方法edit_item($id)
仍会运行。为什么它的工作原理并不明确,主要是因为你没有共享Product_model->update_item()
的代码,我认为这是代码更新的地方。 (update_item()
如何知道要更新的项目?)
由于这行代码
$product_id = $this->input->post('product_id');
“product_id”值似乎是一个表单字段。
也许使用方法顶部的上述代码来获取值而不是尝试通过URL将其传递给方法将有助于解决您的问题。
我建议你重写你的表单html(没有product_id),如下所示
<form method="post" accept-charset="utf-8" enctype="multipart/form-data"
action="<?php echo base_url('admin/edit_item'); ?>">
以上内容可以更好地使用base_url()
(documentation here。)并且更易于阅读。
如果您坚持通过URL传递数据,则可以执行此操作
<form method="post" accept-charset="utf-8" enctype="multipart/form-data"
action="<?php echo base_url("admin/edit_item/{$products->id}"); ?>">