使用session(删除)php

时间:2016-01-31 11:34:40

标签: php session

如何使用会话数组删除特定项目。我已经尝试了很多次但我的代码仍然无法工作。任何人都可以帮我检查我的代码吗? 由于删除购物车超链接传递将被删除的产品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;
}

?>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

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

您存储在数组中的所有内容都是key => value对,即使您没有明确地设置密钥,php也会为您设置一个整数值。

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

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

这也可以这样写:     $ _SESSION ['cart'] [] = $ proid;

(如果你在php文档中查看array_push,它表示最好以这种方式编写) 这是一个赋值,您正在向数组添加元素,而不指定键。

在这里:

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

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

这些代码行表明购物车数组将如下所示:

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获取要删除的元素的键并从那里开始工作。