<!--文件名:cart.php
-->
<html>
<title>欢迎光临我的小店</title>
<body>
<!--显示能够购买的商品列表-->
<center>现有商品如下,请购买:<br><table>
<tr>
<th>编号<th><th>名称</th><th>价格(元)</th>
</tr>
<tr>
<td>1</td><td>鼠标</td><td>25.00</td>
<td><a href="<?php echo $_SERVER['PHP_SELF'];?>?id=1&price=25&cart=鼠标">购买</a></td>
</tr>
<tr>
<td>2</td><td>键盘</td><td>25.00</td>
<td><a href="<?php echo $_SERVER['PHP_SELF'];?>?id=2&price=100&cart=键盘">购买</a></td>
</tr>
<tr>
<td>3</td><td>小汽车</td><td>25.00</td>
<td><a href="<?php echo $_SERVER['PHP_SELF'];?>?id=3&price=5000&cart=小汽车">购买</a></td>
</tr>
<tr>
<td>4</td><td>游戏</td><td>25.00</td>
<td><a href="<?php echo $_SERVER['PHP_SELF'];?>?id=4&price=25&cart=游戏">购买</a></td>
</tr>

</table></center>
<hr><center>
现在你所购买的商品如下:<br>
<!--包含minicart.inc.php来对购买信息进行处理-->
<?php include('minicart.inc.php'); ?>
</center>
</body>
</html>--------------------------------------------------------------------------<!--文件名:minicart.inc.php
-->
<?php
if($cart!=""){   //如果$cart不为空,说明用户要购买某一样商品
                 //商品将要放到购物车里,检查一下是否存在一个注册过的购物车if(session_is_registered("ses_cart_items")){//存在一个注册过的购物车
//增加商品到注册够的购物车中,检查重复记录,更新他们或者在数组的组最后增加新的商品$cart_position_counter=0;    //购物车中的位置
$exist=0;    //记录是否已经购买过此类商品,默认为没有
if($ses_cart_items>0){    //检查购物车里是否已经有此类商品foreach($ses_cart_id as $cart_id){    //遍历数组所包含的商品的编号,检查是否与从herf所传来的的相匹配if($cart_id==$id){    //如果在购物车中已经有了一个商品,将标记投为1$exist=1;    //记住商品的位置,将其进行更新$cart_position=$cart_position_counter;
}
$cart_position_counter++;   //位置变量加1
}
  //更新购物车if($exist==1){   //如果商品在购物车中已经存在,则更新在$cart_position处商品的数量$oldamount=$ses_cart_amount[$cart_position];
