如何使用会话数组删除特定项目。我已经尝试了很多次,但我的代码仍然无法工作。谁能帮我检查我的代码?当"删除购物车"超链接传递要删除的产品 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 获取要删除的元素的键并从那里工作。