0

増加/減少を使用して、カート内のアイテムの要求数量を変更しています。ただし、これは配列に追加された最後の値/行に対してのみ機能しているようです。たとえば、カートに 1 つのアイテムを追加すると、インクリメント ($_SESSION['cart'][$comic_id]++) は正常に機能します。ただし、カートに 2 番目のアイテムを追加すると、インクリメントは最後に追加されたアイテムに対してのみ機能し、最初に追加されたアイテムに対しては機能しません。追加の追加アイテムについても同じことが言えます。

誰かが私が間違っている場所を示して、コードを修正するのを手伝ってくれませんか?

foreach ループ内に含まれる末尾の $value を使用してエコーしています。

これが私のコードです(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;
    }
?>
4

1 に答える 1

0

各項目の値を追加/削除するには、switch ステートメントで foreach を実行する必要があります。そのように

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;  
}


} 
于 2012-11-12T00:20:57.430 に答える