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