3

I begginer for open cart, and i try build sub menu in panel admin, the file name is item.php, i just trying insert to database (head_text_field,title_text_field and max) & (table is show_product), i try follow insert data into database with codeigniter, but still error, error is Call to undefined method DB::insert() model\item\item.php

EDIT PART 1: when i remove this code in model:

return $this->db->insert('show_product', $data);

And change with this code :

$this->db->query("INSERT INTO" . DB_PREFIX . "show_product SET head_text = '" . $this->db->escape($data['head_text_field']) . "', title_text = '" . $this->db->escape($data['title_text_field']) . "', max_item = '" . $this->db->escape($data['max']) . "'");

It's work but in database still empty ???

This is controller in (controller/item/item.php)

class ControllerItemItem extends Controller { //Controller/Item/Item.php
private $error = array(); 

public function index() {
    $this->language->load('item/item');

    $this->document->setTitle($this->language->get('heading_title')); 

    $this->load->model('item/item');

    $this->getList();
}

protected function getList(){

    if (isset($this->request->get['head_text_field'])){
        $head_text_field = $this->request->get['head_text_field'];
    } else {
        $head_text_field = null;
    }

    if (isset($this->request->get['title_text_field'])){
        $title_text_field = $this->request->get['title_text_field'];
    } else {
        $title_text_field = null;
    }

    if (isset($this->request->get['max'])){
        $max = $this->request->get['max'];
    } else {
        $max = null;
    }

    if(isset($this->request->get['product'])){  // product have array in view e.g <input name=product[]>
        $product = $this->request->get['product'];
        $products = array();
        foreach($product as $p)
        {
            $products[] = array($p);
        }
    }else {
        $product = null;
    }


    // BREADCRUMBS //

    $this->data['breadcrumbs'] = array();

    $this->data['breadcrumbs'][] = array(
        'text'      => $this->language->get('text_home'),
        'href'      => $this->url->link('common/home', 'token=' . $this->session->data['token'], 'SSL'),
        'separator' => false
    );

    $this->data['breadcrumbs'][] = array(
        'text'      => $this->language->get('text_module'),
        'href'      => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'),
        'separator' => ' :: '
    );

    $this->data['breadcrumbs'][] = array(
        'text'      => $this->language->get('heading_title'),
        'href'      => $this->url->link('module/item', 'token=' . $this->session->data['token'], 'SSL'),
        'separator' => ' :: '
    );

    // END //

    // Call Language //
    $this->data['heading_title'] = $this->language->get('heading_title');
    $this->data['entry_head'] = $this->language->get('entry_head');
    $this->data['entry_title'] = $this->language->get('entry_title');
    $this->data['entry_product'] = $this->language->get('entry_product');
    $this->data['entry_max_item'] = $this->language->get('entry_max_item');
    $this->data['button_save'] = $this->language->get('button_save');
    $this->data['button_cancel'] = $this->language->get('button_cancel');

    // END //

    $this->data['cancel'] = $this->url->link('item/item', 'token=' . $this->session->data['token'], 'SSL');
    $this->data['action'] = $this->url->link('item/item/insert', 'token=' . $this->session->data['token'], 'SSL');

    $this->template = 'item/item.tpl';
    $this->children = array(
        'common/header',
        'common/footer'
    );

    $this->response->setOutput($this->render());

}

public function insert()
{
    $this->language->load('item/item');

    $this->document->setTitle($this->language->get('heading_title')); 

    $this->load->model('item/item');

    if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) {
        $this->model_item_item->insert_head($data);

        $this->session->data['success'] = $this->language->get('text_success');

        $url = '';

        $this->redirect($this->url->link('item/item', 'token=' . $this->session->data['token'] . $url, 'SSL'));
    }
}
protected function validateForm() {
    if (!$this->user->hasPermission('modify', 'catalog/product')) {
        $this->error['warning'] = $this->language->get('error_permission');
    }

    if ((utf8_strlen($this->request->post['head_text_field']) < 1) || (utf8_strlen($this->request->post['head_text_field']) > 64)) {
        $this->error['head'] = $this->language->get('error_head');
    }

    if (!$this->request->post['title_text_field']) {
        $this->error['title'] = $this->language->get('error_title');
    }

    if (!$this->error) {
        return true;
    } else {
        return false;
    }
}
}

This is for Model (model\item\item.php)

class ModelItemItem extends Model {
public function insert_head()
{
    $head_text_field = $this->get['head_text_field'];
    $title_text_field = $this->get['title_text_field'];
    $max    = $this->get['max'];

    $data   =   array(
        'head_text_field'   =>  $head_text_field,
        'title_text_field'  =>  $title_text_field,
        'max'               =>  $max
    );

    return $this->db->insert('show_product', $data);
    //$this->db->query("INSERT INTO" . DB_PREFIX . "show_product SET head_text = '" . $this->db->escape($data['head_text_field']) . "', title_text = '" . $this->db->escape($data['title_text_field']) . "', max_item = '" . $this->db->escape($data['max']) . "'");

}
}

1 Answer 1

2

shouldn't your query look soming like :

 $this->db->query("INSERT INTO .... ");

I don't think opencart is built on codeigniter although I've heard some of its classes are simular

Try adding some spaces to the start of your query:

$this->db->query("INSERT INTO " . DB_PREFIX . "show_product SET head_text = '" . $this->db->escape($data['head_text_field']) . "', title_text = '" . $this->db->escape($data['title_text_field']) . "', max_item = '" . $this->db->escape($data['max']) . "'");

Your insert() function needs

 $this->model_item_item->insert_head($data); //wrong

Changing to :

 $this->model_item_item->insert_head($this->request->post);

And you model should look something like:

   public function insert_head($data)
   {
     $this->db->query("INSERT INTO " . DB_PREFIX . "show_product SET head_text = '" . $this->db->escape($data['head_text_field']) . "', title_text = '" . $this->db->escape($data['title_text_field']) . "', max_item = '" . $this->db->escape($data['max']) . "'");
   }
Sign up to request clarification or add additional context in comments.

4 Comments

Thx for your suggestion, i already try it like this : $this->db->query("INSERT INTO" . DB_PREFIX . "show_product SET head_text = '" . $this->db->escape($data['head_text_field']) . "', title_text = '" . $this->db->escape($data['title_text_field']) . "', max_item = '" . $this->db->escape($data['max']) . "'"); actually it's work well, but in database still empty????
Your missing some spaces in your query
Oh your right in INTO" should be INTO ", sorry if you do not mind if I ask again, why value in database is empty? (successfully entered into the database but empty value) did i make mistake?
yeah... your not passing posted data into your model correctly

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.