我有一个函数可以改变产品的数量并将其存储回会话中。函数对阵列中的第一项没有任何影响
public static function updateProduct($product_code, $newQty)
{
foreach ($_SESSION["products"] as $cart_itm) //loop through session array
{
if($cart_itm["code"] == $product_code) //the item exist in array
{
$product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'qty'=>$newQty);
}
else
{
//item doesn't exist in the list, just retrieve old info and prepare array for session var
$product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'qty'=>$cart_itm["qty"]);
}
}
//found user item in array list, and increased the quantity
$_SESSION["products"] = $product;
return;
}
但是,如果数组中有两个或多个产品,则该功能仅适用于最后添加的产品。 有人有想法吗?
PS:将产品添加到购物车的功能正常。但是没有什么大的差别。
CODE的评论:
$cart_items = 0;
foreach ($_SESSION["products"] as $cart_itm)
{
echo '<input type="hidden" name="product_code" value="'.$product_code.'" />';
$cart_items ++;
}
if(isset($_SESSION["products"]))
{
echo '<form method="post" name="updateProduct">';
echo '<ul>';
$cart_items = 0;
foreach ($_SESSION["products"] as $cart_itm)
{
$product_code = $cart_itm["code"];
// get the product_name
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName('product_name'))
->from($db->quoteName('#__osmaf_products'))
->where($db->quoteName('product_code') . ' = '. $db->quote($product_code));
$db->setQuery($query);
$result = $db->loadRow();
echo '<li class="cart-itm">';
echo '<h4>'.$result['0'].' (Artikelnr.:'.$product_code.')</h4>';
echo '<label style="display:inline">Menge: </label><input type="number" style="width:50px;margin-top:9px" name="newqty" value="'.$cart_itm["qty"].'" />';
echo ' <input type="submit" class="btn btn-primary" name="updateProduct" value="↻" />';
echo '<input type="hidden" name="product_code" value="'.$cart_itm["code"].'" />';
echo '</li>';
$cart_items ++;
}
}
当我现在送我想更新其产品的形式每次均匀,最后产品的姓氏和数量得到发送到功能。
您是否在执行此函数中的'print_r($ product)'前分配了'print_r($ product);' –
我懂了!但它没有做任何与功能...问题是产品代码:\t LOOK ABOVE \t这里我得到了正确的产品代码...但如果foreach循环完成产品代码是从代码最后一个:/任何想法来解决这个问题? –
您是否尝试过以下解决方案? –