### 仅用 PHP4 Session 实现的迷你购物篮(二)

片段 3。创建新的篮子并向其中增加一条项目
<?php
// 将项目计数设为 1
$ses_basket_items=1;
// 填充 4 个数组的第 0 个位置，使用从 href 链接传过来的值
// 链接是在‘给你的页面增加链接’部分所讲的
$ses_basket_name[0]=$basket;
$ses_basket_amount[0]=1;
$ses_basket_price[0]=$price;
$ses_basket_id[0]=$id;
// 在 session 中注册新的篮子
session_register("ses_basket_items");
session_register("ses_basket_name");
session_register("ses_basket_amount");
session_register("ses_basket_price");
session_register("ses_basket_id");
?>
这样将创建一个篮子，将所以的值填在数组第 0 个位置上，并利用 session 注册数组。一个篮子诞生了。
片段 4。填充篮子
<?php
$basket_position_counter=0; //篮子中的位置
$double=0; //双重入口标志设为 NO
if ($ses_basket_items>0){
// 检查是否篮子包含的项目中有双重入口
foreach ($ses_basket_name as $basket_item){
// 遍历数组所包含的名字，检查是否与从 href 所传来的相配匹
if ($basket_item==$basket){
// 如果在篮子中已经有了一个项目，将 flag 设为 1
$double=1;
// 记住项目的位置，将进行更新
$basket_position=$basket_position_counter;
}
$basket_position_counter++; //增加篮子中的实际位置
}
}
// 更新篮子
if ($double==1){
// 如果项目在你的篮子中已经存在则更新在$basket_position 处理的数量和位置
$oldamount=$ses_basket_amount[$basket_position];
$ses_basket_amount[$basket_position]++;
$amount=$ses_basket_amount[$basket_position];
$oldprice=$ses_basket_price[$basket_position];
//更新价格
$newprice=($oldprice/$oldamount)*$amount;
$ses_basket_price[$basket_position]=$newprice;
}else{
// 如果它不在你的篮子中，则在数组末尾增加新的项目
$ses_basket_name[]=$basket;
$ses_basket_amount[]=1;
$ses_basket_price[]=$price;
$ses_basket_id[]=$id;
$ses_basket_items++;
}
?>
太好了，现在你可以填充迷你购物篮并显示它了。
将代码片断组织到一起
让我们将代码组织到一起并且存为 minibasket.inc。
<?php
// 记住在代码片段 1 中, 决定是不是要增加？
// 让我们在这里重复它
if ($basket!=""){
// 在这里，项目将要加到篮中。让我们检查一下是否存在一个注册过的篮子
if (session_is_registered("ses_basket_items")){
// 存在一个注册过的篮子，将代码片段 4 放在这里。
// 它增加项目到注册过的篮子中，检查重复记录，更新它们或在数组的最后增加项目
} else {
// 不存在注册过的篮子，将代码片段 3 放在这里。它创建一个新的篮子，并且
// 通过 session 注册它。
}
}
// 剩下的都是代码片段 2。如果篮子中有物品时用于显示它们。
// 加到这里。
?>
瞧，不错吧。"c'est tout", 法国人会这样说。如果都做好了，你可以保存这个文件为 minibasket.inc
并且将其包括到显示商品的 PHP 页面中。
Zip 格式的 minibasket.inc 和 basket.php