Opencart 2.x 未定义索引 product.php

Opencart 2.x Undefined Index product.php

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

我在名为 disable_cart 的数据库中的产品 table 中创建了一个新条目,它设置为 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() 函数相同。它在我的本地主机上运行良好,但如果勾选了复选框,则只能在开发服务器上运行,否则我会收到以下错误

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

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

谢谢

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

您的问题是由于 未选中的复选框不会通过 post

发送
  1. 所以没有post['disable_cart'].
  2. 当您post新产品或进行编辑时,这部分代码称为:

    if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) {
            $this->model_catalog_product->addProduct($this->request->post);
    

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

至于警告,它只是说由于抛出错误而导致输出过早。