[b]
一,购物车概述
[/b]购物车是为消费者在网上购物中提供一个临时存储商品的地方。其主要功能包括:添加商品、删除商品、更改商品数量、商品金额小计、商品金额总计和清空购物车;还包括生成订单、订单打印、订单预览、提交订单和取消购物等。
购物车的操作流程:首先,登录到网站中浏览商品;然后,购买指定的商品,进入购物车页面中,在该页面可以实现更改商品数量、删除商品、清空购物车、继续购物等;最后,填写收货人信息,生成订单,订单打印、预览,提交订单等操作。
[b]
二,热点关键技术
1,Smarty模块的安装配置
[/b]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模板安装完毕。
[b]2,Smarty模板的配置
[/b](1)首先确定Smarty目录的位置。因为Smarty类库是通用的,每一个项目基本都会使用,为了调用方便,习惯将smarty放置在根目录下。
(2)新建4个目录templates、templates_c、configs和cache,用于存储不同的文件。新建的4个目录位置是可以选择的,只要配置文件路径设置正确就可以了。
(3)创建配置文件。只要应用Smarty模板,那么就一定要包含Smarty类库和相关信息。每个页面都写一遍配置是不现实的,最好的方法就是将这些配置信息都写到一个文件中,通过include来调用配置文件。配置文件创建完成后保存在根目录下。本模块配置文件config.php代码如下:
[url=shopping_car.php]?>
[b]5,验证输入商品数量值是否有效
[/b]在preg_match()函数中,判断提交的商品数量的值是否符合正则表达式的标准,如果符合则有效,否则将给出提示信息。程序关键代码如下:
$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;
}
preg_match()函数,在字符串中搜索所有与给出的正则表达式匹配的内容,如果存在则返回True,否则返回False。语法如下:
语法:int preg_match(string pattern,string sbuject[,array matches[,int flags]])
[b]参数说明:
[/b]pattern:必要参数,需要匹配的正则表达式
subject:必要参数,输入的字符串matches:可选参数。输出的搜索结果的数组,例如$out[0]将包含与整个模式匹配的结果,$out[1]将包含与第一个捕获的括号中的子模式所匹配的结果,一次类推
flags:可选参数,标记:PREG_OFFSET_CAPTURE,对每个出现的匹配结果页同时返回共附属的字符串偏移量
[b]
三,函数实现过程
1,添加商品功能
[/b]添加商品功能的实现原理是:首先创建一个购物车,然后以商品展示页中“购买”链接传递的商品ID($_GET[id])为依据,向购物车中添加商品(商品ID),并且不允许重复添加。向购物车中添加商品的操作通过by_commodity.php文件来完成。
首先,创建一个购物车。
然后,判断购物车中是否为空,如果为空,则将商品的ID和数量添加到购物车中;如果不为空,则要判断添加商品的ID是否在购物车中已经存在,如果存在则不能重复添加,否则将商品ID添加到购物车中。
添加商品程序代码如下:
[url=shopping_car.php]?>
[b]2,删除购物车中商品功能的实现
[/b]删除购物车中商品的操作是根据“删除该项”超级链接中传递的商品ID($_GET[id])执行的。在delete_commodity.php文件中,根据$_GET[id]传递的值,执行删除购物车中商品的操作。
首先,获取$_GET[id]传递的值。然后,应用explode()函数,将Session变量中存储的商品ID和数量的数据写入数组,并以@作为分隔符。
接着,应用array_search()函数,获取数组中指定ID商品的键名,并根据获取的键名将数组中指定的数据赋值为空。
最后,将数组中重新赋值的空数据写入购物车中,从而完成删除购物车中指定商品的操作。
<?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中存在多余的数据@。
[b]解决方法:
[/b]
[url=http://xiazai.jb51.net/201306/yuanma/php_gouwuche_jb51.net.rar]点击下载
[/url][/b]