title: Product Table Inline Editing isn't Working in opencart - Call to a member function post() on null
body: <p>Product table inline Editing isn't working  in opencart 2.3.0.2.  I get the edited table values using ajax format and try to move in controller but its not working. Its show  <strong><b>Fatal error</b>:  Call to a member function post() on null</strong>. See Below codes. Give any solutions for that.</p>
  
  <p><strong>View File Code:</strong></p>
  
  <pre><code>&lt;?php echo $header; ?&gt;&lt;?php echo $column_left; ?&gt;
  &lt;div id="content"&gt;
    &lt;div class="page-header"&gt;
      &lt;div class="container-fluid"&gt;
        &lt;div class="pull-right"&gt;&lt;a href="&lt;?php echo $add; ?&gt;" data-toggle="tooltip" title="&lt;?php echo $button_add; ?&gt;" class="btn btn-primary"&gt;&lt;i class="fa fa-plus"&gt;&lt;/i&gt;&lt;/a&gt;
          &lt;button type="submit" form="form-product" formaction="&lt;?php echo $copy; ?&gt;" data-toggle="tooltip" title="&lt;?php echo $button_copy; ?&gt;" class="btn btn-default"&gt;&lt;i class="fa fa-copy"&gt;&lt;/i&gt;&lt;/button&gt;
          &lt;button type="button" data-toggle="tooltip" title="&lt;?php echo $button_delete; ?&gt;" class="btn btn-danger" onclick="confirm('&lt;?php echo $text_confirm; ?&gt;') ? $('#form-product').submit() : false;"&gt;&lt;i class="fa fa-trash-o"&gt;&lt;/i&gt;&lt;/button&gt;
        &lt;/div&gt;
        &lt;h1&gt;&lt;?php echo $heading_title; ?&gt;&lt;/h1&gt;
        &lt;ul class="breadcrumb"&gt;
          &lt;?php foreach ($breadcrumbs as $breadcrumb) { ?&gt;
          &lt;li&gt;&lt;a href="&lt;?php echo $breadcrumb['href']; ?&gt;"&gt;&lt;?php echo $breadcrumb['text']; ?&gt;&lt;/a&gt;&lt;/li&gt;
          &lt;?php } ?&gt;
        &lt;/ul&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="container-fluid"&gt;
      &lt;?php if ($error_warning) { ?&gt;
      &lt;div class="alert alert-danger"&gt;&lt;i class="fa fa-exclamation-circle"&gt;&lt;/i&gt; &lt;?php echo $error_warning; ?&gt;
        &lt;button type="button" class="close" data-dismiss="alert"&gt;&amp;times;&lt;/button&gt;
      &lt;/div&gt;
      &lt;?php } ?&gt;
      &lt;?php if ($success) { ?&gt;
      &lt;div class="alert alert-success"&gt;&lt;i class="fa fa-check-circle"&gt;&lt;/i&gt; &lt;?php echo $success; ?&gt;
        &lt;button type="button" class="close" data-dismiss="alert"&gt;&amp;times;&lt;/button&gt;
      &lt;/div&gt;
      &lt;?php } ?&gt;
      &lt;div class="panel panel-default"&gt;
        &lt;div class="panel-heading"&gt;
          &lt;h3 class="panel-title"&gt;&lt;i class="fa fa-list"&gt;&lt;/i&gt; &lt;?php echo $text_list; ?&gt;&lt;/h3&gt;
        &lt;/div&gt;
        &lt;div class="panel-body"&gt;
          &lt;div class="well"&gt;
            &lt;div class="row"&gt;
              &lt;div class="col-sm-4"&gt;
                &lt;div class="form-group"&gt;
                  &lt;label class="control-label" for="input-name"&gt;&lt;?php echo $entry_name; ?&gt;&lt;/label&gt;
                  &lt;input type="text" name="filter_name" value="&lt;?php echo $filter_name; ?&gt;" placeholder="&lt;?php echo $entry_name; ?&gt;" id="input-name" class="form-control" /&gt;
                &lt;/div&gt;
                &lt;div class="form-group"&gt;
                  &lt;label class="control-label" for="input-model"&gt;&lt;?php echo $entry_model; ?&gt;&lt;/label&gt;
                  &lt;input type="text" name="filter_model" value="&lt;?php echo $filter_model; ?&gt;" placeholder="&lt;?php echo $entry_model; ?&gt;" id="input-model" class="form-control" /&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="col-sm-4"&gt;
                &lt;div class="form-group"&gt;
                  &lt;label class="control-label" for="input-price"&gt;&lt;?php echo $entry_price; ?&gt;&lt;/label&gt;
                  &lt;input type="text" name="filter_price" value="&lt;?php echo $filter_price; ?&gt;" placeholder="&lt;?php echo $entry_price; ?&gt;" id="input-price" class="form-control" /&gt;
                &lt;/div&gt;
                &lt;div class="form-group"&gt;
                  &lt;label class="control-label" for="input-quantity"&gt;&lt;?php echo $entry_quantity; ?&gt;&lt;/label&gt;
                  &lt;input type="text" name="filter_quantity" value="&lt;?php echo $filter_quantity; ?&gt;" placeholder="&lt;?php echo $entry_quantity; ?&gt;" id="input-quantity" class="form-control" /&gt;
                &lt;/div&gt;
              &lt;/div&gt;
              &lt;div class="col-sm-4"&gt;
                &lt;div class="form-group"&gt;
                  &lt;label class="control-label" for="input-status"&gt;&lt;?php echo $entry_status; ?&gt;&lt;/label&gt;
                  &lt;select name="filter_status" id="input-status" class="form-control"&gt;
                    &lt;option value="*"&gt;&lt;/option&gt;
                    &lt;?php if ($filter_status) { ?&gt;
                    &lt;option value="1" selected="selected"&gt;&lt;?php echo $text_enabled; ?&gt;&lt;/option&gt;
                    &lt;?php } else { ?&gt;
                    &lt;option value="1"&gt;&lt;?php echo $text_enabled; ?&gt;&lt;/option&gt;
                    &lt;?php } ?&gt;
                    &lt;?php if (!$filter_status &amp;&amp; !is_null($filter_status)) { ?&gt;
                    &lt;option value="0" selected="selected"&gt;&lt;?php echo $text_disabled; ?&gt;&lt;/option&gt;
                    &lt;?php } else { ?&gt;
                    &lt;option value="0"&gt;&lt;?php echo $text_disabled; ?&gt;&lt;/option&gt;
                    &lt;?php } ?&gt;
                  &lt;/select&gt;
                &lt;/div&gt;
                &lt;div class="form-group"&gt;
                  &lt;label class="control-label" for="input-image"&gt;&lt;?php echo $entry_image; ?&gt;&lt;/label&gt;
                  &lt;select name="filter_image" id="input-image" class="form-control"&gt;
                    &lt;option value="*"&gt;&lt;/option&gt;
                    &lt;?php if ($filter_image) { ?&gt;
                    &lt;option value="1" selected="selected"&gt;&lt;?php echo $text_enabled; ?&gt;&lt;/option&gt;
                    &lt;?php } else { ?&gt;
                    &lt;option value="1"&gt;&lt;?php echo $text_enabled; ?&gt;&lt;/option&gt;
                    &lt;?php } ?&gt;
                    &lt;?php if (!$filter_image &amp;&amp; !is_null($filter_image)) { ?&gt;
                    &lt;option value="0" selected="selected"&gt;&lt;?php echo $text_disabled; ?&gt;&lt;/option&gt;
                    &lt;?php } else { ?&gt;
                    &lt;option value="0"&gt;&lt;?php echo $text_disabled; ?&gt;&lt;/option&gt;
                    &lt;?php } ?&gt;
                  &lt;/select&gt;
                &lt;/div&gt;
                &lt;div class="col-sm-12"&gt;
                  &lt;div class="form-group"&gt;
                    &lt;label class="control-label" for="input-date"&gt;&lt;?php echo $entry_date; ?&gt;&lt;/label&gt;
                    &lt;input type="text" name="filter_date" value="&lt;?php echo $filter_date; ?&gt;" placeholder="&lt;?php echo $entry_date; ?&gt;" id="input-date" class="form-control" /&gt;
                  &lt;/div&gt;
                  &lt;!--&lt;div class="form-group"&gt;
                   &lt;label class="control-label" for="input-quantity"&gt;&lt;?php //echo $entry_quantity; ?&gt;&lt;/label&gt;
                   &lt;input type="text" name="filter_quantity" value="&lt;?php //echo $filter_quantity; ?&gt;" placeholder="&lt;?php //echo $entry_quantity; ?&gt;" id="input-quantity" class="form-control" /&gt;
                 &lt;/div&gt;--&gt;
              &lt;/div&gt;
                &lt;button type="button" id="button-filter" class="btn btn-primary pull-right"&gt;&lt;i class="fa fa-filter"&gt;&lt;/i&gt; &lt;?php echo $button_filter; ?&gt;&lt;/button&gt;
              &lt;/div&gt;
            &lt;/div&gt;
          &lt;/div&gt;
          &lt;form action="&lt;?php echo $delete; ?&gt;" method="post" enctype="multipart/form-data" id="form-product"&gt;
            &lt;div class="table-responsive"&gt;
              &lt;table class="table table-bordered table-hover"&gt;
                &lt;thead&gt;
                  &lt;tr&gt;
                    &lt;td style="width: 1px;" class="text-center"&gt;&lt;input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" /&gt;&lt;/td&gt;
                    &lt;td class="text-center"&gt;&lt;?php echo $column_image; ?&gt;&lt;/td&gt;
                    &lt;td class="text-left"&gt;&lt;?php if ($sort == 'pd.name') { ?&gt;
                      &lt;a href="&lt;?php echo $sort_name; ?&gt;" class="&lt;?php echo strtolower($order); ?&gt;"&gt;&lt;?php echo $column_name; ?&gt;&lt;/a&gt;
                      &lt;?php } else { ?&gt;
                      &lt;a href="&lt;?php echo $sort_name; ?&gt;"&gt;&lt;?php echo $column_name; ?&gt;&lt;/a&gt;
                      &lt;?php } ?&gt;&lt;/td&gt;
                    &lt;td class="text-left"&gt;&lt;?php if ($sort == 'p.model') { ?&gt;
                      &lt;a href="&lt;?php echo $sort_model; ?&gt;" class="&lt;?php echo strtolower($order); ?&gt;"&gt;&lt;?php echo $column_model; ?&gt;&lt;/a&gt;
                      &lt;?php } else { ?&gt;
                      &lt;a href="&lt;?php echo $sort_model; ?&gt;"&gt;&lt;?php echo $column_model; ?&gt;&lt;/a&gt;
                      &lt;?php } ?&gt;&lt;/td&gt;
                    &lt;td class="text-left"&gt;&lt;?php if ($sort == 'p.seo') { ?&gt;
                      &lt;a href="&lt;?php echo $sort_model; ?&gt;" class="&lt;?php //echo strtolower($order); ?&gt;"&gt;&lt;?php echo $column_seo; ?&gt;&lt;/a&gt;
                      &lt;?php } else { ?&gt;
                      &lt;a href="&lt;?php echo $sort_model; ?&gt;"&gt;&lt;?php echo $column_seo; ?&gt;&lt;/a&gt;
                      &lt;?php } ?&gt;&lt;/td&gt; 
                    &lt;td class="text-left"&gt;&lt;?php if ($sort == 'p.date') { ?&gt;
                      &lt;a href="&lt;?php echo $sort_model; ?&gt;" class="&lt;?php //echo strtolower($order); ?&gt;"&gt;&lt;?php echo $column_date; ?&gt;&lt;/a&gt;
                      &lt;?php } else { ?&gt;
                      &lt;a href="&lt;?php echo $sort_model; ?&gt;"&gt;&lt;?php echo $column_date; ?&gt;&lt;/a&gt;
                      &lt;?php } ?&gt;&lt;/td&gt;     
                    &lt;td class="text-right"&gt;&lt;?php if ($sort == 'p.price') { ?&gt;
                      &lt;a href="&lt;?php echo $sort_price; ?&gt;" class="&lt;?php echo strtolower($order); ?&gt;"&gt;&lt;?php echo $column_price; ?&gt;&lt;/a&gt;
                      &lt;?php } else { ?&gt;
                      &lt;a href="&lt;?php echo $sort_price; ?&gt;"&gt;&lt;?php echo $column_price; ?&gt;&lt;/a&gt;
                      &lt;?php } ?&gt;&lt;/td&gt;
                    &lt;td class="text-right"&gt;&lt;?php if ($sort == 'p.quantity') { ?&gt;
                      &lt;a href="&lt;?php echo $sort_quantity; ?&gt;" class="&lt;?php echo strtolower($order); ?&gt;"&gt;&lt;?php echo $column_quantity; ?&gt;&lt;/a&gt;
                      &lt;?php } else { ?&gt;
                      &lt;a href="&lt;?php echo $sort_quantity; ?&gt;"&gt;&lt;?php echo $column_quantity; ?&gt;&lt;/a&gt;
                      &lt;?php } ?&gt;&lt;/td&gt;
                    &lt;td class="text-left"&gt;&lt;?php if ($sort == 'p.status') { ?&gt;
                      &lt;a href="&lt;?php echo $sort_status; ?&gt;" class="&lt;?php echo strtolower($order); ?&gt;"&gt;&lt;?php echo $column_status; ?&gt;&lt;/a&gt;
                      &lt;?php } else { ?&gt;
                      &lt;a href="&lt;?php echo $sort_status; ?&gt;"&gt;&lt;?php echo $column_status; ?&gt;&lt;/a&gt;
                      &lt;?php } ?&gt;&lt;/td&gt;
  
                    &lt;td class="text-right"&gt;&lt;?php echo $column_action; ?&gt;&lt;/td&gt;
                  &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                  &lt;?php if ($products) { ?&gt;
                  &lt;?php foreach ($products as $product) { ?&gt;
                  &lt;tr id = "&lt;?php $product['product_id'];?&gt;" &gt;
                    &lt;td class="text-center"&gt;&lt;?php if (in_array($product['product_id'], $selected)) { ?&gt;
                      &lt;input type="checkbox" name="selected[]" value="&lt;?php echo $product['product_id']; ?&gt;" checked="checked" /&gt;
                      &lt;?php } else { ?&gt;
                      &lt;input type="checkbox" name="selected[]" value="&lt;?php echo $product['product_id']; ?&gt;" /&gt;
                      &lt;?php } ?&gt;&lt;/td&gt;
  
                    &lt;td class="text-center"&gt;&lt;?php if ($product['image']) { ?&gt;
                      &lt;img src="&lt;?php echo $product['image']; ?&gt;" alt="&lt;?php echo $product['name']; ?&gt;" class="img-thumbnail" /&gt;
                      &lt;?php } else { ?&gt;
                      &lt;span class="img-thumbnail list"&gt;&lt;i class="fa fa-camera fa-2x"&gt;&lt;/i&gt;&lt;/span&gt;
                      &lt;?php } ?&gt;&lt;/td&gt;
                    &lt;td class="text-left"&gt;&lt;?php echo $product['name']; ?&gt;&lt;/td&gt;
                    &lt;td class="text-left"&gt;&lt;?php echo $product['model']; ?&gt;&lt;/td&gt;
                    &lt;td class="text-left"&gt;&lt;?php echo $product['keyword']; ?&gt;&lt;/td&gt;
                    &lt;td class="text-left"&gt;&lt;?php echo $product['date_available']; ?&gt;&lt;/td&gt;
  
                    &lt;td contenteditable="true" onblur = "update(this, 'price','&lt;?php echo $product['product_id']; ?&gt;')" class="text-right"&gt;&lt;?php if ($product['special']) { ?&gt;
                      &lt;span style="text-decoration: line-through;"&gt;&lt;?php echo $product['price']; ?&gt;&lt;/span&gt;&lt;br/&gt;
                      &lt;div class="text-danger"&gt;&lt;?php echo $product['special']; ?&gt;&lt;/div&gt;
                      &lt;?php } else { ?&gt;
                      &lt;?php echo $product['price']; ?&gt;
                      &lt;?php } ?&gt;&lt;!--&lt;input type="text" id="price_&lt;?php //echo $product['product_id']; ?&gt;" class="inline_edit" value="&lt;?php //echo $product['price']; ?&gt;"&gt;--&gt;&lt;/td&gt;
  
                    &lt;td contenteditable="true" onblur = "update(this, 'quantity','&lt;?php echo $product['product_id']; ?&gt;')" class="text-right"&gt;&lt;?php if ($product['quantity'] &lt;= 0) { ?&gt;
                      &lt;span class="label label-warning"&gt;&lt;?php echo $product['quantity']; ?&gt;&lt;/span&gt;
                      &lt;?php } elseif ($product['quantity'] &lt;= 5) { ?&gt;
                      &lt;span class="label label-danger"&gt;&lt;?php echo $product['quantity']; ?&gt;&lt;/span&gt;
                      &lt;?php } else { ?&gt;
                      &lt;span class="label label-success"&gt;&lt;?php echo $product['quantity']; ?&gt;&lt;/span&gt;
                      &lt;?php } ?&gt;&lt;/td&gt;
  
                    &lt;td class="text-left"&gt;&lt;?php echo $product['status']; ?&gt;&lt;/td&gt;
  
                    &lt;td class="text-left"&gt;&lt;a href="&lt;?php echo $product['edit']; ?&gt;" data-toggle="tooltip" title="&lt;?php echo $button_edit; ?&gt;" class="btn btn-primary"&gt;&lt;i class="fa fa-pencil"&gt;&lt;/i&gt;&lt;/a&gt;
  
                    &lt;!--&lt;a href="&lt;?php echo $product['inline_update']; ?&gt;" data-toggle="tooltip" title="&lt;?php //echo $button_save; ?&gt;" class="btn btn-primary"&gt;&lt;i class="fa fa-save"&gt;&lt;/i&gt;&lt;/a&gt;--&gt;&lt;/td&gt;
                  &lt;/tr&gt;
                  &lt;?php } ?&gt;
                  &lt;?php } else { ?&gt;
                  &lt;tr&gt;
                    &lt;td class="text-center" colspan="8"&gt;&lt;?php echo $text_no_results; ?&gt;&lt;/td&gt;
                  &lt;/tr&gt;
                  &lt;?php } ?&gt;
                &lt;/tbody&gt;
              &lt;/table&gt;
            &lt;/div&gt;
          &lt;/form&gt;
          &lt;div class="row"&gt;
            &lt;div class="col-sm-6 text-left"&gt;&lt;?php echo $pagination; ?&gt;&lt;/div&gt;
            &lt;div class="col-sm-6 text-right"&gt;&lt;?php echo $results; ?&gt;&lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  
    &lt;script type="text/javascript"&gt;&lt;!--
  $('#button-filter').on('click', function() {
      var url = 'index.php?route=catalog/product&amp;token=&lt;?php echo $token; ?&gt;';
  
      var filter_name = $('input[name=\'filter_name\']').val();
  
      if (filter_name) {
          url += '&amp;filter_name=' + encodeURIComponent(filter_name);
      }
  
      var filter_model = $('input[name=\'filter_model\']').val();
  
      if (filter_model) {
          url += '&amp;filter_model=' + encodeURIComponent(filter_model);
      }
  
      var filter_price = $('input[name=\'filter_price\']').val();
  
      if (filter_price) {
          url += '&amp;filter_price=' + encodeURIComponent(filter_price);
      }
  
      var filter_quantity = $('input[name=\'filter_quantity\']').val();
  
      if (filter_quantity) {
          url += '&amp;filter_quantity=' + encodeURIComponent(filter_quantity);
      }
  
      var filter_status = $('select[name=\'filter_status\']').val();
  
      if (filter_status != '*') {
          url += '&amp;filter_status=' + encodeURIComponent(filter_status);
      }
  
     var filter_image = $('select[name=\'filter_image\']').val();
  
     if (filter_image != '*') {
          url += '&amp;filter_image=' + encodeURIComponent(filter_image);
     }
  
     var filter_date = $('input[name=\'filter_date\']').val();
  
     if (filter_date) {
          url += '&amp;filter_date=' + encodeURIComponent(filter_date);
      }
  
      location = url;
  });
  //--&gt;&lt;/script&gt;
  &lt;script type = "text/javascript"&gt;
  
  function update(editableObj, column, product_id)
  {
      // if(confirm('Are you sure Update this data?'))
      // {
          //console.log(editableObj, column, product_id);
          // return false;
          $.ajax({
              url: "index.php?route=catalog/product/update&amp;token=&lt;?php echo $token; ?&gt;",
              type: "POST",
              //dataType: "JSON",
              data: "column="+column+"&amp;value="+editableObj.innerHTML+"&amp;product_id="+product_id,
              success: function(data) {
                  // set updated value as old value
                  $(editableObj).attr('data-old_value',editableObj.innerHTML);
                  //$(editableObj).css("background","#FDFDFD");
                  console.log(data);
                  },
              // error: function (data) {
                  // console.log(data);
              // }
  
          });
      // }    
  }
  &lt;/script&gt;
    &lt;script type="text/javascript"&gt;&lt;!--
  $('input[name=\'filter_name\']').autocomplete({
      'source': function(request, response) {
          $.ajax({
              url: 'index.php?route=catalog/product/autocomplete&amp;token=&lt;?php echo $token; ?&gt;&amp;filter_name=' +  encodeURIComponent(request),
              dataType: 'json',
              success: function(json) {
                  response($.map(json, function(item) {
                      return {
                          label: item['name'],
                          value: item['product_id']
                      }
                  }));
              }
          });
      },
      'select': function(item) {
          $('input[name=\'filter_name\']').val(item['label']);
      }
  });
  
  $('input[name=\'filter_model\']').autocomplete({
      'source': function(request, response) {
          $.ajax({
              url: 'index.php?route=catalog/product/autocomplete&amp;token=&lt;?php echo $token; ?&gt;&amp;filter_model=' +  encodeURIComponent(request),
              dataType: 'json',
              success: function(json) {
                  response($.map(json, function(item) {
                      return {
                          label: item['model'],
                          value: item['product_id']
                      }
                  }));
              }
          });
      },
      'select': function(item) {
          $('input[name=\'filter_model\']').val(item['label']);
      }
  });
  //--&gt;&lt;/script&gt;&lt;/div&gt;
  &lt;?php echo $footer; ?&gt;
  </code></pre>
  
  <p><strong>Controller File</strong></p>
  
  <pre><code>public function update() 
  {
          $product_id = $this-&gt;input-&gt;post('product_id');
          $column = $this-&gt;input-&gt;post('column');
          $editableobj = trim($this-&gt;input-&gt;post('value'));   
          $this-&gt;model_catalog_product-&gt;updateProduct($product_id, $column, $editableobj);
  
  }
  </code></pre>
  
  <p><strong>Model File</strong></p>
  
  <pre><code>public function updateProduct($product_id, $column, $editableobj)
      {
          $data = array(
              $column =&gt; $editableobj
          );
  
          $this-&gt;db-&gt;where('product_id', $product_id);
          $this-&gt;db-&gt;update('product', $data);
  
      }
  </code></pre>