php - 如何使用opencart向数据库中插入数据?

标签 php opencart

我开始尝试打开购物车,我尝试在面板管理中构建子菜单,文件名为 item.php,我只是尝试插入到数据库(head_text_field、title_text_field 和 max)&(表是 show_product),我尝试按照insert data into database with codeigniter , 但还是报错, error is Call to undefined method DB::insert() model\item\item.php

编辑第 1 部分:当我在模型中删除此代码时:

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']) . "'");

它可以工作,但数据库中仍然是空的???

这是 (controller/item/item.php) 中的 Controller

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;
    }
}
}

这是模型 (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']) . "'");

}
}

最佳答案

您的查询不应该像这样:

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

我不认为 opencart 是基于 codeigniter 构建的,尽管我听说它的一些类是相似的

尝试在查询的开头添加一些空格:

$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']) . "'");

你的 insert() 函数需要

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

更改为:

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

你的模型应该是这样的:

   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']) . "'");
   }

关于php - 如何使用opencart向数据库中插入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35030619/

相关文章:

php - 我应该如何处理数据的排序,同时保持灵活性以应对 future 的变化?

javascript - +/- 数量 带 child 的盒子

php - OpenCart Paypal 与 LKR 的问题

php - 如何在网站加载前对用户名和密码进行保护

php - ACF 的 WordPress 查询帖子

php - 使用 php 解析 pdf

php - 跳过某些特定文件的 .htaccess 规则

html - Opencart,如何将样式添加到单个产品名称字段(等设置颜色、粗体、下划线)?

javascript - sku.tpl 在 opencart 中获取 $sku_images 的地方

php - OpenCart 类别未显示