深入PHP购物车模块功能分析(函数讲解,附源码)(4)


<?php
 session_start();    //初始化session变量
 require("config.php");   //连接smarty模板
 $id=$_GET["id"];    //获取要删除商品的ID
 $arrayid=explode("@",$_SESSION["goodsid"]);  //将购物车中存储的商品ID的字符串转换到数组中
 $arraynum=explode("@",$_SESSION["goodsnum"]); //将购物车中存储的商品数量的字符串转换到数组中
 $key=array_search($id,$arrayid);    //获取到数组中指定的数据,并返回键名
 $arrayid[$key]="";        //根据返回的键名,将数组中的数据赋值为空
 $arraynum[$key]="";        //根据返回的键名,将数组中的数据赋值为空
 $_SESSION["goodsid"]=implode("@",$arrayid);  //重新将数组中的数据添加到购物车中
 $_SESSION["goodsnum"]=implode("@",$arraynum); //重新将数组中的数据添加到购物车中
 echo "<script>window.location.href='shopping_car.php';</script>";
 $smarty->display("shopping_car.tpl");
?>


删除前$_SESSION["goodsid"]的值为"3@2@5@",删除$id=5后$_SESSION["goodsid"]的值为"3@2@@";这样Session中存在多余的数据@。
解决方法:

复制代码 代码如下:


<?php
 session_register("goods"); //创建session数组
 $id=$_GET['id'];
 $arraygoods=$_SESSION["goods"];
 if($_SESSION["goods"]==""){
  $_SESSION["goods"][$id]="$id,1"; //根据商品ID保存商品,键名为$id,键值为$id,1(商品ID和购买商品数量,默认购买数量为1)
 }else{
  if(array_key_exists($id,$_SESSION["goods"])){
    echo "<script>alert('该商品已经被放入购物车!');history.back();</script>";
    exit;
  }
  $_SESSION["goods"][$id]="$id,1";
 }
?>


商品信息以数组形式保存,[4] => 4,4。键名为商品ID,值为键名和购买商品数量。添加删除商品只需要根据ID号找到对应商品修改信息即可。

复制代码 代码如下:


Array
(
    [4] => 4,4
    [3] => 3,5
    [1] => 1,10
    [2] => 2,1
)


3,生成订单功能的实现
生成订单功能就是从数据库中读取出填写的订单信息,对其内容进行重新整合,形成一个订单模式,并且实现订单打印和订单预览的功能。订单生成的操作通过两个文件来完成,一个是从数据库中读取数据,将所需的数据赋值给指定的Smarty模板变量,并指定模板页。

复制代码 代码如下:


<?php
 session_start();
 header("Content-type:text/html;charset= utf-8");
 require_once("conn.php");
 require_once("config.php");
 $array=array();        //定义一个空数组
 $ddnumber=base64_decode($_GET["ddno"]);
 mysql_query("set names utf8");
 $sql=mysql_query("select * from tb_commodity_order_form where ddnumber='".$ddnumber."'",$conn);
 $info=mysql_fetch_array($sql);
 array_push($array,$info);    //将获取的数组值写入到新的数组中
 $smarty->assign("info",$array);
 $array=explode("@",$info["spc"]);
 $arraynum=explode("@",$info["slc"]);
 $totalprice=0;         //定义价格变量
 $arrayinfo=array();        //创建数组
 for($i=0;$i<count($array);$i++){
  if($array[$i]!=""){
   $sqlcart=mysql_query("select * from tb_commodity where tb_commodity_id='".$array[$i]."'",$conn);
   $infocart=mysql_fetch_array($sqlcart); //读取数据库中数据
   $totalprices=$infocart["tb_commodity_price"]*$arraynum["$i"];  //计算总的价格
   array_push($infocart,$arraynum["$i"]);  //将购买数量的数据写入到数据库中返回的数组中   
   array_push($infocart,$totalprices);  //将购买数量的数据写入到数据库中返回的数组中   
   array_push($arrayinfo,$infocart);       //将整理的数据压入到创建的新数组中
   $totalprice+=$infocart["tb_commodity_price"]*$arraynum["$i"];  //计算总的价格
  }
 }
 session_unregister("goods");
 if(count($arrayinfo)>0){      //判断数组是否为空
  $gnum=count($arrayinfo);
  $smarty->assign("isShow","T");
  $smarty->assign("gnum",$gnum);
  $smarty->assign("myrow",$arrayinfo);
  $smarty->assign("totalprice",$totalprice);
 }else{
  $smarty->assign("isShow","F");
 }
 $smarty->display("shopping_dd.tpl");
?>


另一个是shopping_dd.tpl模板页,输出模板变量中存储的数据,生成一个订单。

四,源代码下载:点击下载

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/28bfed3d58053c2b1d7741743b5d9ca7.html