喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

[北京]代朋友公司招聘PHP高级程序员多名

上一主题 下一主题
 23  1/3  1  2  3  > 
     
标题: 做个购物车类怎么样?  
 
yhlong (yhlong)
金牌会员
Rank: 6Rank: 6
高级会员



UID 10030
精华 3
积分 1400
帖子 1338
金钱 1370 喜悦币
威望 30
人脉 0
阅读权限 70
注册 2001-11-2
来自 山东烟台
状态 离线
做个购物车类怎么样?

稳定的,安全的,效率高的,自动垃圾回收的。大家一起来做怎么样?
2003-7-29 01:05 AM#1
查看资料  发短消息  顶部
 
yuyu (yuyu)
高级会员
Rank: 4
Banned



UID 15789
精华 0
积分 614
帖子 614
金钱 614 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2002-8-9
状态 离线
[推荐阅读] 回文倒顺
这地方人说地多,做地少
2003-7-29 05:21 AM#2
查看资料  发短消息  顶部
 
yhlong (yhlong)
金牌会员
Rank: 6Rank: 6
高级会员



UID 10030
精华 3
积分 1400
帖子 1338
金钱 1370 喜悦币
威望 30
人脉 0
阅读权限 70
注册 2001-11-2
来自 山东烟台
状态 离线
[推荐阅读] Kao和矿哥的聊天记录
:blowzy:
2003-7-29 01:22 PM#3
查看资料  发短消息  顶部
 
xiaocon (xiaocon)
高级会员
Rank: 4
版主


UID 4864
精华 4
积分 999
帖子 939
金钱 959 喜悦币
威望 40
人脉 0
阅读权限 50
注册 2000-11-22
状态 离线
[推荐阅读] 精华区的帖子少了很多啊!!


QUOTE:
最初由 yhlong 发布
[B]:blowzy: [/B]
贴个购物车的类,最大的特点是只用了一个Session
各位可根据自己需要改一下,最大的特点是只用了一个Session,有的地方是用了以前网上的一个购物车的类改写的,我也没有好好地整理过

<?php
class cart 

  var 
$sortCount//商品种类数 
  
var $totalCost//商品总金额 
  /* 所有的商品,如:$myCart[5][$name]:商品编号为5的名称
  *               $myCart[5][$price]:商品编号为5的单价 
  *          $myCart[5][$count]:商品编号为5的数量
  *               $myCart[5][$cost]:商品编号为5的合计金额
  */
  
var $myCart    ;  
  var 
$Id;        //每类商品的ID(数组) 
  
var $Name;        //每类商品的名称(数组) 
  
var $Price;        //每类商品的价格(数组) 
  
var $Count;        //每类商品的件数(数组) 
  
var $Cost;        //每类商品的价值(数组) 

   
  //******构造函数 
  
