从opencart购物车中删除一个项目会删除所有内容

时间:2017-01-24 12:42:07

标签: opencart

我的客户端正在使用Opencart v2.1.0.2。问题是当我从购物车中删除单个商品时,所有其他商品也会被删除。是的,它使用的是自定义模板,这里是要求删除功能的行:

<td class="text-center"><button type="button" onclick="cart.remove('<?php echo $product['cart_id']; ?>');" title="<?php echo $button_remove; ?>" class="btn btn-danger btn-xs"><i class="fa fa-times"></i></button></td>

我还需要找出单击此按钮时调用的js文件。如果它有帮助,我认为这是cart.php库中的功能,opencart在从购物车中删除项目时运行:

public function remove($cart_id) {
    $this->db->query("DELETE FROM " . DB_PREFIX . "cart WHERE cart_id = '" . (int)$cart_id . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "'");
}

1 个答案:

答案 0 :(得分:0)

DELETE FROM

删除所有内容。它缺少它试图删除的产品ID。

WHERE仅指定:cart_id,customer_id和session_id - 因此此查询会删除与该条件匹配的所有内容。它不会磨练特定产品,因此它将全部用完。

在不知道它用于产品ID的变量的情况下,正确的查询将类似于:

public function remove($cart_id) {
      $this->db->query("DELETE '".(int)$this->request->post['product_id']."' FROM " . DB_PREFIX . "cart WHERE cart_id = '" . (int)$cart_id . "' AND customer_id = '" . (int)$this->customer->getId() . "' AND session_id = '" . $this->db->escape($this->session->getId()) . "'");
}

(int)$this->request->get['product_id']是大多数产品ID调用的$ _GET请求。 另一个例子可能是: {_ 1}用于$ _POST通话

模板也可以执行(int)$this->request->post['product_id']之类的操作,因此如果post / get不起作用,请检查其使用的变量。

一旦你的查询收紧,javascript按钮只指定购物车ID(不是产品)。如果您希望我的示例有效,请在那里获取您的产品ID。您需要传递product_id和cart_id;否则,如果没有cart_id,如果其他购物者同时拥有相同的商品,则一个人将其删除将为他们全部删除。