簡體   English   中英

PHP購物車數組

[英]PHP shopping cart array

因此,我將購物車設置為使用GET函數接收有關添加的每個項目的特定信息。 但是,在讀取數據庫的實現中,如果添加其他項,則值將變得相同。 如果我添加椅子1,然后再添加椅子1,則它將增加到椅子1的總數,即有2個椅子1。 但是,如果我隨后添加椅子2,將有一個新條目,但包含椅子1的所有值。

數組輸出

Array ( [0] => Array ( [item_id] => 2 [quantity] => 1 ) [1] => Array ( [item_id] => 4 [quantity] => 7 ) )

購買項目區域

在此處輸入圖片說明

數據庫:

<?php
include_once('config/database.php');
include_once('object/chair.php');
$database = new Database();
$conn = $database->getConnection();
$chair = new Chair($conn);
$chair->id = $_GET['detailsid'];
$stmt = $chair->readDetails();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
?>

添加到購物車:

  <div class="addtocart">
                <!--<div class="button">
                Add to cart

                </div>-->
                <div class="button">
                <form id="form1" name="form1" method="post" action="cart.php?detailsid=<?php echo $row['ID'];?>">
            <input type="hidden" name="pid" id="pid" value="<?php echo $row['ID'];?>"/>
            <input type="submit" name="button" id="button" value="Add to Shooping Cart"/>        

                    </form>

購物車功能:

<?php

session_start();
error_reporting(E_ALL);
ini_set('display_errrors', '1');
include_once 'includes/db_conx.php';
if (isset($_POST['pid']))
{
    $pid      = $_POST['pid'];
    $wasFound = false;
    $i        = 0;
    if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1)
    {
        $_SESSION["cart_array"] = array(1 => array("item_id" => $pid, "quantity" => 1));
    }
    else
    {
        foreach ($_SESSION["cart_array"] as $each_item)
        {
            $i++;
            while (list($key, $value) = each($each_item))
            {
                if ($key == "item_id" && $value == $pid)
                {
                    array_splice($_SESSION["cart_array"], $i - 1, 1, array(array("item_id" => $pid, "quantity" => $each_item['quantity'] + 1)));
                    $wasFound = true;
                }
            }
        }
        if ($wasFound == false)
        {
            array_push($_SESSION["cart_array"], array("item_id" => $pid, "quantity" => 1));
        }
    }
}
if (isset($_GET['cmd']) && $_GET['cmd'] == "emptycart")
{
    unset($_SESSION["cart_array"]);
}

//render cart
$cartOutput = "";
if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1)
{
    $cartOutput = "<h2 align=center'>Your shopping cart is empty</h2>";
}
else
{
    $i = 0;
    foreach ($_SESSION["cart_array"] as $each_item)
    {
        $i++;
        $item_id = $each_item['item_id'];

        include_once('config/database.php');
        include_once('object/chair.php');
        $database  = new Database();
        $conn      = $database->getConnection();
        $chair     = new Chair($conn);
        $chair->id = $_GET['detailsid'];
        $stmt      = $chair->readDetails();
        while ($row       = $stmt->fetch(PDO::FETCH_ASSOC))
        {
            $product_name = $row['chair_name'];
            $price        = $row['PRICE'];
        }

        $pricetotal = $price * $each_item['quantity'];
        $cartOutput .="<tr>";
        $cartOutput .= "<td>" . $product_name . "</td>";
        $cartOutput .= "<td>" . $price . "</td>";
        $cartOutput .= "<td>" . $each_item['quantity'] . "</td>";
        $cartOutput .= "<td>" . $pricetotal . "</td>";
        $cartOutput .= "<td>X</td>";
        $cartOutput .="</tr>";
    }
}

更新:

可能的解決方法是將詳細信息ID添加到會話數組中,如下所示:

if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1)
{
    $_SESSION["cart_array"] = array(1 => array("item_id" => $pid, "quantity" => 1, "details_id" => $_GET['detailsid']));
}
else
{
    foreach ($_SESSION["cart_array"] as $each_item)
    {
        $i++;
        while (list($key, $value) = each($each_item))
        {
            if ($key == "item_id" && $value == $pid)
            {
                array_splice($_SESSION["cart_array"], $i - 1, 1, array(array("item_id" => $pid, "quantity" => $each_item['quantity'] + 1, "details_id" => $_GET['detailsid'])));
                $wasFound = true;
            }
        }
    }
    if ($wasFound == false)
    {
        array_push($_SESSION["cart_array"], array("item_id" => $pid, "quantity" => 1, "details_id" => $_GET['detailsid']));
    }
}

然后,在顯示購物車時,請使用值代替$_GET

$chair     = new Chair($conn);
$chair->id = $each_item['details_id'];
$stmt      = $chair->readDetails();

您正在使用$_GET['detailsid']獲取椅子的詳細信息-每個循環的ID始終相同:

$chair     = new Chair($conn);
$chair->id = $_GET['detailsid'];
$stmt      = $chair->readDetails();

應該使用$item_id代替,以便獲取正確椅子的詳細信息嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM