一,购物车概述
购物车是为消费者在网上购物中提供一个临时存储商品的地方。其主要功能包括:添加商品、删除商品、更改商品数量、商品金额小计、商品金额总计和清空购物车;还包括生成订单、订单打印、订单预览、提交订单和取消购物等。
购物车的操作流程:首先,登录到网站中浏览商品;然后,购买指定的商品,进入购物车页面中,在该页面可以实现更改商品数量、删除商品、清空购物车、继续购物等;最后,填写收货人信息,生成订单,订单打印、预览,提交订单等操作。
二,热点关键技术
1,Smarty模块的安装配置
smarty是一个使用PHP写出来的PHP模板引擎,它将一个应用程序分成两部分实现:视图和逻辑控制。即将UI和PHP代码分离。PHP没有内置Smarty模板类,需要单独下载和配置,而且Smarty要求服务器上PHP版本最低为4.0.6。PHP Smarty可以在http://www.smarty.net/download下载。将压缩包解压,其中有一个libs目录,包含Smarty类库的所有核心文件。包括smarty.class.php、smarty_Compiler.class.php、config_File.class.php和debug.tpl 4个文件,还有internals和plug-ins两个目录。
复制libs目录到服务器根目录下,并重命名。这里将libs目录重新命名为smarty。到此Smarty模板安装完毕。
2,Smarty模板的配置
(1)首先确定Smarty目录的位置。因为Smarty类库是通用的,每一个项目基本都会使用,为了调用方便,习惯将smarty放置在根目录下。
(2)新建4个目录templates、templates_c、configs和cache,用于存储不同的文件。新建的4个目录位置是可以选择的,只要配置文件路径设置正确就可以了。
(3)创建配置文件。只要应用Smarty模板,那么就一定要包含Smarty类库和相关信息。每个页面都写一遍配置是不现实的,最好的方法就是将这些配置信息都写到一个文件中,通过include来调用配置文件。配置文件创建完成后保存在根目录下。本模块配置文件config.php代码如下:
复制代码 代码如下:
/* 定义服务器的绝对路径 */
define('BASE_PATH','E:\PHPservices\\');
/* 定义Smarty目录的绝地你路径 */
define('SMARTY_PATH','SourceCode\12\01\\');
/* 加载Smarty类库文件 */
require BASE_PATH.SMARTY_PATH.'smarty\Smarty.class.php';
/* 实例化一个Smarty对象 */
$smarty = new Smarty;
/* 定义各个目录的路径 */
$smarty->template_dir = BASE_PATH.SMARTY_PATH.'./';
$smarty->compile_dir = BASE_PATH.SMARTY_PATH.'templates_c/';
$smarty->config_dir = BASE_PATH.SMARTY_PATH.'configs/';
$smarty->cache_dir = BASE_PATH.SMARTY_PATH.'cache/';
/* 定义定界符 */
$smarty->left_delimiter = ' $smarty->right_delimiter = '}>';
/* 使用Smarty赋值方法将一对儿名称/方法发送到模板中 */
?>
复制代码 代码如下:
复制代码 代码如下:
session_start(); //初始化session变量
session_register("goodsid"); //定义session变量用于存储商品ID
session_register("goodsnum"); //定义session变量用于存储购买商品的数量
?>
复制代码 代码如下:
session_start(); //初始化session变量
session_register("goodsid"); //定义session变量用于存储商品ID
session_register("goodsnum"); //定义session变量用于存储购买商品的数量
if($_SESSION["goodsid"]=="" && $_SESSION["goodsnum"]==""){ //判断session变量是否为空
$_SESSION["goodsid"]=$_GET["id"]."@"; //如果session变量为空,则为其赋值为商品的ID,并以@分隔
$_SESSION["goodsnum"]="1@"; //如果session变量为空,则为其赋值为1,并以@分隔
}else{ //如果session变量不为空
$array=explode("@",$_SESSION["goodsid"]); //则以@为分隔符,将session变量中的数据写入到数组中
if(in_array($_GET["id"],$array)){ //如果判读数组中是否存在指定的ID
echo "<script>alert('该商品已经被放入购物车!');history.back();</script>";
exit;
}
//如果数组中不存在指定的ID,则说明该商品还没有放入购物车中
$_SESSION["goodsid"].=$_GET["id"]."@"; //将该商品添加到购物车中
$_SESSION["goodsnum"].="1@"; //更改商品数量
}
echo "<script>window.location.href='shopping_car.php';</script>";
?>
复制代码 代码如下:
$id=$_POST["id"]; //获取商品id
$num=$_POST["goodsnum"]; //获取商品数量
$preg="/^[0-9]*[0-9]$|^[0-9]*[0-9]$/"; //编写正则表达式
if($num==""){ //判断提交的值是否为空
echo "<script>alert('数量不能为空!');history.back();</script>";
exit;
}else if(!preg_match($preg,$num,$str)){ //判断提交的数据是否是正整数
echo "<script>alert('数量只能为正整数!');history.back();</script>";
exit;
}
三,函数实现过程
1,添加商品功能
添加商品功能的实现原理是:首先创建一个购物车,然后以商品展示页中“购买”链接传递的商品ID($_GET[id])为依据,向购物车中添加商品(商品ID),并且不允许重复添加。向购物车中添加商品的操作通过by_commodity.php文件来完成。
首先,创建一个购物车。
然后,判断购物车中是否为空,如果为空,则将商品的ID和数量添加到购物车中;如果不为空,则要判断添加商品的ID是否在购物车中已经存在,如果存在则不能重复添加,否则将商品ID添加到购物车中。
添加商品程序代码如下:
复制代码 代码如下:
header("Content-type:text/html;charset= utf-8");
session_start(); //初始化session变量
session_register("goodsid"); //定义session变量用于存储商品ID
session_register("goodsnum"); //定义session变量用于存储购买商品的数量
if($_SESSION["goodsid"]=="" && $_SESSION["goodsnum"]==""){ //判断session变量是否为空
$_SESSION["goodsid"]=$_GET["id"]."@"; //如果session变量为空,则为其赋值为商品的ID,并以@分隔
$_SESSION["goodsnum"]="1@"; //如果session变量为空,则为其赋值为1,并以@分隔
}else{ //如果session变量不为空
$array=explode("@",$_SESSION["goodsid"]); //则以@为分隔符,将session变量中的数据写入到数组中
if(in_array($_GET["id"],$array)){ //如果判读数组中是否存在指定的ID
echo "<script>alert('该商品已经被放入购物车!');history.back();</script>";
exit;
}
//如果数组中不存在指定的ID,则说明该商品还没有放入购物车中
$_SESSION["goodsid"].=$_GET["id"]."@"; //将该商品添加到购物车中
$_SESSION["goodsnum"].="1@"; //更改商品数量
}
echo "<script>window.location.href='shopping_car.php';</script>";
?>
复制代码 代码如下:
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_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";
}
?>
复制代码 代码如下:
Array
(
[4] => 4,4
[3] => 3,5
[1] => 1,10
[2] => 2,1
)
复制代码 代码如下:
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
$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");
?>
四,源代码下载:点击下载