为什么即使更新过程在数据库上成功,我也会收到“功能参数太少”的警告?

时间:2017-09-08 15:57:16

标签: php codeigniter

所以这是错误:

  

消息:函数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,但没有运气。

1 个答案:

答案 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}"); ?>">