<?php
//购物车类
//支持自定义列名及列数
// 作者:天地小子 twt326@163.com
//转载或修改请保留原版权,谢谢
class twt_Cart
{
  //类属性*************************************************************
  var $sp_count;//商品类数
  var $sp_sumgold;//商品总金额
  var $fields;//自定义列
  var $f_num;//自定义列数
  var $f_key;//作为判断商品是否重复的关键字
  var $f_goldkey;//商品金额字段名 用于商品统计信息计算时用
  var $f_numkey;//商品数量字段名 用于商品统计信息计算时用
 
  var $cart;
 
  //构造函数
  function twt_Cart()
    {
 //从SESSION中读出一些必须参数
 session_start();
 if (! session_is_registered("mycart")) session_register("mycart");
 $mycart=$_SESSION["mycart"];
 $this->sp_count=count($mycart);
 if (! session_is_registered("mc_fields")) session_register("mc_fields");
 $this->fields=$_SESSION["mc_fields"];
 $this->f_num=count($this->fields)-1;
 if (! session_is_registered("mc_key")) session_register("mc_key");
 $this->f_key=$_SESSION["mc_key"];
 if (! session_is_registered("mc_goldkey")) session_register("mc_goldkey");
 $this->f_goldkey=$_SESSION["mc_goldkey"];
 if (! session_is_registered("mc_numkey")) session_register("mc_numkey");
 $this->f_numkey=$_SESSION["mc_numkey"];
 $this->cart=$mycart;
 $this->updatecart();
 }
 
 
  //类方法***************************************************************
  //更新总金额
  function updatecart()
   {
     session_start();
  if (! session_is_registered("mycart")) return false;
  $mycart=$_SESSION["mycart"];
  $tmp=0;
  for ($i=0;$i<$this->sp_count;$i++)
    $tmp+=$mycart[$i][$this->f_goldkey]*$mycart[$i][$this->f_numkey];
  $this->sp_sumgold=$tmp;
   }
  //设置自定义字段及初始化类 数组参数,以0开头
  function setfield($tfield)
    {
   if (is_array($tfield))
     {
  $this->fields=$tfield;
  //初始化一些值
  $this->f_num=count($tfield)-1;
  $this->f_key=$tfield[0];
  $this->f_goldkey=$tfield[0];
  $this->f_numkey=$tfield[0];
  session_start();
  $_SESSION["mc_fields"]=$tfield;
  $_SESSION["mc_key"]=$tfield[0];
  $_SESSION["mc_goldkey"]=$tfield[0];
  $_SESSION["mc_numkey"]=$tfield[0];
  }
   else
     return "参数传输错误,请传入从0开始下标的数组!";
 }//setfield end

//设置关键字
  function setkey($key,$numkey,$goldkey)
    {
   $this->f_key=$key;
   $this->f_goldkey=$goldkey;
   $this->f_numkey=$numkey;
   session_start();
   $_SESSION["mc_key"]=$key;
   $_SESSION["mc_goldkey"]=$goldkey;
   $_SESSION["mc_numkey"]=$numkey;
 }
 
  //清除购物篮
  function clear()
    {
   $mycart=$_SESSION["mycart"];
   unset ($mycart);
   $_SESSION["mycart"]=$mycart;
   session_unregister("mycart");
   session_unregister("mc_fields");
   session_unregister("mc_key");
   session_unregister("mc_goldkey");
   session_unregister("mc_numkey");
   $this->cart=$mycart;
   $this->sp_count=0;
   $this->sp_sumgold=0;
 }
 
