使用会话添加到购物车 ( 删除 ) PHP .


add to cart using session ( delete ) php

如何使用会话数组删除特定项目。我已经尝试了很多次,但我的代码仍然无法工作。谁能帮我检查我的代码?当"删除购物车"超链接传递要删除的产品 ID 时。但它无论如何都无法删除。我不知道错误在哪里.

	cart.php
				if (isset($_POST['lol']))
				{
					if (isset($_SESSION['cart']) === FALSE) { $_SESSION['cart']=array(); }
					$proid=$_REQUEST["proid"];
					array_push($_SESSION['cart'],$proid);
					
				}
					
				
				
				$total=0;
			if (isset($_SESSION['cart']))
			{
				
				
				$total = 0;
				foreach($_SESSION['cart'] as $proid )
				{
					$results = mysqli_query($con,"Select * from product where Product_ID = '$proid'");
					$myrow = mysqli_fetch_array($results);
					$price = $myrow['Product_Price'];
					$total =$total + $price;
						
						?>
							<li class = "cartlist"><?php echo  '<img src="data:image/jpeg;base64,' . base64_encode($myrow['Product_Pic']) . '" width="196" height="120">';?
><p><span style = "font-weight: bold; font-size: 1.2em;">
<?php echo $myrow["Product_Name"];?></span></br />
RM <?php echo $myrow["Product_Price"];?></br />
<?php echo $myrow["Product_Size"];?>MB <br/> 
<a href="cart.php?proid=<?php echo $proid;?>?action=remove">Remove From Cart</a></p> </li>
						<?php
						
				}					
					
			}
?>

<?php
if (isset($_GET['proid']))
	$proid=$_REQUEST["proid"];
else 
	$proid = 1;
if (isset($_GET['action']))
	$action =$_REQUEST['action'];
switch ($action)
{
	case "remove" :
	if (isset($_SESSION['cart']['$proid']))
	{
		$_SESSION['cart']['$proid']--;
		unset($_SESSION['cart']['$proid']);
	}
	break;
	case "empty" :
	unset ($_SESSION['cart']);
	break;
}
?>

这里的问题是你不明白数组在 php 中是如何工作的。

你存储在数组中的所有东西都是一个key => value对,即使你没有特别设置键,php 也会为你设置一个整数值。

在某些时候,您可以在购物车中添加产品ID,如下所示:

array_push($_SESSION['cart'],$proid);

这也可以这样写: $_SESSION['购物车'][] = $proid;

(如果你看一下 php 文档中的array_push,它说最好这样写(这是一个赋值,您正在向数组添加一个元素,而不指定键。

在这里:

foreach($_SESSION['cart'] as $proid )

您正在循环遍历数组值,忽略键。

这些代码行表明 cart 数组将如下所示:

array(
    0 => 'id-for-product-one',
    1 => 'id-for-product-two'
);

当您尝试从数组中删除产品时,您正在尝试查找产品,就好像您之前作为值分配的 id 现在是键一样:

if (isset($_SESSION['cart']['$proid']))

这条线其实有两个错误。

首先是通过使用单引号,字符串'$proid'的值实际上是$proid 。如果要传递$proid中包含的值,可以省略引号,或者如果要构建更复杂的字符串,则需要双引号(或使用.运算符进行字符串连接(。

第二个是没有数组键用于$prodid

给定一个数组$a = array('key' => 'value')如果你想得到'value',你写$a['key'],你在那里做什么是$a['value']

这里的解决方案有两个:

一种是将 id 同时分配为键和值。

另一种是使用 array_search 获取要删除的元素的键并从那里工作。