Opencart 2.x Undefined Index product.php

时间:2015-08-15 14:52:48

标签: php mysqli opencart opencart2.x

我正在尝试在保存或编辑产品时找出未定义索引错误的问题。

我在数据库的product表中创建了一个名为disable_cart的新条目,该条目设置为int(1)并且默认值为0.

在product_form.tpl上,它只是一个复选框。

    <div class="col-sm-10">
              <div class="checkbox">
                 <label>
                  <?php if ($disable_cart) { ?>
                  <input type="checkbox" name="disable_cart" value="1" checked="checked" id="input-disable_cart" />
                  <?php } else { ?>
                  <input type="checkbox" name="disable_cart" value="1" id="input-disable_cart" />
                  <?php } ?>
                  &nbsp; </label>
              </div>
            </div>

产品控制器中的代码

    if (isset($this->request->post['disable_cart'])) {
        $data['disable_cart'] = $this->request->post['disable_cart'];
    } elseif (!empty($product_info['disable_cart'])) {
        $data['disable_cart'] = $product_info['disable_cart'];
    } else {
        $data['disable_cart'] = 0;
    }

addProduct()函数中的模型

public function addProduct($data) {
    $this->event->trigger('pre.admin.product.add', $data);

    . "', disable_cart = '" . (int)$data['disable_cart'] . "', date_added = NOW()");

在editProduct()函数中也是如此。它在我的localhost上工作正常,但只有勾选了复选框才能在开发服务器上运行,否则我会收到以下错误

Undefined index: disable_cart in /admin/model/catalog/product.php on line 134Warning: Cannot modify header information - headers already sent by (output started at /admin/index.php:80) in /system/library/response.php on line 12

无法解决问题,非常感谢任何帮助。

由于

编辑:该值确实保存在数据库中,但仍然会抛出错误

1 个答案:

答案 0 :(得分:0)

您的问题是由于未经检查的复选框不会通过post发送

  1. 所以没有post['disable_cart']
  2. 当您发布新产品或进行编辑时,会调用此部分代码:

    if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) {
            $this->model_catalog_product->addProduct($this->request->post);
    
  3. $data['disable_cart']尚未定义。所以addProduct函数会抛出异常。

    解决方案是添加以下代码行:

    if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) {
       // add this line to `add` and to `edit`
       if(!isset($this->request->post['disable_cart'])) $this->request->post['disable_cart'] = 0;
    
       $this->model_catalog_product->addProduct($this->request->post); 
    ...
    

    至于警告,它只是说由于错误被抛出你有一个过早的输出。