function cart(){ 
    
$this->sortCount 0    
    
$this->totalCost 0    ;
    
$this->myCart    = array()    ;
    
session_start();    //初始化一个session 
    
if(session_is_registered("myCart")==false)    session_register('myCart');       
    
$this->update(); 
  
//  $this->Calculate(); 
     
  

   
  
//********私有,根据session的值更新类中相应数据 
  
function update(){ 
    
session_start();    //初始化一个session 
    
$myCart $_SESSION["myCart"]        ;
    if(
false==$myCart)
    {
        
$this->sortCount 0    ;
        
$this->totalCost 0    ;
        
$this->myCart = array()    ;
        return 
false;
    }
    
//得到商品的总数量
    
$this->sortCount=count($myCart); 
    if(
$this->sortCount>0)
    {
        
//开始计算商品的金额
        
$totalCost 0    ;
        foreach(
$myCart as $key=>$val)
        {
            
//先四舍五入
            
foreach($val as $proName=>$proVal)
            {
                if(
$proName !="name")
                {
                    
$val[$proName] = round(eregi_replace(",""",$proVal),2)    ;
                    
$myCart[$key][$proName] = $val[$proName]    ;
                }
            }
                
            
//计算每件商品的金额
            
$myCart[$key]["cost"] = round($val["count"]*$val["price"], 2)    ;
            
//得到所有商品的金额
            
$totalCost += $myCart[$key]["cost"]    ;            
        }
        
$this->totalCost $totalCost    ;
        
$this->myCart $myCart            ;
        
$_SESSION["myCart"] = $myCart    ;

    }
     
  } 
   
/**
* 格式化数字为货币数据
*
*
**/
  
function formatNum($data)
  {
    foreach(
$data as $key=>$val)
    {
        foreach(
$val as $sName=>$sValue)
        {
            if(
$sName !="name")
            {    
                
$data[$key][$sName] = number_format($sValue2)    ;
            }
        }
    }
    return 
$data    ;

  }
//**************以下为接口函数 
   
//*** 加一件商品 
// 判断是否蓝中已有,如有,加count,否则加一个新商品 
//首先都是改session的值,然后再调用update() and calculate()来更新成员变量 
  
function addOne($id,$na,$pr)
  { 
    
session_start();    //初始化一个session 
    
$myCart $_SESSION["myCart"]        ;
    
//设置购物车中的数量
    
$myCart[$id]["name"]  = $na    ;
    
$myCart[$id]["price"] = $pr    ;
    ++
$myCart[$id]["count"]    ;
    
$_SESSION["myCart"] = $myCart    ;
    
//更新一下类的成员数据 
    
$this->update();    

  } 
/**
* 向购物车中添加一组商品,如果没有,进行添加,如果已经存在,则更新为data
* @param $data  - 要添加的商品,格式为:
*                 $data[0][id],   $data[0][name],
*                 $data[0][price],$data[0][count]
* @return boolean
*/
function addData($data)
{
    if(
count($data 0))  
    {
        
session_start();    //初始化一个session 
        
$myCart $_SESSION["myCart"]        ;
        foreach(
$data as $val)
        {
            
extract($val)    ;
            
//设置购物车中的数量
            
$myCart[$id]["name"]  = $name    ;
            
$myCart[$id]["price"] = $price    ;
            
$myCart[$id]["count"] = $count    ;
        }
        
$_SESSION["myCart"] = $myCart    ;
        
//更新一下类的成员数据 
        
$this->update();      
    }
}
/*
* 更改一件商品的单价
*
*
*
**/
function updatePrice($id$price)
{
    if(
$price <=0)    return false    ;
    
session_start();    //初始化一个session 
    
$myCart $_SESSION["myCart"]        ;
    if(
$myCart[$id]==true)
    {
        
$myCart[$id]["price"]=$price

           
$_SESSION["myCart"] = $myCart    ;
        
$this->update(); 
    }
}
//将一件商品的数量减1
  
function removeOne($id)
  { 
      
$count $this->myCart[$id]["count"]    ;
      if(
$count>0)
      {
          
$this->modifyCount($id, --$count)    ;
      }
   
  } 
   
  
//改变商品的个数,如果传入单价,则一起更改单价 
  
function modifyCount($id$ncount$price=0)
  { 
    if(
$ncount <= 0) return false    ;
    
session_start();    //初始化一个session 
    
$myCart $_SESSION["myCart"]        ;
    if(
$myCart[$id]==true)
    {
        
$myCart[$id]["count"]=$ncount
        
//如果有传入单价,则一起更改单价
        
if($price >$myCart[$id]["price"]=$price

           
$_SESSION["myCart"] = $myCart    ;
        
$this->update(); 
    }
   
  } 
   
  
//清空一种商品 
  
function emptyOne($i)
  { 
    
session_start();    //初始化一个session 
    
$myCart $_SESSION["myCart"]        ;
    unset(
$myCart[$i])    ; 
    if(
count($myCart)==0)
    {
        
$this->emptyAll()    ;
    }else{
        
$_SESSION["myCart"] = $myCart        ;   
        
$this->update(); 
    }
  } 
   
   
  
/*************************** 
  清空所有的商品 
   
  因为在win里PHP不支持session_destroy()函数,所以这个清空函数不完善, 
  只是把每种商品的个数置为0。 
  如果是在linux下,可以直接用session_destroy()来做。 
  *****************************/ 
  
function emptyAll()
  { 
       
session_start();    //初始化一个session 
    
$myCart $_SESSION["myCart"]        ;
    
    unset(
$myCart)    ; 
    
$_SESSION["myCart"] = $myCart        ;   
    
$this->update(); 
     
  } 
   
  
/**
  *  返回所有购物车中的数据
  *
  **/
  
function getData()
  {
      if(
$this->sortCount 0)
      {
          return 
$this->myCart    ;
      }else{
          return array()    ;
      }
  }
  
//取一件商品的信息,主要的工作函数 
  //返回一个关联数组,下标分别对应 id,name,price,count,cost 
  
function getOne($i){ 
    
$data $this->myCart[$i]        ;
    if(
false==$data) return array()    ;

    
$data["id"]    =    $i                ;
    return 
$data                        

  } 
   
  
//取总的商品种类数 
  
function getSortCount(){ 
    return 
$this->sortCount
  } 
   
  
//取总的商品价值 
  
function getTotalCost(){ 
    return 
$this->totalCost
  } 
   
//end class  


?> 

这是我当时写的一个列出所有购物车中的清单的程序,各位可自己根据需要改写一下 
<?php
    ob_start
();
    
session_start()                 ;
/*
    $s=array("id" => 6, "name" => "测试a", "price" => "6", "count" =>3);
    $t=array("id" => 7, "name" => "测试b", "price" => "7", "count" =>15);
    $u=array("id" => 8, "name" => "测试c", "price" => "8", "count" =>21);
    $rst=array($s, $t, $u);

    */
    
require_once("HTML/IT.php");
    
$tpl    = new HTML_Template_IT("./"); 
    
//读取模板文件           
    
$tpl->setRoot("./");
    
$tpl->loadTemplatefile("listcart.html"truetrue); 
    require_once 
"../classes/cart.php" ;
    
$cart = new cart   ;
//    $cart->addData($rst);
    
$i=count($_POST[lines])    ;
    if(
$_POST["emptyAll"]==true)
    {
        
//如果清空条件为真
        
$cart->emptyAll()    ;
    }else{
        
//如果用户提交更新
        
if( $i 0)
        {
            
//如果提交过来的数据大于一个商品
            
$addData $_POST[lines]    ;
            foreach(
$addData as $key=>$val)
            {
                if(
$val["del"]==true)
                {    
                    
$cart->emptyOne($key)        ;
                    unset(
$addData[$key])            ;
                }
            }
            
$cart->addData($addData)    ;
        }
    }
    
$dat $cart->getData();
    if(
count($dat) > 0)
    {
        foreach(
$dat as $key=>$val)
        {        
            
$tpl->setCurrentBlock("lines") ;
    
//        $tpl->setVariable($lan) ;
            
$tpl->setVariable("id"$key) ;        
            
$tpl->setVariable("i" $key) ;    
            
$tpl->setVariable("totalCount" $cart->getSortCount()) ;
            
$tpl->setVariable("totalMoney" $cart->getTotalCost()) ;
            
$tpl->setVariable($val) ;    
            
$tpl->parseCurrentBlock("lines") ;    
        }
    }
    
//替换模板页面中的标记
    
$tpl->setCurrentBlock("page") ;
    if(
$key==false)$key=0;
    
$tpl->setVariable("i" $key) ;    
    
$tpl->setVariable("mytitle""我的购物篮") ;    
//    $tpl->setVariable($language->getLanUrl()) ;    
    
$tpl->parseCurrentBlock("page") ;  

    
//显示页面
    
$tpl->show();

ob_end_flush();
?>
2003-7-29 01:58 PM#4
查看资料  发短消息  QQ  顶部
 
yhlong (yhlong)
金牌会员
Rank: 6Rank: 6
高级会员



UID 10030
精华 3
积分 1400
帖子 1338
金钱 1370 喜悦币
威望 30
人脉 0
阅读权限 70
注册 2001-11-2
来自 山东烟台
状态 离线
[推荐阅读] 有错吗?
太好了,比我的强大。

<?
###########################
# Buy book online   #
# Version:1.0       #
###########################
define("_CART_INC","exists");
class 
BCart
{
 var 
$SortCount;//书的种类数
 
var $TotalCost;//书总价值
 
var $Id = Array();//书的唯一编号(数组)
 
var $DelId = Array();//要删除的id号(数组)
 
var $Bcount = Array(); //数量(数组)
 
var $Price = Array();//书的单价(数组)
/*--构造函数--*/
function BCart()
{
 
$this->SortCount 0;
 
session_start();//初始化一个session
 
$this->Update();
 
$this->Calculate();
}
/*--根据session的值更新类中的响应数据--*/
function Update()
{
 if(!isset(
$_SESSION['sId']) or !isset($_SESSION['sBcount']) or !isset($_SESSION['sPrice']))
 return;
 
$this->Id $_SESSION['sId'];
 
$this->Bcount $_SESSION['sBcount'];
 
$this->Price $_SESSION['sPrice'];
 
$this->SortCount count($_SESSION['sId']);

}
/*--加一件商品--*/
/*用户数据接口,记录商品的ID和数量*/
function Add($a_Id,$a_Count,$a_Price)
{
 
$k count($_SESSION['sId']);
 for(
$i=0;$i<$k;$i++)
 {
   
//检查是否已经加入了该书
  
if($_SESSION['sId'][$i] == $a_Id)
  {
    
$_SESSION['sBcount'][$i] += $a_Count;
    break;
  }
 }
 if(
$i >= $k)
  {
  
//如果没有则加入该书
   
$_SESSION['sId'][] = $a_Id;
   
$_SESSION['sBcount'][] = $a_Count;
   
$_SESSION['sPrice'][] = $a_Price;
  }

 
$this->Update(); //更新一下类成员数据
 
$this->Calculate();
 return 
1;
}
/*--删除一本书--*/
function Remove($a_id)
{
    foreach(
$_SESSION['sId'] as $key=>$value)
    {
     if(
$_SESSION['sId'][$key] == $a_id)
     {
      unset(
$GLOBALS[_SESSION]['sId'][$key]);
      unset(
$GLOBALS[_SESSION]['sBcount'][$key]);
      unset(
$GLOBALS[_SESSION]['sPrice'][$key]);
      break;
    }
  }

$this->Update();
$this->Calculate();
return 
true;
}
/*--记录选中要删除的书--*/
function Reg_Selected($a_DelId)
{
  
$k count($_SESSION['sDelId']);
  
$_SESSION['sDelId'][$k] = $a_DelId;
}

function  
Del_Selected()
{
  for(
$i=count($_SESSION['sDelId'])-1;$i>=0;$i--)
  {
    for(
$x=count($_SESSION['sId'])-1;$x>=0;$x--)
    {
      if(
$_SESSION['sDelId'][$i] == $_SESSION['sId'][$x])
      {
        unset(
$GLOBALS[_SESSION]['sId'][$x]);
        unset(
$GLOBALS[_SESSION]['sBcount'][$x]);
        unset(
$GLOBALS[_SESSION]['sPrice'][$x]);
      }
    }
  }
unset(
$_SESSION['sDelId']);
$this->Update();
$this->Calculate();
return 
true;
}

/*--改变书的数量--*/
function ModifyCount($a_i,$a_Count)
{
 
$_SESSION['sBcount'][$a_i] = $a_Count;
 
$this->Update();
 
$this->Calculate();
 return 
true;
}

/*--清空所有书目--*/
function Remove_All()
{
 unset(
$GLOBALS[_SESSION]['sId']);
 unset(
$GLOBALS[_SESSION]['sBcount']);
 unset(
$GLOBALS[_SESSION]['sPrice']);
 
$this->SortCount 0;
 
$this->TotalCost 0;
}
/*--访问每本书的数量--*/
function vist_count($i)
{
 return 
$this->Bcount[$i];
}
/*--判断该书是否已经存在--*/
function Exists($a_id)
{
  for(
$i=0$i<$this->SortCount$i++)
  {
    if(
$this->Id[$i]==$a_id)
    return 
TRUE;
  }
return 
FALSE;
}
/*--得到书在篮内的位置--*/
function IndexOf()
{
 for(
$i=0$i<$this->SortCount$i++)
  {
   if(
$this->Id[$i]==$id)
   return 
$i;
  }
return 
0;
}
/*--取一本书的ID--*/
function Item($i)
{
  
$_result['id'] = $this->Id[$i];
  
$_result['bcount'] = $this->Bcount[$i];
  
$_result['price'] = $this->Price[$i];
  return 
$_result;
}
//取出书的种类数
function CartCount()
{
return 
$this->SortCount;
}

}
?>
2003-7-29 06:13 PM#5
查看资料  发短消息  顶部
 
yhlong (yhlong)
金牌会员
Rank: 6Rank: 6
高级会员



UID 10030
精华 3
积分 1400
帖子 1338
金钱 1370 喜悦币
威望 30
人脉 0
阅读权限 70
注册 2001-11-2
来自 山东烟台
状态 离线
[推荐阅读] 拆字合字


QUOTE:
最初由 xiaocon 发布
[B]

贴个购物车的类,最大的特点是只用了一个Session
各位可根据自己需要改一下,最大的特点是只用了一个Session,有的地方是用了以前网上的一个购物车...以下省略 [/B]
这个购物车绿色吗?如何实现垃圾回收?有没有考虑把session存放在数据库中?
如果在线购物人数多了,会不会造成服务器的不稳定,也就是session很多的时候。
2003-7-29 06:19 PM#6
查看资料  发短消息  顶部
 
xiaocon (xiaocon)
高级会员
Rank: 4
版主


UID 4864
精华 4
积分 999
帖子 939
金钱 959 喜悦币
威望 40
人脉 0
阅读权限 50
注册 2000-11-22
状态 离线
[推荐阅读] 长联
没有放数据库
2003-7-29 06:29 PM#7
查看资料  发短消息  QQ  顶部
 
yhlong (yhlong)
金牌会员
Rank: 6Rank: 6
高级会员



UID 10030
精华 3
积分 1400
帖子 1338
金钱 1370 喜悦币
威望 30
人脉 0
阅读权限 70
注册 2001-11-2
来自 山东烟台
状态 离线
[推荐阅读] 谁能实现这种技术,帮帮我?
现在感觉存放在数据库中会更稳定安全。
2003-7-29 07:22 PM#8
查看资料  发短消息  顶部
 
Lujia (Lujia)
新手上路
Rank: 1
初级会员



UID 20603
精华 0
积分 2
帖子 2
金钱 2 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2003-6-10
状态 离线
[推荐阅读] 如何在php程序中控制网页对象
我想问问具体怎么用楼上的东东,譬如说怎么写网页代码才能把商品加入购物车,我对php才学,那位能讲一下吗
2003-8-1 12:42 PM#9
查看资料  发短消息  顶部
 
wyw5257 (wyw5257)
金牌会员
Rank: 6Rank: 6
高级会员


UID 19797
精华 0
积分 2066
帖子 2039
金钱 2066 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2003-4-22
状态 离线
[推荐阅读] document.all.alert.innerHTML
贴个购物车的类,最大的特点是只用了一个Session
各位可根据自己需要改一下,最大的特点是只用了一个Session,有的地方是用了以前网上的一个购物车...以下省略 [/B][/QUOTE]


用数组的好处就是大




Freedom
wyw5257[AT]163.com
2003-8-1 03:05 PM#10
查看资料  发短消息  QQ  顶部
 23  1/3  1  2  3  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.063873 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP