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 } ?>
</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
发送
- 所以没有
post['disable_cart']
.
当您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);
...
至于警告,它只是说由于抛出错误而导致输出过早。
我正在尝试解决保存或编辑产品时出现未定义索引错误的问题。
我在名为 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 } ?>
</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
- 所以没有
post['disable_cart']
. 当您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);
...
至于警告,它只是说由于抛出错误而导致输出过早。