 //功能方法/
 //添加商品 数组参数,以自定义的字段名这下标
 function addone($splist)
   {
     if ((! is_array($splist)) || ((count($splist)-1) != $this->f_num))
    return "参数传输错误,请传入以自定义字段名为下标且元数个数吻合的数组!";
  session_start();
  $mycart=$_SESSION["mycart"];
  //判断商品是否已经存在,如果存在,则加上
  $tflag=true;
  for ($i=0;$i<$this->sp_count;$i++)
    {    
      if ($mycart[$i][$this->f_key]==$splist[$this->f_key])
     {
       $tflag=false;
    //增加商品个数
    $mycart[$i][$this->f_numkey]+=$splist[$this->f_numkey];
    $i=$this->sp_count;
     }
    }
   //添加商品到列表中
   if ($tflag)
     {
       for ($i=0;$i<=$this->f_num;$i++)
      {
               $mycart[$this->sp_count][$this->fields[$i]]=$splist[$this->fields[$i]];
      }
    $this->sp_count+=1;
     }
     $this->cart=$mycart;
     $_SESSION["mycart"]=$mycart;
      $this->updatecart();
   }//add end 
  
  
 //删除一个商品
 function delone($id)
   {
            session_start();
            $mycart = $_SESSION["mycart"] ;
   for ($i=$id;$i<$this->sp_count-1;$i++)
     {
       for ($j=0;$j<=$this->f_num;$j++)
         $mycart[$i][$this->fields[$j]]=$mycart[$i+1][$this->fields[$j]];
     }
            unset( $mycart[$this->sp_count-1] ) ;
   $this->sp_count-=1;
            $_SESSION["mycart"] = $mycart ;
   $this->cart=$mycart;
            $this->updatecart();
   }//del end
  
  //修改一件商品的数量
  function modifyone($id,$num)
    {
          session_start();
          $mycart = $_SESSION["mycart"] ;
    if (! empty($mycart[$id][$this->f_key]))
    $mycart[$id][$this->f_numkey]=$num;
    $this->cart=$mycart;
    $_SESSION["mycart"]=$mycart;
    $this->updatecart();
    }
 
  //修改一件商品的单价
  function modifyprice($id,$num)
    {
          session_start();
          $mycart = $_SESSION["mycart"] ;
    if (! empty($mycart[$id][$this->f_key]))
    $mycart[$id][$this->f_goldkey]=$num;
    $this->cart=$mycart;
    $_SESSION["mycart"]=$mycart;
    $this->updatecart();
    }//modifyprice end
   
   
   //某件商品加1
  function add1($id)
    {
          session_start();
          $mycart = $_SESSION["mycart"] ;
    $mycart[$id][$this->f_numkey]+=1;
    $this->cart=$mycart;
    $_SESSION["mycart"]=$mycart;
    $this->updatecart();
    }
   
   
   //某件商品减1
  function del1($id)
    {
          session_start();
          $mycart = $_SESSION["mycart"] ;
    $mycart[$id][$this->f_numkey]-=1;
    $this->cart=$mycart;
    $_SESSION["mycart"]=$mycart;
    $this->updatecart();
    }
   
 
}//class end
?>

下面是类的用法实例页面:
<?php
session_start();
include ("admin/config/twt_Cart.CLASS.php");
include ("admin/config/config.php");
include ("admin/config/function.php");
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<title>我的购物车</title>
</head>
<style>
table {
 border: 0.5px solid;
}
.tbbb {
 border: 0.5px solid #FFCCFF;
}
</style>
<script language="javascript">
<!--
//函数名:fucCheckNUM
//功能介绍:检查是否为大于0数字
//参数说明:要检查的数字
//返回值:1为是数字,0为不是数字
function fucCheckNUM(NUM)
{
 var i,j,k,strTemp;
 strTemp="0123456789.";
 if ( NUM.length== 0)
  return false;
 for (i=0;i<NUM.length;i++)
 {
  j=strTemp.indexOf(NUM.charAt(i));
  if (j==-1)
  {
  //说明有字符不是数字
   return false;
  }
  }
  //检查小数点的个数
  k=0;
 strTemp=".";
 for (i=0;i<NUM.length;i++)
 {
  j=strTemp.indexOf(NUM.charAt(i));
  if (j != -1)
  {
  //是小数点
   k+=1;
  }
 if (k>0) return false;
 }
 if (NUM<=0) return false;
 //说明是数字
 return true;
}

function checknum(num)
{
  if (! fucCheckNUM(num))
    {
 document.frmspin.f_num.value=1;
 alert("请输入大于0的下整数!");
 return false;
 }
}
function modifyid(id)
{
  document.frmsplist.action="mycart.php?action=modify&id="+id;
  document.frmsplist.submit();
}
//-->
</script>
<body>
<?
$thiscart=new twt_Cart;
$field[0]="id";
$field[1]="name";
$field[2]="num";
$field[3]="gold";
$thiscart->setfield($field);
$thiscart->setkey("id","num","gold");
if ($_GET[action]=="incart")
{
$tlist["id"]=$_POST[f_id];
$tlist["name"]=$_POST[f_name];
$tlist["num"]=$_POST[f_num];
$tlist["gold"]=$_POST[f_gold];
$thiscart->addone($tlist);
}
 if ($_GET[action]=="del")
 {
   $thiscart->delone($_GET[id]);
 }
if ($_GET[action]=="modify")
{
  $thiscart->modifyone($_GET[id],$_POST["t_num_$_GET[id]"]);
}
if ($_GET[action]=="clear")
 {
   $thiscart->clear();
 }
if ($_GET[action]=="add1")
  {
    $thiscart->add1($_GET[id]);
  }
if ($_GET[action]=="del1")
  {
    $thiscart->del1($_GET[id]);
  }
if($_GET[action]=='indb')
{  
    if ($thiscart->sp_count==0)
     { $tmpstr="alert(/"没有定购任何商品!/");
      window.close();";
       echo getjavascript($tmpstr);
    }
 else
 {
   $sql[0]="delete from dglist where dgl_bjid=$_SESSION[wb_bjid]";
   $sql[1]="delete from dinggou where dg_uid=$_SESSION[wb_id] and dg_jid=$_SESSION[wb_bjid]";
   exesql($conf_db,$sql,$db,"清空旧的商品列表出错!","echo",true,"res");
   //插入定购表
   $sql="insert into dinggou set dg_uid=$_SESSION[wb_id],dg_jid=$_SESSION[wb_bjid]";
   exesql($conf_db,$sql,$db,"提交定单出错!","echo",true,"res");
   //插入商品
   $sql=array();
   for ($i=0;$i<$thiscart->sp_count;$i++)
     {
    $sql[$i]="insert into dglist set dgl_bjid=$_SESSION[wb_bjid],dgl_pid=".$thiscart->cart[$i]["id"].",dgl_num=".$thiscart->cart[$i]["num"];
  //  echo $sql[$i];
  } 
   exesql($conf_db,$sql,$db,"提交商品订单出错!","popup",true,"res");
   $thiscart->clear();
   $tmpstr="alert(/"操作完成,购物车已经被清空!/");
        window.open(/"http://".$_SESSION[wb_sip].":5026/dg|".rawurlencode($_SESSION[wb_bjno])."| /",/"订购商品/",/"width=500 height=300 revisable=no scrollbar=yes menubar=no status=no directions=no location=no toolbar=no/");
        window.close();";
   echo getjavascript($tmpstr);
   }
}
 ?>

<div align="center"><img src="data:image/cart/behav_01.gif" width="20" height="14"><font color="#33CCFF">我的购物车--&gt;商品列表</font><br/>
</div>
<table width="503" border="1" align="center" cellpadding="0" cellspacing="1" bordercolor="#CCCCFF">
<form name="frmsplist" method="post" action="mycart.php?action=indb">
  <tr>
    <td colspan="2"><div align="left"><a href="mycart.php?action=clear"><img src="data:image/cart/clear.gif" width="79" height="17" border="0"></a></div></td>
    <td colspan="3"><div align="center"></div>     
      <div align="right">
        <table width="91" border="1" cellpadding="0" cellspacing="3" bordercolor="#FFCCFF" bgcolor="#CCCCFF">
          <tr>
            <td width="81" bordercolor="#FFFF00"><div align="center">
              <input type="image" name="submit" src="data:image/cart/done.gif" border="0">
            </div></td>
          </tr>
        </table>
      </div></td>
    </tr>
  <tr>
    <td width="58"><div align="center">编号</div></td>
    <td width="168"><div align="center">品名</div></td>
    <td width="53"><div align="center">数量</div></td>
    <td width="63"><div align="center">价格</div></td>
    <td width="149"><div align="center">操作</div></td>
  </tr>
  <?php
  for ($i=0;$i<$thiscart->sp_count;$i++)
  {
  ?><tr>
    <td><div align="center"><?php echo $i+1; ?></div></td>
    <td><div align="center">
      <input type="text" name="textfield" value="<?php echo $thiscart->cart[$i]["name"]; ?>" readonly>
      </div></td>
    <td><div align="center">
 <input name="t_num_<?php echo $i; ?>" type="text" id="t_num_<?php echo $i; ?>" value="<?php echo $thiscart->cart[$i]["num"]; ?>" size=7>
 </div></td>
    <td><div align="right"><?php echo $thiscart->cart[$i]["gold"]; ?></div></td>
    <td><div align="center"><a href="javascript:modifyid(<?php echo $i; ?>);">修改</a> <a href="mycart.php?action=add1&id=<?php echo $i; ?>">加1</a> <a href="mycart.php?action=del1&id=<?php echo $i; ?>">减1</a> <a href="mycart.php?action=del&id=<?php echo $i; ?>">删除</a> </div></td>
  </tr><?php
   }
  ?><tr>
    <td colspan="2"><div align="center">&nbsp;</div></td>
    <td><div align="center">总额</div></td>
    <td colspan="2"><div align="right"><?php echo $thiscart->sp_sumgold; ?>元
      </div></td>
  </tr>
</form>
</table>
<table width="503" border="0" align="center" cellpadding="6" cellspacing="0">
  <tr>
    <td><div align="right"><a href="#" target="_self"><img src="data:image/cart/goon.gif" width="79" height="17" border="0" usemap="#Map" onClick="javascript:window.close();"></a></div></td>
  </tr>
</table>
<div align="center"><br/>
  <?php
if ($_GET[action]=="dgsp")
 {
?>
  <img src="data:image/cart/behav_01.gif" width="20" height="14"><font color="#33CCFF">订购商品</font><br/>
</div>
<table width="425" border="0" align="center" cellpadding="0" cellspacing="1" bordercolor="#FFCCFF">
<form name="frmspin" method="post" action="mycart.php?action=incart">
  <tr>
    <td width="71"><div align="right">
      <input name="f_id" type="hidden" id="f_id" value="<?php echo $_GET[cpid]; ?>">
      品名:</div></td><?php
   //从数据库中读出产品信息
   $sql="select * from shangpin where sp_id=$_GET[cpid]";
   $rst=exesql($conf_db,$sql,$db,"未找到商品!","popup","yes","rst");
   ?>
    <td width="205"><input name="f_name" type="text" id="f_name" readonly value="<?php echo $rst[sp_name]; ?>"></td>
    <td width="141" rowspan="4" valign="middle"><div align="center"><img src="<?php
 if (empty($rst[sp_img]))
   echo $conf_fimgpath."defult.jpg";
 else {
 if ($rst[sp_imgflag]==1)
   echo $conf_fimgpath.$_SESSION[wb_id]."/".$rst[sp_img];
 else
   echo $conf_fimgpath.$rst[sp_img];}
 ?>" width="120" height="120"></div></td>
  </tr>
  <tr>
    <td><div align="right">价格:</div></td>
    <td><input name="f_gold" type="text" id="f_gold" readonly value="<?php echo $rst[sp_gold]; ?>"></td>
    </tr>
  <tr>
    <td><div align="right">介绍:</div></td>
    <td><textarea name="textarea" cols="25" rows="4" wrap="VIRTUAL"><?php echo $rst[sp_text]; ?></textarea></td>
    </tr>
  <tr>
    <td><div align="right">数量:</div></td>
    <td><input name="f_num" type="text" id="f_num2" onChange="checknum(document.frmspin.f_num.value)" value="1" size="10"></td>
    </tr>
  <tr>
    <td colspan="3"><div align="center">
      <!--<input type="submit" name="Submit2" value="放入购物车">-->
      <input name="imageField" type="image" src="data:image/cart/buy.gif" width="79" height="17" border="0">
    </div></td>
  </tr>
</form>
</table>
<?php } ?>
</body>
</html>

