php 购物车的例子


Posted in PHP onMay 04, 2009

//购物车session的产生代码
if(! $session && ! $scid) {
/*
session用来区别每一个购物车,相当于每个车的身份证号;
scid只用来标识一个购物车id号,可以看做是每个车的名字;
当该购物车的id和session值两者都不存在时,就产生一个新购物车
*/
$session = md5(uniqid(rand()));
/*
产生一个唯一的购物车session号
rand()先产生个随机数,uniqid()再在该随机数的基础上产生一个独一无二的字符串,最后对该字符串进行md5
*/
SetCookie(scid, $session, time() + 14400);
/*
设置该购物车cookie
变量名:scid(不知到这里是不是少了一个 $号呢?=》更正:scid要加“”)
变量值: $session
有效时间:当前时间+14400秒(4小时内)
关于setcookie函数的详细用法,大家还是参看php手册吧~
*/
}
class Cart { //开始购物车类
function check_item( $table, $session, $product) {
/*
查验物品(表名,session,物品)
*/
$query = SELECT * FROM $table WHERE session=' $session' AND product=' $product' ;
/*
看一看'表'里该'购物车'中有没有该'产品'
即,该产品有没有已经放入购物车
*/
$result = mysql_query( $query);
if(! $result) {
return 0;
}
/*
查询失败
*/
$numRows = mysql_num_rows( $result);
if( $numRows == 0) {
return 0;
/*
若没有找到,则返回0
*/
} else {
$row = mysql_fetch_object( $result);
return $row->quantity;
/*
若找到,则返回该物品数量
这里有必要解释一下mysql_fetch_object函数(下面还会用到):
【mysql_fetch_object() 和 mysql_fetch_array() 类似,只有一点区别 - 返回一个对象而不是数组。】
上面这句话摘自php手册,说得应该很明白了吧~
简单的说就是,取一条记录中的某个字段,应该用“->”而不是像数组一样用下标
*/
}
}
function add_item( $table, $session, $product, $quantity) {
/*
添加新物品(表名,session,物品,数量)
*/
$qty = $this->check_item( $table, $session, $product);
/*
调用上面那个函数,先检查该类物品有没有已经放入车中
*/
if( $qty == 0) {
$query = INSERT INTO $table (session, product, quantity) VALUES ;
$query .= (' $session', ' $product', ' $quantity') ;
mysql_query( $query);
/*若车中没有,则像车中添加该物品*/
} else {
$quantity += $qty; //若有,则在原有基础上增加数量
$query = UPDATE $table SET quantity=' $quantity' WHERE session=' $session' AND ;
$query .= product=' $product' ;
mysql_query( $query);
/*
并修改数据库
*/
}
}
function delete_item( $table, $session, $product) {
/*
删除物品(表名,session,物品)
*/
$query = DELETE FROM $table WHERE session=' $session' AND product=' $product' ;
mysql_query( $query);
/*
删除该购物车中该类物品
*/
}
function modify_quantity( $table, $session, $product, $quantity) {
/*
修改物品数量(表名,session,物品,数量)
*/
$query = UPDATE $table SET quantity=' $quantity' WHERE session=' $session' ;
$query .= AND product=' $product' ;
mysql_query( $query);
/*
将该物品数量修改为参数中的值
*/
}
function clear_cart( $table, $session) {
/*
清空购物车(没什么好说)
*/
$query = DELETE FROM $table WHERE session=' $session' ;
mysql_query( $query);
}
function cart_total( $table, $session) {
/*
车中物品总价
*/
$query = SELECT * FROM $table WHERE session=' $session' ;
$result = mysql_query( $query);
/*
先把车中所有物品取出
*/
if(mysql_num_rows( $result) > 0) {
while( $row = mysql_fetch_object( $result)) {
/*
如果物品数量>0个,则逐个判断价格并计算
*/
$query = SELECT price FROM inventory WHERE product=' $row->product' ;
$invResult = mysql_query( $query);
/*
从inventory(库存)表中查找该物品的价格
*/
$row_price = mysql_fetch_object( $invResult);
$total += ( $row_price->price * $row->quantity);
/*
总价 += 该物品价格 * 该物品数量
( 大家应该能看明白吧:) )
*/
}
}
return $total; //返回总价钱
}
function display_contents( $table, $session) {
/*
获取关于车中所有物品的详细信息
*/
$count = 0;
/*
物品数量计数
注意,该变量不仅仅为了对物品数量进行统计,更重要的是,它将作为返回值数组中的下标,用来区别每一个物品!
*/
$query = SELECT * FROM $table WHERE session=' $session' ORDER BY id ;
$result = mysql_query( $query);
/*
先取出车中所有物品
*/
while( $row = mysql_fetch_object( $result)) {
/*
分别对每一个物品进行取详细信息
*/
$query = SELECT * FROM inventory WHERE product=' $row->product' ;
$result_inv = mysql_query( $query);
/*
从inventory(库存)表中查找该物品的相关信息
*/
$row_inventory = mysql_fetch_object( $result_inv);
$contents[product][ $count] = $row_inventory->product;
$contents[price][ $count] = $row_inventory->price;
$contents[quantity][ $count] = $row->quantity;
$contents[total][ $count] = ( $row_inventory->price * $row->quantity);
$contents[description][ $count] = $row_inventory->description;
/*
把所有关于该物品的详细信息放入 $contents数组
$contents是一个二维数组
第一组下标是区别每个物品各个不同的信息(如物品名,价钱,数量等等)
第二组下标是区别不同的物品(这就是前面定义的 $count变量的作用)
*/
$count++; //物品数量加一(即下一个物品)
}
$total = $this->cart_total( $table, $session);
$contents[final] = $total;
/*
同时调用上面那个cart_total函数,计算下总价钱
并放入 $contents数组中
*/
return $contents;
/*
将该数组返回
*/
}
function num_items( $table, $session) {
/*
返回物品种类总数(也就是说,两个相同的东西算一种 好像是废话- -!)
*/
$query = SELECT * FROM $table WHERE session=' $session' ;
$result = mysql_query( $query);
$num_rows = mysql_num_rows( $result);
return $num_rows;
/*
取出车中所有物品,获取该操作影响的数据库行数,即物品总数(没什么好说的)
*/
}
function quant_items( $table, $session) {
/*
返回所有物品总数(也就是说,两个相同的东西也算两个物品 - -#)
*/
$quant = 0;// 物品总量
$query = SELECT * FROM $table WHERE session=' $session' ;
$result = mysql_query( $query);
while( $row = mysql_fetch_object( $result)) {
/*
把每种物品逐个取出
*/
$quant += $row->quantity; //该物品数量加到总量里去
}
return $quant; //返回总量
}
}

