关于购物车的问题 我做了一个电子商务的网站,是比较小型的,现在我可以将物品加入到购物车,但是订单怎么做呢?在线等答案!希望给点思路? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当用户加入购物车时,将产品id写入SESSION['id'] 然后将session['id'],session['userid'] 写订单表中,登录后按session['id'],session['userid'] 读取! 商品表 订单汇总表 订单明细表 (订单可生成视图) php 处理下订单的产品生成订单好, 存入汇总表 (总价格,总数量)商品存入明细表(商品编码,数量,价格 ,商品购买总价格, 折扣什么的,,看需求) 这些用存储过程实现。 汇总表订单id, 商品总数量,商品总价格明细表明细id , 订单id,商品id, 数量, 价格, 折扣。 。。商品表商品id, 规格,。神马订单最好分一个当前和一个历史 用户操作用当前(不建立索引 影响新增和修改,删除的速度)查询用历史表(建立索引) php购物车代码源文件名称:cart.php<?phpclass cart{ var $items; var $sub_totals; function cart() { $this->items= array(); $sub_totals=0; } function add_item($item_id,$qty,$item_price) { //Item not in cart if(!isset($this->items[$item_id])) { //Add item to cart $this->items[$item_id]["qty"]=$qty; $total_cost=$this->items[$item_id]["total_cost"]=$qty*$item_price; $this->sub_total+=$total_cost; } else { //Update item $item_count=$this->items[$item_id]["qty"]+=$qty; $this->items[item_id]["total_cost"]=$item_count*$item_price; $new_cost=$qty*$item_price; //Calculate subtotal $this->sub_total+=$new_cost; } } function modify_qty($item_id,$new_qty,$item_price) { //Modify qunality $prev_qty=$this->items[$item_id]["qty"]; $qty_diff=$prev_qty – $new_qty; $this->items[$item_id]["total_cost"]=$new_qty * $item_price; $this->items[$item_id]["qty"]=$new_qty; //Calculate new subtotal $this->sub_total -= $qty_diff * $item_price; } function delete_item($item_id) { //Delete item from cart $this->sub_total-=$this->items[$item_id]["total_cost"]; $this->items[$item_id]=array(); } function num_items() { //Calculate total number of items $total_items=0; foreach($this->items as $item_id=>$item_data) $total_items+=$item_id["qty"]; return $total_items; } function clear() { //Clear out the cart $this->items=arrary(); $this->sub_total=0; }}//end class cart?>316页例子源代码<?php require_once(“cart.php”); session_start(); if(!isset($user_cart)) { $user_cart=new cart; session_register(“user_cart”); } $user_cart->add_item(1,3,5); $user_cart->add_item(2,7,10); $user_cart->add_item(3,4,7.5); $user_cart->modify_qty(2,3,10); $user_cart->delete_item(3); $total_items=$user_cart->num_items();?><html><head><title>Shopping Cart Test</title></head><body> <table> <tr> <td>Shopping Cart</td> </tr> <tr> <td>Number of Items: <?php echo $total_items; ?></td> </tr> <tr><td>Subtotal Cost: <?php echo $user_cart->sub_total; ?></td></tr> </table></body></html> 一个PHP购物车类 收藏<?/** * Cart * * 购物车类 * * @author doodoo<[email protected]> * @package Cart * @category Cart * @license PHP License * @access public * @version $Revision: 1.10 $ */Class Cart{ var $cart; var $totalCount; //商品总数量 var $totalPrices; //商品总金额 /** * Cart Constructor * * 类的构造函数,使购物车保持稳定的初始化状态 * * @static * @access public * @return void 无返回值 * @param void 无参数 */ function Cart(){ $this->totalCount = 0; $this->totalPrice = 0; $this->cart = array(); } // }}} // {{{ add($item) /** * 增加商品到当前购物车 * * @access public * @param array $item 商品信息(一维数组:array(商品ID,商品名称,商品单价,商品数量)) * @return array 返回当前购物车内商品的数组 */ function add($item){ if(!is_array($item)||is_null($item)) return $this->cart; if(!is_numeric(end($item))||(!is_numeric(prev($item)))) { echo "价格和数量必须是数字"; return $this->cart; } reset($item); //这一句是必须的,因为上面的判断已经移动了数组的指标 $key = current($item); if($key=="") return $this->cart; if($this->_isExists($key)){ //商品是否已经存在? $this->cart[$key]['count'] += end($item); return $this->cart; } $this->cart[$key]['ID'] = $key; $this->cart[$key]['name'] = next($item); $this->cart[$key]['price'] = next($item); $this->cart[$key]['count'] = next($item); return $this->cart; } // }}} // {{{ add($item) /** * 从当前购物车中取出部分或全部商品 * 当 $key=="" 的时候,清空当前购物车 * 当 $key!=""&&$count=="" 的时候,从当前购物车中拣出商品ID号为 $key 的全部商品 * 当 $key!=""&&$count!="" 的时候,从当前购物车中拣出 $count个 商品ID号为 $key 的商品 * * @access public * @param string $key 商品ID * @return mixed 返回真假或当前购物车内商品的数组 */ function remove($key="",$count=""){ if($key=="") { $this->cart = array(); return true; } if(!array_key_exists($key,$this->cart)) return false; if($count==""){ //移去这一类商品 unset($this->cart[$key]); }else{ //移去$count个商品 $this->cart[$key]['count'] -= $count; if($this->cart[$key]['count']<=0) unset($this->cart[$key]); } return $this->cart; } // }}} // {{{ modi($key,$value) /** * 修改购物车内商品ID为 $key 的商品的数量为 $value * * @access public * @param string $key 商品ID * @param int $value 商品数量 * @return array 返回当前购物车内商品的数组; */ function modi($key,$value){ if(!$this->_isExists($key)) return $this->cart(); //不存在此商品,直接返回 if($value<=0){ // value 太小,全部删除 unset($this->cart[$key]); return $this->cart; } $this->cart[$key]['count'] = $value; return $this->cart; } /** * 返回当前购物车内商品的数组 * * @access public * @return array 返回当前购物车内商品的数组; */ function getCart(){ return $this->cart; } // }}} // {{{ _isExists($key) /** * 判断当前购物车中是否存在商品ID号为$key的商品 * * @access private * @param string $key 商品ID * @return bool true or false; */ function _isExists($key) { if(isset($this->cart[$key])&&!empty($this->cart[$key])&&array_key_exists($key,$this->cart)) return true; return false; } // }}} // {{{ isEmpty() /** * 判断当前购物车是否为空,即没有任何商品 * * @access public * @return bool true or false; */ function isEmpty(){ return !count($this->cart); } // }}} // {{{ _stat() /** * 取得部分统计信息 * * @access private * @return bool true or false; */ function _stat(){ if($this->isEmpty()) return false; foreach($this->cart as $item){ $this->totalCount += @end($item); $this->totalPrices += @prev($item); } return true; } // }}} // {{{ totalPrices() /** * 取得当前购物车所有商品的总金额 * * @access public * @return float 返回金额; */ function totalPrices(){ if($this->_stat()) return $this->totalPrices; return 0; } // }}} // {{{ isEmpty() /** * 取得当前购物车所有商品的总数量和 * * @access public * @return int ; */ function totalCount(){ if($this->_stat()) return $this->totalCount; return 0; }}//End Class Cart?> <?php//调用实例require_once 'cart.class.php';session_start();if(!isset($_SESSION['cart'])) { $_SESSION['cart'] = new Cart;}$cart =& $_SESSION['cart'];if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='add') ){ $p = $_POST['p']; $items = $cart->add($p);}if( ($_GET['action']=='remove')&&($_GET['key']!="") ) { $items = $cart->remove($_GET['key']);}if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='modi') ){ $key = $_POST['key']; $value = $_POST['value']; for($i=0;$i<count($key);$i++){ $items = $cart->modi($key[$i],$value[$i]); }}$items = $cart->getCart();//打印echo "<table border=1>";setlocale(LC_MONETARY, 'it_IT');foreach($items as $item){ echo "<tr><form method=\"post\" action=\"tmp.php\">"; echo "<td>ID:".$item['ID']."<input type=hidden name=key[] value=".$item['ID'].">"; echo "<td>产品:".$item['name']; echo "<td>单价:".$item['price']; echo "<td><input type=text name=value[] value=".$item['count'].">"; $sum = $item['count']*$item['price']; echo "<td>合计:".round($sum,2); echo "<td><input type=button value='删除' onclick=\"location='?action=remove&key=".$item['ID']."'\">";}echo "<input type=hidden name=action value=modi>";echo "<tr><td colspan=7><input type=submit />";echo "</td></form></tr></table>";?><hr><form method="post" action="tmp.php">ID:<input type="text" name="p[]" />品名:<input type="text" name="p[]" />单价:<input type="text" name="p[]" />数量:<input type="text" name="p[]" /><input type=hidden name=action value=add><input type="submit" /></form> PHP购物车实例, 简单容易理解。cookie存购物车ID,db存购物车数据。 购物车session的产生代码 if(! $session ! $scid) { /* session用来区别每一个购物车,相当于每个车的身份证号; scid只用来标识一个购物车id号,可以看做是每个车的名字; 当该购物车的id和s 网上搜到的,简单容易理解。cookie存购物车ID,db存购物车数据。 购物车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; //返回总量 } } excel导入mysql数据问题 大牛们好,php新手问几个面试题 网页静态化时怎么处理列表页的问题? 新手问题帮忙看看了 谢谢了 for循环解惑 急,php做为cgi连接mysql出现Can't create TCP/IP socket (10106) 怎样判断上传的文件的文件名里是含了中文? 如何取回刚刚存入数据库的记录的ID? 谁有网站计数器的源码啊??? 请教一下如何使页面不可脱机浏览 关于session读取问题 ajax 二级关联,拜谢大侠,救救
php 处理下订单的产品生成订单好, 存入汇总表 (总价格,总数量)商品存入明细表(商品编码,数量,价格 ,商品购买总价格, 折扣什么的,,看需求) 这些用存储过程实现。
用户操作用当前(不建立索引 影响新增和修改,删除的速度)
查询用历史表(建立索引)
源文件名称:cart.php
<?php
class cart
{
var $items;
var $sub_totals;
function cart()
{
$this->items= array();
$sub_totals=0;
}
function add_item($item_id,$qty,$item_price)
{
//Item not in cart
if(!isset($this->items[$item_id]))
{
//Add item to cart
$this->items[$item_id]["qty"]=$qty;
$total_cost=$this->items[$item_id]["total_cost"]=$qty*$item_price;
$this->sub_total+=$total_cost;
}
else
{
//Update item
$item_count=$this->items[$item_id]["qty"]+=$qty;
$this->items[item_id]["total_cost"]=$item_count*$item_price;
$new_cost=$qty*$item_price;
//Calculate subtotal
$this->sub_total+=$new_cost;
}
}
function modify_qty($item_id,$new_qty,$item_price)
{
//Modify qunality
$prev_qty=$this->items[$item_id]["qty"];
$qty_diff=$prev_qty – $new_qty;
$this->items[$item_id]["total_cost"]=$new_qty * $item_price;
$this->items[$item_id]["qty"]=$new_qty;
//Calculate new subtotal
$this->sub_total -= $qty_diff * $item_price;
}
function delete_item($item_id)
{
//Delete item from cart
$this->sub_total-=$this->items[$item_id]["total_cost"];
$this->items[$item_id]=array();
}
function num_items()
{
//Calculate total number of items
$total_items=0;
foreach($this->items as $item_id=>$item_data)
$total_items+=$item_id["qty"];
return $total_items;
}
function clear()
{
//Clear out the cart
$this->items=arrary();
$this->sub_total=0;
}
}//end class cart
?>316页例子源代码<?php
require_once(“cart.php”);
session_start(); if(!isset($user_cart))
{
$user_cart=new cart;
session_register(“user_cart”);
}
$user_cart->add_item(1,3,5);
$user_cart->add_item(2,7,10);
$user_cart->add_item(3,4,7.5);
$user_cart->modify_qty(2,3,10);
$user_cart->delete_item(3);
$total_items=$user_cart->num_items();
?>
<html>
<head>
<title>Shopping Cart Test</title>
</head>
<body>
<table>
<tr>
<td>Shopping Cart</td>
</tr>
<tr>
<td>Number of Items:
<?php
echo $total_items;
?></td>
</tr>
<tr><td>Subtotal Cost:
<?php
echo $user_cart->sub_total;
?></td></tr>
</table>
</body>
</html>
一个PHP购物车类 收藏
<?
/**
* Cart
*
* 购物车类
*
* @author doodoo<[email protected]>
* @package Cart
* @category Cart
* @license PHP License
* @access public
* @version $Revision: 1.10 $
*/
Class Cart{ var $cart;
var $totalCount; //商品总数量
var $totalPrices; //商品总金额 /**
* Cart Constructor
*
* 类的构造函数,使购物车保持稳定的初始化状态
*
* @static
* @access public
* @return void 无返回值
* @param void 无参数
*/
function Cart(){
$this->totalCount = 0;
$this->totalPrice = 0;
$this->cart = array();
}
// }}}
// {{{ add($item) /**
* 增加商品到当前购物车
*
* @access public
* @param array $item 商品信息(一维数组:array(商品ID,商品名称,商品单价,商品数量))
* @return array 返回当前购物车内商品的数组
*/
function add($item){
if(!is_array($item)||is_null($item)) return $this->cart;
if(!is_numeric(end($item))||(!is_numeric(prev($item)))) {
echo "价格和数量必须是数字";
return $this->cart;
}
reset($item); //这一句是必须的,因为上面的判断已经移动了数组的指标
$key = current($item);
if($key=="") return $this->cart;
if($this->_isExists($key)){ //商品是否已经存在?
$this->cart[$key]['count'] += end($item);
return $this->cart;
} $this->cart[$key]['ID'] = $key;
$this->cart[$key]['name'] = next($item);
$this->cart[$key]['price'] = next($item);
$this->cart[$key]['count'] = next($item); return $this->cart;
} // }}}
// {{{ add($item) /**
* 从当前购物车中取出部分或全部商品
* 当 $key=="" 的时候,清空当前购物车
* 当 $key!=""&&$count=="" 的时候,从当前购物车中拣出商品ID号为 $key 的全部商品
* 当 $key!=""&&$count!="" 的时候,从当前购物车中拣出 $count个 商品ID号为 $key 的商品
*
* @access public
* @param string $key 商品ID
* @return mixed 返回真假或当前购物车内商品的数组
*/
function remove($key="",$count=""){
if($key=="") {
$this->cart = array();
return true;
}
if(!array_key_exists($key,$this->cart)) return false;
if($count==""){ //移去这一类商品
unset($this->cart[$key]);
}else{ //移去$count个商品
$this->cart[$key]['count'] -= $count;
if($this->cart[$key]['count']<=0) unset($this->cart[$key]);
}
return $this->cart;
} // }}}
// {{{ modi($key,$value) /**
* 修改购物车内商品ID为 $key 的商品的数量为 $value
*
* @access public
* @param string $key 商品ID
* @param int $value 商品数量
* @return array 返回当前购物车内商品的数组;
*/
function modi($key,$value){
if(!$this->_isExists($key)) return $this->cart(); //不存在此商品,直接返回
if($value<=0){ // value 太小,全部删除
unset($this->cart[$key]);
return $this->cart;
}
$this->cart[$key]['count'] = $value;
return $this->cart;
}
/**
* 返回当前购物车内商品的数组
*
* @access public
* @return array 返回当前购物车内商品的数组;
*/
function getCart(){
return $this->cart;
} // }}}
// {{{ _isExists($key) /**
* 判断当前购物车中是否存在商品ID号为$key的商品
*
* @access private
* @param string $key 商品ID
* @return bool true or false;
*/
function _isExists($key)
{
if(isset($this->cart[$key])&&!empty($this->cart[$key])&&array_key_exists($key,$this->cart))
return true;
return false;
} // }}}
// {{{ isEmpty() /**
* 判断当前购物车是否为空,即没有任何商品
*
* @access public
* @return bool true or false;
*/
function isEmpty(){
return !count($this->cart);
} // }}}
// {{{ _stat() /**
* 取得部分统计信息
*
* @access private
* @return bool true or false;
*/
function _stat(){
if($this->isEmpty()) return false;
foreach($this->cart as $item){
$this->totalCount += @end($item);
$this->totalPrices += @prev($item);
}
return true;
} // }}}
// {{{ totalPrices() /**
* 取得当前购物车所有商品的总金额
*
* @access public
* @return float 返回金额;
*/
function totalPrices(){
if($this->_stat())
return $this->totalPrices;
return 0;
} // }}}
// {{{ isEmpty() /**
* 取得当前购物车所有商品的总数量和
*
* @access public
* @return int ;
*/
function totalCount(){
if($this->_stat())
return $this->totalCount;
return 0;
}
}//End Class Cart
?> <?php
//调用实例
require_once 'cart.class.php';
session_start();
if(!isset($_SESSION['cart'])) {
$_SESSION['cart'] = new Cart;
}
$cart =& $_SESSION['cart'];if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='add') ){
$p = $_POST['p'];
$items = $cart->add($p);
}
if( ($_GET['action']=='remove')&&($_GET['key']!="") ) {
$items = $cart->remove($_GET['key']);
}if( ($_SERVER['REQUEST_METHOD']=="POST")&&($_POST['action']=='modi') ){
$key = $_POST['key'];
$value = $_POST['value'];
for($i=0;$i<count($key);$i++){
$items = $cart->modi($key[$i],$value[$i]);
}
}$items = $cart->getCart();
//打印
echo "<table border=1>";
setlocale(LC_MONETARY, 'it_IT');
foreach($items as $item){
echo "<tr><form method=\"post\" action=\"tmp.php\">";
echo "<td>ID:".$item['ID']."<input type=hidden name=key[] value=".$item['ID'].">";
echo "<td>产品:".$item['name'];
echo "<td>单价:".$item['price'];
echo "<td><input type=text name=value[] value=".$item['count'].">";
$sum = $item['count']*$item['price'];
echo "<td>合计:".round($sum,2);
echo "<td><input type=button value='删除' onclick=\"location='?action=remove&key=".$item['ID']."'\">";
}
echo "<input type=hidden name=action value=modi>";
echo "<tr><td colspan=7><input type=submit />";
echo "</td></form></tr></table>";
?>
<hr>
<form method="post" action="tmp.php">
ID:<input type="text" name="p[]" />
品名:<input type="text" name="p[]" />
单价:<input type="text" name="p[]" />
数量:<input type="text" name="p[]" />
<input type=hidden name=action value=add>
<input type="submit" />
</form>
PHP购物车实例, 简单容易理解。cookie存购物车ID,db存购物车数据。 购物车session的产生代码 if(! $session ! $scid) { /* session用来区别每一个购物车,相当于每个车的身份证号; scid只用来标识一个购物车id号,可以看做是每个车的名字; 当该购物车的id和s
网上搜到的,简单容易理解。cookie存购物车ID,db存购物车数据。 购物车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; //返回总量
}
}