简体   繁体   中英

Codeigniter using forms for each row of the table to pass id

I have a data table that I want to edit. I currently pass the id via the url to an edit page and provide a form that loads details from the database. However if there is any validation error, the form will reset and the details will disappear. I am thinking that if each row were a form, I could post the data and even with a refresh, the id would still remain. However I am afraid how slow it would make my table. Does anyone have any other method that I may use? Thank you.

This is my code

View

<?php if($edit == "false"){
        echo form_open_multipart('Control/Products/ProductDetail/addProduct','class="productdetail"');
 }else{
        echo form_open_multipart('Control/Products/ProductDetail/editProduct','class="productdetail"');
       }?>
                            <label for="inputproductname">Product Name</label>
                            <input type="text" class="form-control" id="inputproductname" name="inputproductname" placeholder="Name" value="<?php echo $name; ?>">
                            <label for="inputproductdescription">Product Description</label>
                            <textarea class="form-control" id="inputproductdescription" name="inputproductdescription" placeholder="Description" rows="7" 
                            ><?php echo $description; ?></textarea>
                            <label for="inputproductprice">Product Price</label>
                            <input type="price" class="form-control" id="inputproductprice" name="inputproductprice" placeholder="Price" value="<?php echo $price; ?>">
                            <label for="inputproductimage">Product Image</label>
                            <p><input type="file" class="form-control-file" name="upload" id="upload" aria-describedby="fileHelp"></p>
                            <input type="hidden" class="form-control" id="inputcurrentid" name="inputcurrentid" value="<?php echo $currentid; ?>">
                            <input type="hidden" class="form-control" id="inputcurrentstatus" name="inputcurrentstatus" value="<?php echo $currentstatus; ?>">
            <button type="submit" class="btn btn-primary">
                     <?php if($edit == "false"){
                         echo "Add";
                      }else{
                          echo "Edit";
                      }?>
             </button>
<a href="<?php echo base_url();?>Control/Products/Products">Cancel</a>
<?php echo form_close(); ?>
<?php echo validation_errors(); ?>
<p><?php echo $this->session->flashdata('Form'); ?></p> 

Controller

public function index(){
      $productid = $this->uri->segment(5);
      $editstatus = $this->uri->segment(6);
      if($editstatus == "false"){
          $data['name'] = '';
          $data['description'] = '';
          $data['price'] = '';
          $data['edit'] = "false";
          $data['message']='';
          $data['currentid'] = '';
          $data['currentstatus'] = '';
      }else{
          $product = $this->ProductsModel->getProduct($productid);
          foreach ($product as $productdetail){
            $data['name'] = $productdetail->name;
            $data['description'] = $productdetail->description;
            $data['price'] = $productdetail->price;
          }
          $data['edit'] = "true";
          $data['message']='';
          $data['currentid'] = $productid;
          $data['currentstatus'] = $editstatus;
      }
      $this->load->view('control/controlMenu/navigationLink');
      $this->load->view('control/controlProducts/productDetail',$data);
      $this->load->view('control/controlMenu/navigationJquery');
    }

public function editProduct(){
      $this->form_validation->set_error_delimiters('<p class="error">', '</p>');
      $this->form_validation->set_rules('inputproductname', 'Name', 'trim|required');
      $this->form_validation->set_rules('inputproductdescription', 'Description', 'trim|required');
      $this->form_validation->set_rules('inputproductprice', 'Price', 'trim|required');
      if (empty($_FILES['userfile']['name']))
      {
          $this->form_validation->set_rules('upload', 'Image', 'required');
      }

      $inputproductname = $this->input->post('inputproductname');
      $inputproductdescription = $this->input->post('inputproductdescription');
      $inputproductprice = $this->input->post('inputproductprice');
      $inputdateadded = date('Y-m-d');
      $inputcurrentid = $this->input->post('inputcurrentid');
      $inputcurrentstatus = $this->input->post('inputcurrentstatus');

      $config['upload_path'] = $this->getProductImageFolderPath();
      $config['allowed_types'] = 'jpg|jpeg|png'; 
      $config['max_size'] = 3000;  
      $config['remove_spaces'] = TRUE;
      $config['overwrite'] = TRUE;
      $config['file_name'] = $inputproductname;
      $this->load->library('upload', $config);


      if($this->form_validation->run()==false){
          redirect('/Control/Products/ProductDetail/index/'.$inputcurrentid.'/'.$inputcurrentstatus);
        }else{
          if(!$this->upload->do_upload('upload')){
            $this->session->set_flashdata('Form',$this->upload->display_errors());
            redirect('Control/'.$this->getCurrentModule().'/'.$this->getClassName());
          }else{
              $extension = $this->upload->data('file_ext');
              $productdetails = array(
                'name'=>$inputproductname,
                'description'=>$inputproductdescription,
                'price'=>$inputproductprice,
                'imagePath'=>$config['upload_path'].$config['file_name'].$extension,
                'dateAdded'=>$inputdateadded
              );
              $this->db->trans_start();
              $this->ProductsModel->editProduct($productid,$productdetails);
              $this->db->trans_complete();
              if($this->db->trans_status()===false){

              }else{
                  $this->session->set_flashdata('Form', $inputproductname . ' has been altered on the database');
                  redirect('/Control/Products/Products');
              }
          }
        }
  }

我的建议是,你使用不同的方法来添加和编辑,或者你可以使用ajax来调用数据和setInterval函数来管理你获取数据的时间

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM