免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 924 | 回复: 0
打印 上一主题 下一主题

提供一个最简单的购物车 [复制链接]

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-13 21:01 |只看该作者 |倒序浏览

1、session_start()为什么不写在类里面?
答: 如果在类中session_start();那么当程序中再次出现session_start()时会出错
2、不要再每次增加商品和修改数量的时候计算金额,只存数量和单价就可以了,需要金额的时候再计算比较好点
答:好在这只是数组操作,应该对效率影响不大,所以我还是参照现在网上商店的作法,给出计算结果
3、为什么把价格取整?
答:这的确是一个重大失误,价格不能intval而应floatval.
以下把修改后的文件再发一次.
cart.class.php
已经修改后的PHP代码:------------------------------------------------------------------
$val)
            {
                // 如果商品存在就加数量和价格
                if($this->_isExists($key))
                {
                    $_SESSION['cart'][$key]["count"] += floatval($val['price'])*intval($val['num']);
                    $_SESSION['cart'][$key]["num"]   += intval($val['num']);
                }
                // 否则直接加入
                else
                {
                    $_SESSION['cart'][$key]  = $data[$key];
                    $_SESSION['cart'][$key]["name"]  = $val['name'];
                    $_SESSION['cart'][$key]["price"] = $val['price'];
                    $_SESSION['cart'][$key]["count"] = floatval($val['price'])*intval($val['num']);
                    $_SESSION['cart'][$key]["num"]   = intval($val['num']);
                }
            }
        }
    }
  
    /**
    *   函数名称:   _isExists
    *   函数功能:   判断此商品是否存在
    *   输入参数:   $id ---------- 商品ID
    *   函数返回值: bool
    *   其他说明:   2004-8-19
    */
    function _isExists($id)
    {
        if(isset($_SESSION['cart'][$id])&&!empty($_SESSION['cart'][$id])&&array_key_exists($id,$_SESSION['cart']))
        {
            Return true;
        }
        else
        {
            Return false;
        }
    }
  
    /**
    *   函数名称:   modItem
    *   函数功能:   修改商品数量
    *   输入参数:   $id -------------- 商品ID
    *              $num ------------- 商品数量
    *   函数返回值: 返回值说明
    *   其他说明:   说明
    */
    function modItem($id,$num)
    {
        $arr = $this->getItems($id);
        // 如果商品存在就改数量和价格
        if($this->_isExists($id))
        {
            $_SESSION['cart'][$id]["count"] = intval($arr['price'])*intval($num);
            $_SESSION['cart'][$id]["num"]   = intval($num);
        }
    }
  
    /**
    *   函数名称:   getItems
    *   函数功能:   取得商品数组
    *   输入参数:   $id --------------- 某商品的ID
    *   函数返回值: array
    *   其它说明:   2004-8-19
    */
    function getItems($id=null)
    {
        if(isset($_SESSION['cart']))
        {
            if($id==null)
            {
                Return $_SESSION['cart'];
            }
            else
            {
                Return $_SESSION['cart'][$id];
            }
        }
    }
  
    /**
    *   函数名称:   emptyItem
    *   函数功能:   删除商品
    *   输入参数:   $id ----------- 商品ID
    *   函数返回值: bool
    *   其它说明:   2004-8-19
    */
    function emptyItem($id=null)
    {
        if($id==null)
        {
            unset($_SESSION['cart']);
        }
        else
        {
            unset($_SESSION['cart'][$id]);
        }
    }
  
    /**
    *   函数名称:   sum
    *   函数功能:   统计总价
    *   输入参数:   none
    *   函数返回值: int
    *   其它说明:   2004-8-19
    */
    function sum()
    {
        $total = 0;
        if(isset($_SESSION['cart'])&&!empty($_SESSION['cart']))
        {
            foreach($_SESSION['cart'] as $key=>$val)
            {
                $total += $val['count'];
            }
        }
        Return $total;
    }
}
?>

--------------------------------------------------------------------------------
测试文件,发现以前的办法太笨了。
PHP代码:--------------------------------------------------------------------------------
                           
        [偶然]         2004-8-19        1.0         创建模块
**************************************************************************/
session_start();
require_once "cart.class.php";
$cart = new cart();
  
// 添加
if(isset($_POST['action'])&&!empty($_POST['action'])&&$_POST['action']=="additem")
{
    $postitempid   = isset($_POST['itempid'])&&!empty($_POST['itempid'])?$_POST['itempid']:null;
    $postitemname  = isset($_POST['itemname'])&&!empty($_POST['itemname'])?$_POST['itemname']:null;
    $postitemprice = isset($_POST['itemprice'])&&!empty($_POST['itemprice'])?$_POST['itemprice']:null;
    $postitemnum = isset($_POST['itemnum'])&&!empty($_POST['itemnum'])?$_POST['itemnum']:null;
    $arr = array(
        "$postitempid" =>array(
            "name"  => $postitemname,
            "price" => $postitemprice,
            "num"   => $postitemnum
        )
    );
    $cart->addItem($arr);
}
  
  
// 删除
if(isset($_GET['act'])&&!empty($_GET['act'])&&$_GET['act']=="del"&&!empty($_GET['id']))
{
    $cart->emptyItem($_GET['id']);
}
// 清空
if(isset($_GET['act'])&&!empty($_GET['act'])&&$_GET['act']=="clean")
{
    $cart->emptyAll();
    header("location: testcart.php");
}
  
// 改
if(isset($_POST['action'])&&$_POST['action']=="修改")
{
//print_r($_POST);
    $postpnum  = isset($_POST['pnum'])&&!empty($_POST['pnum'])?$_POST['pnum']:null;
    if(!empty($postpnum))
    {
        foreach($postpnum as $key=>$val)
        {
            $cart->modItem($key,$val[0]) ;
        }
    }
}
?>
清空
getItems();
if(is_array($getarr)&&!empty($getarr))
{
    // 列表
    foreach($getarr as $pkey=>$pval)
    {
        if($pkey!=null)
        {
?>
    ID:
    名称:
    单价:
    数量:][]" value="">
    合计
    ">删除
总计:sum()?>
因为只做测试,所以不对数量,ID等参数做严格限制,爱填什么就填什么.
ID:
名称:
单价:
数量:




另一个购物车
PHP代码:--------------------------------------------------------------------------------
我的购物车 因为是给公司写的程序而且随用什么功能家什么功能
所以我连购物车的模板都放进来了,那个时候还不会用模板
里面有的函数 是根据我的实际需要制定的 请仅参考实际购物车部分
Class Car extends Mysql
{
    #添加
    Function AddCar($id)
    {
        $num=1;
        $new=array("id"=>$id,"num"=>$num,"danjia"=>"","beizhu"=>"");
        if(!is_array($_SESSION[car]))
        {
            $_SESSION[car]=array();
        }
        while (list($tmp)=each($_SESSION[car])) //如果购物车内有所添加的产品则提示有
        {
             if(strcmp($_SESSION[car][$tmp][id],$id)==0)
             {
                 return("have");
                 exit;
             }
        }
        if(array_push($_SESSION[car],$new))
        {
            return("ok");
            exit;
        }
        else
        {
            return("error");
            exit;
        }
    }
    #删除
    Function DelCar($id)
    {
        while (list ($tmp)=each($_SESSION[car]))
        {
            if(strcmp($_SESSION[car][$tmp][id],$id)==0)
            {
                unset($_SESSION[car][$tmp]);
                reset($_SESSION[car]);
                return("ok");
             }
        }
    }
    #清空
    Function DelAll()
    {
        session_unregister(car);
        return("ok");
    }
    #改变
    Function EditNum($id,$num,$danjia,$beizhu)
    {
        if($num
已添加产品
   
        
        名称
        
        型号
        
        单价
        数量
        总价格
        操作
   
   
         
        还没有选定任何产品
        
   
        
        返回选择产品
   
EOT;
            return($html);
            exit;
        }
        $count=count($_SESSION[car]);
        $i=0;
        $html=
已添加产品
function SubmitTo(formname)
{
    if(formname.sheng["0"].checked)
    {
        url='MakeBaojiaDan.php';
    }
    if(formname.sheng["1"].checked)
    {
        url='MakeHeTongDan.php?action=allmake';
    }
    if(formname.sheng["2"].checked)
    {
        url='MakeChuKuDan.php?action=allmake';
    }
    if(formname.sheng["3"].checked)
    {
        url='MakeBaojiaDan.php?action=add_chan';
    }
    if(formname.sheng["4"].checked)
    {
        url='MakeHeTongDan.php?action=add_chan';
    }
    if(formname.sheng["5"].checked)
    {
        url='MakeChuKuDan.php?action=add_chan';
    }
   
    formname.action = url;
}
   
        
        名称
        
        型号
        
        单价
        数量
        总价格
        备注
        操作
   
EOT;
        while($iGet($id[$i]);
            if(empty($_SESSION[car][$tmp][danjia]))
            {
                $danjia[$i]=$this->maijia;
            }
            $zongjia=$num[$i]*$danjia[$i];
            $html.="";
            $html.="".$this->name."";
            $html.="".$this->xinghao."";
            $html.="";
            $html.="";
            $html.="".$zongjia."";
            $html.="".$beizhu[$i]."";
            $html.="删除";
            $heji+=$zongjia;
        }
        $i++;
        }
        $_SESSION[Car_heji]=$heji;
        $html.=
   
        
        合计 $heji 元
   
   
        
        
   
   
        
        
             
             
        
        
            付款方式:款到发货  
            邮局汇款  
            银行汇款 
            支票 
            现金送货方式:送货上门  
            普通邮寄  
            中铁快运  
            空运  
            EMS特快专递  
            客户上门提货
            发票选项:增值发票  
            普通发票  
            不要发票
            备注:
   
   
        
        
        
        直接生成报价单 
        直接转成合同  
        直接生成出库单 
        追加报价单 
        追加合同单
        追加出库单
   
   
        
        清空 |
         | 继续选择产品
   
EOT;
return($html);
    }
    #读取基本资料
    var $name;
    var $xinghao;
    var $maijia;
    Function Get($id)
    {
        parent::Connects();
        $sql="SELECT * FROM chanpin WHERE ID='$id'";
        $query=mysql_query($sql);
        $row=mysql_fetch_array($query);
        $this->name=$row['name'];
        $this->xinghao=$row['xinghao'];
        $this->maijia=$row['maijia'];
    }

}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/4206/showart_687113.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP