php - 在下拉更改事件中从购物车中删除项目

标签 php jquery ajax html

我正在构建一个电子商务系统,用户可以在其中从类别 下拉列表中选择一个项目。 我希望用户只从每个 类别 添加一个项目,当他们更改该类别的项目时,它必须删除购物车中已经存在的项目。每个类别的项目都具有相同的项目 ID,因此用户无法添加来自同一类别的两个或更多项目。

我可以将商品添加到购物车,但我很难确保如果同一类别的商品已存在于购物车中,则必须先将其删除。 例如如果用户想要将 Sony Chase 添加到购物车,而 LG Chase 已经在购物车中,则 LG Chase 必须替换为 Sony,因为它们属于同一类别 Chase。不知道我说清楚没有

<form method="post" action="" class="jcart">
<fieldset>
<input type="hidden" name="my-item-url" value="" />
    <input type="hidden" name="my-item-qty" value="1"/>
    <table>
    <tr><td width="180">
<select name="chasis" id="chasis" onChange="grabInfo(this.value)" class="styled-select">
    <option value="">-- Select Chasis --</option>
    <?php 
            $queryChasis = mysql_query("SELECT * FROM chasis");     

            while ($row = mysql_fetch_array($queryChasis))
            {
            ?>
                <option value="<?php echo $row['ItemID']; ?>"><?php echo $row['CName']; ?></option>
            <?php
            } 
            ?>
      </select>
      </td>
      </tr>
      </table>
      </fieldset>
 </form>


<!-- Ajax Passing the ID -->
function grabInfo(str)
{
if (str=="")
{
    document.getElementById("contentDiv").innerHTML = "";
    return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        document.getElementById("contentDiv").innerHTML = "&nbsp;";
        document.getElementById("contentDiv").innerHTML = xmlhttp.responseText;
    }
}
xmlhttp.open("GET","getinfoChasis.php?q="+str,true);
xmlhttp.send();
}

如果用户尝试从产品页面向购物车添加商品。 这是我尝试从同一类别中删除现有项目的地方

if (isset($_GET["q"])) {
$pid = $_GET["q"];
$wasFound = false;
$i = 0;
// If the cart session variable is not set or cart array is empty
if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1) { 
    // RUN IF THE CART IS EMPTY OR NOT SET
    $_SESSION["cart_array"] = array(0 => array("item_id" => $pid, "quantity" => 1));
} else {
    // RUN IF THE CART HAS AT LEAST ONE ITEM IN IT
    foreach ($_SESSION["cart_array"] as $each_item) { 
          $i++;
          while (list($key, $value) = each($each_item)) {
              if ($key == "item_id" && $value == $pid) {

                  // That item is in cart already so let's remove
                  $key_to_remove = $pid;
                if (count($_SESSION["cart_array"]) <= 1) {
                    unset($_SESSION["cart_array"]);
                } else {
                    unset($_SESSION["cart_array"]["$pid"]);
                    sort($_SESSION["cart_array"]);
                }
                  $wasFound = true;
              } // close if condition
          } // close while loop
       } // close foreach loop
       if ($wasFound == false) {
           array_push($_SESSION["cart_array"], array("item_id" => $pid, "quantity" => 1));
       }
}
}

呈现购物车以供用户在页面上查看

$cartOutput = "";
$cartTotal = "";
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'];
    $sql = mysql_query("SELECT * FROM chasis WHERE ID='$item_id' LIMIT 1");
    while ($row = mysql_fetch_array($sql)) {
        $product_name = $row["CName"];
        $price = $row["Price"];
    }
    $cartTotal = $price + $cartTotal;
    /*$cartOutput .= "<h2>Cart Item $i</h2>";
    $cartOutput .= "Item id: ".$each_item['item_id']."<br/>";
    $cartOutput .= "Quantity: ".$each_item['quantity']."<br/>";*/
    $cartOutput .= "<tr><td>".$product_name."</td>";
    $cartOutput .= "<td>".$price."</td></tr>";
}
//total price
$cartTotal = $cartTotal;
}
echo '<table border="1" cellspacing="0" cellpadding="6">
<tr bgcolor="#ccffcc"><td width="220">Item Name</td>
<td width="120">Price</td></tr>';
echo $cartOutput;
echo '</table>';

echo '<table border="1" cellspacing="0" cellpadding="6">
<tr align="right"><td width="220"><strong>Total Price:</strong></td>
<td width="120">'.$cartTotal.'</td></tr></table>';
?>

最佳答案

我已经开发了 3 个电子商务应用程序,并且以标准的方式解决了这类问题。

  1. 首先,您需要保存类别 ID 以及添加到购物车中的任何产品的产品 ID。现在让我们来解决你的问题。您只想为任何用户的每个类别添加一个项目吗?假设,我在 JUICE 类别下有几种产品。例如,如果 JUICE 的 Category ID 是 4,那么 JUICE 类别下的所有产品都将有 4 作为它们的 Category ID

您可以做的是,当用户从下拉列表中选择产品时,您可以在 ajax 页面中使用 ajax 传递 Product IDCategory ID。请尝试使用 session 数组,因为将 session 用作数组不是专业的方法,如果您的数组太长,它会影响加载速度。所以你可以做的是,在传递 Product IDCategory ID 之后,你可以使用 SELECT 查询来检查购物车,以查找是否是同一类别的产品已经存在于表中。如果是,则运行 DELETE 查询以删除产品,然后运行 ​​INSERT 查询以插入新产品。否则,您可以直接使用 INSERT 查询添加新产品。

如果您需要了解更多详细信息,例如您需要处理的查询,请告诉我。我会尽力帮助您。

问候。

关于php - 在下拉更改事件中从购物车中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22298129/

相关文章:

php - HTML:到当前目录的超链接?

php - Twitter 流媒体 API

php - XAMPP 7.0.23 上的 SSL 错误 : SEC_ERROR_UNKNOWN_ISSUER

php - 如何正确跟踪pdf下载(Google Analytics(分析))?

javascript - 带有不可拖动子图像的可拖动 div 上的 FireFox 问题

php - 是否可以将 php 变量插入到您的 js 代码中?

jquery - 带有 iOS 的 SoundManager2 - 不播放声音 onClick 事件

javascript - 生成多个jquery点击函数

javascript - jQuery GET 未成功

javascript - 从mySQL获取ID并使用php在ajax中设置localstorage