PHP基础应用:实现购物车功能
2011-11-13 11:31
411 查看
项目已经进行到用户购物车功能的实现,说简单简单,说复杂复杂,简单的话用session动态存储用户订购的商品,但是用户退出网站的时候,用户购物车数据就会被销毁,复杂的话就是永久存放用户购物车数据,永不销毁,(当然除了用户主动删除才销毁)其实复杂做法的原理一想就懂,无非就是在数据库中建张“用户购物车”表,但是有一点需要事先想清楚,那就是表该怎样设计才合理?
如果一个用户在购物车中放多个相同产品,数据表该怎样设计?
难道只是写入吗,不管是不是同一件商品,只要放入数据库我就给它存放,如果这样设计表的话,那么到时候该怎样给用户统计购物车中同一件商品的数量,因为表中的数据都是按id从小到大一次存放的,相同数据之间只有商品id属性相同,但如果根据相同商品ID计算商品数量的话,那么程序运行就要多绕几个圈,首先要全部遍历表中数据,累加相同id属性的商品,但是如果数据有几十万条的话…
刚开始的时候我想的是购物车表是这样设计的:
id userid goodsid
其中goodsid是二位数组的形式 goods[a][b]
goods[a]===>第一维goods[a] 代表的是商品为id的数组
goods[a][b]==> 第二维代表商品为id的商品数量
但是后来测试不知道数据库中该怎样存放数组
第二中考虑以字符转的形式存放goods[a][b]
存进去的话用“,”号隔开
拿出来的话用explode拆开
这个方法也试了好几次,但发现还是有些问题,最后还是不行
第三种是这样的
id userid goodsid goodssum
id为表主键 自增一
userid存放用户id
goodsid存放用户放入购物车的商品ID
goodssum存放相同产品的数量,数据库中默认值为1
它的工作原理是这样:
一:用户将特定商品放入购物车中,通过url传值传送用户userid和商品goodsid到处理购物车数据页面(doshopbus.php)
二:程序根据传过来的userid和goodsid遍历表中和userid、goodsid值相同的那行数据并且判断
$sql="select * from shopbus where userid={$userid} and goodsid={$goodsid}";
$result=mysql_query($sql,$link);
$b=mysql_fetch_assoc($result);
(1) 如果能取出值,证明原数据库中有该用户放入的该商品,那么我们就在原来的商品数量上加1即可
if($b){
$b["goodssum"]++;
$sql="update shopbus set goodssum={$b['goodssum']} where userid={$userid} and goodsid={$goodsid}";
mysql_query($sql,$link);
}
(2)如果取不出值,证明原数据库中没有该用户存放的商品,我们就要写入该商品
else{
$sql="insert into shopbus (id,userid,goodsid) values(null,{$userid},{$goodsid})";
mysql_query($sql,$link);
//跳转到显示用户购物车页面shopbus.php
header("Location:shopbus.php?userid={$userid}&goodsid={$goodsid}"); } 跳转到用户购物车显示页面之后,根据传过来的userid和goodsid 去goods表中取出用户订购的商品信息
$userid=$_GET["userid"];
$goodsid=$_GET["goodsid"];
require("../include/config.php");
$link=mysql_connect(HOST,USER,PASS) or die("数据库连接失败");
mysql_select_db(DBNAME,$link);
$sql="select * from goods where id in(select goodsid from shopbus where userid={$userid})";
$result=mysql_query($sql,$link);
while($b=mysql_fetch_assoc($result)){
// ==重点之处,去购物车中取出商品数量=====一定是在while循环之中取的==
$sql="select * from shopbus where goodsid={$b['id']}";
//===============
$result1=mysql_query($sql,$link);
$num=mysql_fetch_assoc($result1);
}
总结:做之前给自己的决心,一定要做出来,但看到别人都是用session动态实现存储,我真想放弃,不是怕困难,就是怕太浪费时间,项目本身还有许多功能没做,在这上浪费的时间太多了,但总是又不甘心,购物车本身的功能就是让用户暂时实现存储,下次付账,如果下次付账什么都没了,那这个项目做出来的意义也不大,抱着决心做,什么都别想,就没有什么是困难的,相信自己一定能做出来!
如果一个用户在购物车中放多个相同产品,数据表该怎样设计?
难道只是写入吗,不管是不是同一件商品,只要放入数据库我就给它存放,如果这样设计表的话,那么到时候该怎样给用户统计购物车中同一件商品的数量,因为表中的数据都是按id从小到大一次存放的,相同数据之间只有商品id属性相同,但如果根据相同商品ID计算商品数量的话,那么程序运行就要多绕几个圈,首先要全部遍历表中数据,累加相同id属性的商品,但是如果数据有几十万条的话…
刚开始的时候我想的是购物车表是这样设计的:
id userid goodsid
其中goodsid是二位数组的形式 goods[a][b]
goods[a]===>第一维goods[a] 代表的是商品为id的数组
goods[a][b]==> 第二维代表商品为id的商品数量
但是后来测试不知道数据库中该怎样存放数组
第二中考虑以字符转的形式存放goods[a][b]
存进去的话用“,”号隔开
拿出来的话用explode拆开
这个方法也试了好几次,但发现还是有些问题,最后还是不行
第三种是这样的
id userid goodsid goodssum
id为表主键 自增一
userid存放用户id
goodsid存放用户放入购物车的商品ID
goodssum存放相同产品的数量,数据库中默认值为1
它的工作原理是这样:
一:用户将特定商品放入购物车中,通过url传值传送用户userid和商品goodsid到处理购物车数据页面(doshopbus.php)
二:程序根据传过来的userid和goodsid遍历表中和userid、goodsid值相同的那行数据并且判断
$sql="select * from shopbus where userid={$userid} and goodsid={$goodsid}";
$result=mysql_query($sql,$link);
$b=mysql_fetch_assoc($result);
(1) 如果能取出值,证明原数据库中有该用户放入的该商品,那么我们就在原来的商品数量上加1即可
if($b){
$b["goodssum"]++;
$sql="update shopbus set goodssum={$b['goodssum']} where userid={$userid} and goodsid={$goodsid}";
mysql_query($sql,$link);
}
(2)如果取不出值,证明原数据库中没有该用户存放的商品,我们就要写入该商品
else{
$sql="insert into shopbus (id,userid,goodsid) values(null,{$userid},{$goodsid})";
mysql_query($sql,$link);
//跳转到显示用户购物车页面shopbus.php
header("Location:shopbus.php?userid={$userid}&goodsid={$goodsid}"); } 跳转到用户购物车显示页面之后,根据传过来的userid和goodsid 去goods表中取出用户订购的商品信息
$userid=$_GET["userid"];
$goodsid=$_GET["goodsid"];
require("../include/config.php");
$link=mysql_connect(HOST,USER,PASS) or die("数据库连接失败");
mysql_select_db(DBNAME,$link);
$sql="select * from goods where id in(select goodsid from shopbus where userid={$userid})";
$result=mysql_query($sql,$link);
while($b=mysql_fetch_assoc($result)){
// ==重点之处,去购物车中取出商品数量=====一定是在while循环之中取的==
$sql="select * from shopbus where goodsid={$b['id']}";
//===============
$result1=mysql_query($sql,$link);
$num=mysql_fetch_assoc($result1);
}
总结:做之前给自己的决心,一定要做出来,但看到别人都是用session动态实现存储,我真想放弃,不是怕困难,就是怕太浪费时间,项目本身还有许多功能没做,在这上浪费的时间太多了,但总是又不甘心,购物车本身的功能就是让用户暂时实现存储,下次付账,如果下次付账什么都没了,那这个项目做出来的意义也不大,抱着决心做,什么都别想,就没有什么是困难的,相信自己一定能做出来!
相关文章推荐
- PHP实现添加购物车功能
- Android基础--Android app应用多语言切换功能实现
- php实现购物车产品删除功能(2)
- PHP实现购物车功能
- php的IMAP的应用实例(实现收发邮件、删除邮件、附件下载等功能,解决中文乱码问题)
- PHP单例模式实现商城购物车功能
- php实现购物车功能(上)
- 购物车功能实现 语言: php+MySQL+jQuery+Ajax
- php的IMAP的应用实例(实现收发邮件、删除邮件、附件下载等功能,解决中文乱码问题)
- php的IMAP的应用实例(实现收发邮件、删除邮件、附件下载等功能,解决中文乱码问题)
- Js实现淘宝购物车类似功能(DOM综合应用)
- php实现购物车功能(下)
- PHP+MYSQL+SESSION+ThinkPHP实现简单购物车功能
- php实现文件管理与基础功能操作
- php实现购物车功能(上)
- php实现简单加入购物车功能
- Ajax应用:使用jQuery和PHP实现功能开关效果
- php实现产品加入购物车功能(1)
- Ajax应用:使用jQuery和PHP实现功能开关效果
- fileuploadJs+JcropJs+php综合小应用 实现图片拖拽上传与裁剪功能的demo