我有一個函數可以改變產品的數量並將其存儲回會話中。函數對陣列中的第一項沒有任何影響
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循環完成產品代碼是從代碼最後一個:/任何想法來解決這個問題? –
您是否嘗試過以下解決方案? –