用session实现购物车
                          用session实现购物车  



  使用<?
  session_start
()
  
?>
  session在php3中不支持!

  首先让我们假设在你的HTML页中有一个商品列表 

  ID Name Price 
  1 Mouse 25.00 add 
  2 Key 100.00 add 
  3 Car 5000.00 add 
  4 Game 25.00 add  

  上面的'add'字段应该是一个链接,用来将商品放到迷你购物篮中。使$PHP_SELF将这个链接指向它自已。然后向它增加商品信息。这里是商品1的例子。 
  <A HREF="<?echo $PHP_SELF;?>?id=1&price=25&basket=Mouse">add</A> 
  商品的名称能够包含空格,所以将它放在链接的最后。Get方法好象对这个很挑剔。为了代码重用,让我们创建一个额外的文件minibasket.inc。我使用.inc扩展名来标识我的包括文件。使用这个外部文件的原因是,尽管你将使用session变量来传递给购物篮,代码仍然需要有效。这个文件将包含显示迷你购物篮的代码,也包话增加项目的函数。实现它的最好的地方是将 <?php include ("minibasket.inc"); ?> 命令放在你需要的地方。 
  这里显示的迷你购物篮应该看上去象这样:
# Name Price 
1 Mouse 25.00 
3 Game 75.00 
Total 100.00 
  1。检查将要增加的新的项目,这是一个正常的IF语句,用于检查$basket变量的值。 
  <?php if ($basket!=""){//向篮子中加入项目} ?> 
  2。在浏览器中显示篮子 <?php if ($ses_basket_items>0){ // 如果在篮子中有项目 
for ($basket_counter=0;$basket_counter<$ses_basket_items;$basket_counter++){ // 遍历篮子,打印出每一行 // 你当然可以用格表来格式化显示 // 需要通过格式化来显示价格的分值。#如果没有格式化,则.00是不会显示出来的 
  
$price=sprintf("%01.2f",$ses_basket_price[$basket_counter]); 
  
$amount=$ses_basket_amount[$basket_counter]; 
  
$name=$ses_basket_name[$basket_counter]; 
  echo 
"$amount $name $price"
  echo 
"<BR>n"; }} else { // 在篮子中没有商品 // 设置项目计数为0,且清除所有的变量 // 这是一个清除处理。它防止人们得到旧的数组 
  
$ses_basket_items=0
  unset(
$ses_basket_name); 
  unset(
$ses_basket_amount); 
  unset(
$ses_basket_price); 
  unset(
$ses_basket_id); } 
  
?> 
  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"); 
  
?> 
  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++; 
  } 
  
?>

       
   以下是我个人的看法: 

  这种方法可以在html中实现购物篮。但是,还是有一定的缺陷。它本身没有涉及到数据库,所以对定单数据的处理,汇总无法实现。如果想完全的实现网上购物,首先还是要建库,才能实现定单的汇总,分类打印。现在的各个网站的网上购物,我个人认为只是极为片面的,仅仅实现了下定单这一过程。而我认为网上购物应该是一套进,销,存系统。如果大家对这个问题有兴趣,可以一起讨论一下,我认为主要的付款方式在国内无法解决。