PHP 相关文章推荐
PHP伪静态页面函数附使用方法
Jun 20 PHP
php5 图片验证码实现代码
Dec 11 PHP
那些年一起学习的PHP(一)
Mar 21 PHP
PHP删除数组中特定元素的两种方法
Jul 02 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 PHP
php树型类实例
Dec 05 PHP
php中mysql连接方式PDO使用详解
Feb 25 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
Jan 11 PHP
php json转换相关知识(小结)
Dec 21 PHP
PHP的cookie与session原理及用法详解
Sep 27 PHP
PHP 错误之引号中使用变量
May 04 #PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
May 02 #PHP
apache2.2.4+mysql5.0.77+php5.2.8安装精简
Apr 29 #PHP
PHP 读取文件的正确方法
Apr 29 #PHP
PHP session有效期问题
Apr 26 #PHP
PHP 判断常量,变量和函数是否存在
Apr 26 #PHP
PHP memcache扩展的三种安装方法
Apr 26 #PHP
You might like
php模拟post提交数据的方法
2015/02/12 PHP
PHP函数nl2br()与自定义函数nl2p()换行用法分析
2016/04/02 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
vue forEach循环数组拿到自己想要的数据方法
2018/09/21 Javascript
JS实现简单日历特效
2020/01/03 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
关于python列表增加元素的三种操作方法
2018/08/22 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
2020/05/13 Python
Python 解决相对路径问题:"No such file or directory"
2020/06/05 Python
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
护士思想汇报
2014/01/12 职场文书
优秀经理事迹材料
2014/02/01 职场文书
后勤主管岗位职责
2014/03/01 职场文书
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
交通事故协议书范文
2014/04/16 职场文书
工作证明格式及范本
2014/09/12 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
2019军训心得体会
2019/06/27 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android