$ses_cart_amount[$cart_position]++;   //增加一件物品
$amount=$ses_cart_amount[$cart_position];
$oldprice=$ses_cart_price[$cart_position];    //更新价格
$newprice=($oldprice/$oldamount)*$amount;
$ses_cart_price[$cart_position]=$newprice;}else{   //如果他不再你的购物车里,就在数组末尾增加新的商品$ses_cart_name[]=$cart;
$ses_cart_amount[]=1;
$ses_cart_price[]=$price;
$ses_cart_id[]=$id;
$ses_cart_items++;
}

}else{//首次购买
//购物车还没有注册过,创建一个新的购物车,并通过session注册它。$ses_cart_items=1;   //将商品计数器设为1
//填充4个数组的第0个位置,使用从herf连接传过来的值
$ses_cart_name[0]=$cart;
$ses_cart_amount[0]=1;
$ses_cart_price[0]=$price;
$ses_cart_id[0]=$id;//在session里注册新的购物车
Session_register("ses_cart_items");
Session_register("ses_cart_name");
Session_register("ses_cart_amount");
Session_register("ses_cart_price");
Session_register("ses_cart_id");
}
}
//下面的代码现实购物车种物品的信息
if($ses_cart_items>0){   //如果购物车中有商品了$totalprice=0;
echo "<table border=1><tr><td>编号</td><td>数量</td><td>名称</td><td>花费</td></tr>";
for($cart_counter=0;$cart_counter<$ses_cart_items;$cart_counter++){
//遍历购物车,用表格来格式化显示每一行,并且计算总的花费
//需要通过格式化来显示价格的小数部分,否则.00是不会显示的
$price=sprintf("%01.2f",$ses_cart_price[$cart_counter]);
$amount=$ses_cart_amount[$cart_counter];
$totalprice+=$price;
$name=$ses_cart_name[$cart_counter];
echo"<tr>";
echo"<td>$ses_cart_id[$cart_counter]</td><td>$amount</td><td>$name</td><td>$price</td>";
echo"</tr>"
echo"</table><br>";
//输出总的花费
echo"总计:$totalprice元";
}else{
//在购物车中没有商品
//设置商品计数器为0,清除所有的变量,防止人们得到旧的数组
echo"你还没有购买任何东西";
$ses_cart_items=0;
unset($ses_cart_name);
unset($ses_cart_amount);
unset($ses_cart_price);
unset($ses_cart_id);
}
?>==========================================================================================================================

    以上两端代码是我从书上誊写下来的,因为我们老师要求用session写一个购物车,可是从网上下来的代码我看的很迷糊。就打算把书上的这个代码全部运行一下看看它每一部分是些什么工作,结果网页上什么也没有显示。这个代码不能运行。
    我自己有看过另一本书上用购物车类来写的程序,那个程序因为每一部分都很清晰明了,所以我看懂了。但是那个程序里面没有用到session,然后来到session这边编写的程序,我看的不太懂。况且,这个程序无法运行就更是雪上加霜了。
==============================================================================================================
    下面是我罗列出来的我看不懂的字段,希望大家帮忙看看,教教我怎么看这个程序。改怎么修改,最重要的是,我想学会用session编购物车。<td>4</td><td>游戏</td><td>25.00</td>
<td><a href="<?php echo $_SERVER['PHP_SELF'];?>?id=4&price=25&cart=游戏">购买</a></td>
</tr>这里的<?php echo $_SERVER['PHP_SELF'];   原样是<?php echo $php_self?>;我不知道$_SERVER['PHP_SELF']怎么用,这个是在百度查php_self时看到有人问,别人建议这样用,而搬过来的。所以,想在这里问问,这个字段应该怎么称呼,具体用法是怎么样的?(我翻了很多本书都没有这个字段的用法)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++if(session_is_registered("ses_cart_items")){//存在一个注册过的购物车
//增加商品到注册够的购物车中,检查重复记录,更新他们或者在数组的组最后增加新的商品$cart_position_counter=0;    //购物车中的位置
$exist=0;    //记录是否已经购买过此类商品,默认为没有
if($ses_cart_items>0){    //检查购物车里是否已经有此类商品foreach($ses_cart_id as $cart_id){    //遍历数组所包含的商品的编号,检查是否与从herf所传来的的相匹配if($cart_id==$id){    //如果在购物车中已经有了一个商品,将标记投为1$exist=1;    //记住商品的位置,将其进行更新$cart_position=$cart_position_counter;
}
$cart_position_counter++;   //位置变量加1
}
这个部分,我没看懂,我的理解是:当购物车里已经放过一次某样东西了,我们再次买这样东西的时候就会检测到他已经有在购物车里,然后在后面对它的总价,数量进行更新;如果之前没有买过,又做其他处理。+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}else{   //如果他不再你的购物车里,就在数组末尾增加新的商品$ses_cart_name[]=$cart;
$ses_cart_amount[]=1;
$ses_cart_price[]=$price;
$ses_cart_id[]=$id;
$ses_cart_items++;
}这里说在数组末尾增加新的商品,我很奇怪中括号里什么都没有的时候插入的数据就是在末尾吗?
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=$price=sprintf("%01.2f",$ses_cart_price[$cart_counter]);
在这里,书上的原样是$price=sprintf("%01.2f",ses_cart_price[$cart_counter]);
因为显示不出来才被我修改成这个样子的。

===========================================================================上面的那些是我自己理解的。而且最大的问题是,这个程序无法运行,我自己才开始自学PHP,对这个理解不够透彻,找了很多资料,也没查出哪里存在问题。只能拿上来向大家求助了。请大家帮我看看这个程序,教一教我。===========================================================================

解决方案 »

  1.   

    请查阅手册.看 新版的php SESSION的使用.session_is_registered  已经在新版本中不推荐使用了.
    建议if(isset($_SESSION['sessionkey']))....先看看手册,关于SESSION的使用.再开始写代码吧...
      

  2.   

    lz学习一下官方的开发手册:
    PHP中文版开发手册[CHM]适合PHP4/PHP5
      

  3.   

    代码够老的,先确认你的php.ini里的register_globals参数是否为on。
      

  4.   

    文件的開始有沒有 session_start()
      

  5.   

    用户登录时session的用法与逻辑小实例:http://www.phpzc.com/read.php?tid-269.html