PHP无法递增任何值,但最后一个添加到数组中



我正在使用增量/减少来更改购物车中项目所需的数量。但是,这似乎仅适用于添加到数组中的最后一个值/行。例如如果我在购物车中添加1个项目,请增加($ _session ['CART'] [$ COMIC_ID] )工作正常。但是,如果我在购物车中添加第二个项目,则增加仅适用于最新添加的项目,而不是第一个添加的项目,并且对于任何其他添加的项目,可以说相同。

有人可以指出我出了什么问题并帮助我修复我的代码吗?

我正在使用foreach循环中包含的最终值的$值呼应。

这是我的代码(cart.php):

<?php 
if(!isset($_SESSION)) {
     session_start();
}
$total = 0;
$page = 'cart';
//Database connection info (Using MySQLi) removed for security
if(isset($_GET['comic_id'])){ 
    $comic_id = $_GET['comic_id'];
} else {
    $comic_id = NULL;}
$action = $_GET['action'];
if($comic_id && !productExists($comic_id)) {
    die("We apologise, but we can't seem to find the comic you were looking for!!!");
}
switch($action) {
    case "add":
        if (isset($_SESSION['cart'][$comic_id])) {
            $_SESSION['cart'][$comic_id]++;
        } else {
            $_SESSION['cart'][$comic_id] = 1;
            }
    break;  
    case "remove":
        if (isset($_SESSION['cart'][$comic_id])) {
            $_SESSION['cart'][$comic_id]--;}
        if($_SESSION['cart'][$comic_id] == 0) unset($_SESSION['cart'][$comic_id]);
    break;  
    case "empty":
        unset($_SESSION['cart']); 
        session_destroy();
    break;  
}
require('header.php');
require('sidebar.php');
if (isset($_SESSION['cart'][$comic_id])){
    echo "<table border="0" padding="10" width="80%">";
    echo "<td colspan="1" align="left"><a href="title.php">Continue Shopping</a></div>";
    echo "<td colspan="6" align="right"><a href="$_SERVER[PHP_SELF]?action=empty" onclick="return confirm('Crystal Fusion: Are you sure you wish to empty your cart?');">Empty Cart</a></td>";                      
    echo "<tr height="20px">";
    echo "<tr height="20px">";
    echo "<td align=center>Image</td><td align=center>Title</td><td align=center>Description</td><td colspan=3 align=center>Copies (+/-)</td><td align=center>Price</td>";
    echo "<tr height="20px">";

    foreach($_SESSION['cart'] as $comic_id => $qty) {   
        $sql = sprintf("SELECT title, description, cost, image_thumbnail
                FROM comic 
                WHERE comic_id = %d;",$comic_id);
        $result = mysql_query($sql);
        if(mysql_num_rows($result) > 0) {
            list($name, $description, $price, $image_thumbnail) = mysql_fetch_row($result);
            $cost = $price * $qty; 
            $total = $total + $cost;
            $cost = number_format($cost,2);
            $total = number_format($total,2);
            $description =  substr($description, 0, 250);
            echo "<br><tr>";
            echo "<td width="10px" align="center"><img height=100 align=center src="$image_thumbnail">";
            echo "<td align="center">$name</td>";
            echo "<td width="40%" align="center">$description...<a href=comic_dyn.php?comic_id=$comic_id>More Info</td>";
            echo "<td width="30px" align="center"><a href="$_SERVER[PHP_SELF]?action=add&comic_id=$comic_id">+<br></a><td align="center">$qty <td width="20px" align="center"><a href="$_SERVER[PHP_SELF]?action=remove&comic_id=$comic_id">-</a></td>";
            echo "<td align="right">$$cost</td>";
            echo "</tr>";           
        }
    }
    echo "<br><tr><tr height=100px>";
    echo "<td><td><td colspan="4" align="right">Total:</td>";
    echo "<td width="60px" align="right">$$total</td>"; 
    echo "<tr><td colspan="7" align="right"><a href="checkout_html.php">Proceed to Checkout</a>";
    echo "<tr height="50px">";
    echo "</table>";
}else{
    echo "Your cart is currently empty.";
    echo "<br><br><td colspan="1" align="left"><a href="title.php">Continue Shopping</a></div>";
}
$_SESSION['invoice'][$comic_id]=$name . " " . $qty . " " . $price;
foreach ($_SESSION['invoice'] as $value) {
    echo $value."<br>";}
function productExists($comic_id) {
        $sql = sprintf("SELECT * FROM comic WHERE comic_id = %d;", $comic_id);
    return mysql_num_rows(mysql_query($sql)) > 0;
    }
?>

您必须在开关语句上进行操作才能从每个项目中添加/删除值。像这样

foreach($_SESSION['cart'] as $comic_id => $qty) {
switch($action) {
    case "add":
        if (isset($_SESSION['cart'][$comic_id])) {
            $_SESSION['cart'][$comic_id]++;
        } else {
            $_SESSION['cart'][$comic_id] = 1;
            }
    break;  
    case "remove":
        if (isset($_SESSION['cart'][$comic_id])) {
            $_SESSION['cart'][$comic_id]--;}
        if($_SESSION['cart'][$comic_id] == 0) unset($_SESSION['cart'][$comic_id]);
    break;  
    case "empty":
        unset($_SESSION['cart']); 
        session_destroy();
    break;  
}

} 

最新更新