我的购物车类,支持自定义列及自动金额计算相关推荐

  1. WeihanLi.Npoi 导出支持自定义列内容啦

    WeihanLi.Npoi 导出支持自定义列内容啦 Intro 之前也有网友给提出过希望列合并或者自定义列内容的 issue 或请求,起初因为自己做 WeihanLi.Npoi 这个扩展的最初目的是导 ...

  2. 定制table2excel插件,支持自定义列,导出excel

    首先需要下载定制版的table2excel. 没有积分的童鞋请访问链接: https://pan.baidu.com/s/1dE5P8YH 密码: g83j 需要积分下载地址定制版table2exce ...

  3. php 购物车类的属性,php购物车类

    <?php //购物车类 //支持自定义列名及列数 // 作者:天地小子 twt326@163.com //转载或修改请保留原版权,谢谢 class twt_Cart { //类属性****** ...

  4. 新版购物车类,加入查找功能以及完善错误处理功能

    <?php //购物车类 //支持自定义列名及列数 // 作者:天地小子 twt326@163.com //Create Time: 2004-10 //转载或修改请保留原版权,谢谢 //Las ...

  5. DevExpress 之 GridControl 自定义列

    Ø  前言 DevExpress 控件大家应该都有所了解,使用这个框架实现B/S或C/S的,都是非常出色的.本文主要讨论下 GridControl 中如何[自定义列]或[计算列],可使用以下两种方法实 ...

  6. PowerBI随笔(3)-增加自定义列

    商品表加上价格 然后增加自定义列,统计金额 (1)合并查询,加上价格 (2)增加自定义列

  7. #UML# Astah+Doxygen 将C++源码映射为类图内成员只支持基本类型不支持自定义类型

    根据上篇文章#UML# Astah+Doxygen 将C++源码映射为类图,我们可以很轻松的将源码自动映射成类图, 然而在实际过程中,会发现生成的类图中,成员变量经常会有丢失的现象. 只支持基本类型不 ...

  8. Python自定义类支持with关键字

    在任何语言中,文件操作都要遵循打开文件-操作文件-关闭文件,数据库操作也要遵循打开数据库连接-操作数据库-关闭数据库连接,网络编程中很多也具有同样的约定.下面的介绍以文件操作为例. 尽管都知道要关闭文 ...

  9. php 中 相关文章 的思路,php之购物车类思路及代码

    相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车: 就像我们平时去超市买东西一样,会推着购物车去买东西: 那么我们接下来看看jav ...

最新文章

  1. 题目 1083:【蓝桥杯】【入门题】Hello, world!
  2. UA MATH567 高维统计专题1 稀疏信号及其恢复6 随机设计矩阵下LASSO的估计误差
  3. 数据结构实验之链表一:顺序建立链表(SDUT 2116)
  4. 0179-Largest Number( 最大数)
  5. 连接数据库报“You have an error in your SQL syntax”异常的解决
  6. 从前序与中序遍历序列构造二叉树Python解法
  7. xp系统连接服务器工具,xp系统远程连接服务器
  8. 八、后台与数据库(IVX 快速开发教程)
  9. cf570 D. Tree Requests
  10. java错位_java – 如何保护自己免受参数错位的影响
  11. 【热点】WPA2协议遭破解,全世界wifi不安全了
  12. SQL必知必会-创建表和操纵表
  13. 二十五还是单身的十大原因
  14. 百度前端技术学院---vue动态数据绑定-3
  15. 从安装node js到构建一个vue并启动它
  16. IMDB TOP 250 电影榜单
  17. List集合去重的常见及常用的四种方式
  18. 大家查找医疗英文文献都去哪个网?
  19. 一些杂事之后,该收心了
  20. 小技巧 - 一键查看身份证名下所有支付宝账户(可选择注销)

热门文章

  1. ubunto v18设置屏保时间
  2. 计算是随着计算机的发明而被人们广泛应用,数学思想与方法 判断题
  3. html的表格分组标签简述优点,表格标签(table)深入了解
  4. 如何在Word中插入公式
  5. 人生失败的31种原因
  6. IBM Security AppScan9.0.3.5下载、破解和使用
  7. 【CSS】课程网站 网格商品展示 模块制作 ② ( 网格商品展示盒子模型测量及样式 | 处理列表间隙导致意外换行问题 | 代码示例 )
  8. 千塔之城-金色布拉格
  9. 寒假2—c-primer第二章(第一部分)
  10. 运动式蓝牙耳机哪个牌子好?运动式蓝牙耳机品牌推荐