设为首页 收藏本站
查看: 591|回复: 0

[经验分享] PHP购物车类

[复制链接]

尚未签到

发表于 2015-8-28 07:39:02 | 显示全部楼层 |阅读模式
  
  <?php
include("session.ini");
/**********************************/
/*****PHP购物车类*******************/
/*****作者:王亚君 李瑜欣2009-7-6  v1.0.1****/
/**********************************/

///*购物车类,本购物车类的设计原理是 购物车数据将只记录商品id和数量我们把这两个值做为键值对生成一个购物车数组变量并放到Session中,其它价格,打折与否等信息会在如查看购物车等方法的调用时从数据库中查找并计算,这样做的好处时价格和打折与否等信息可能更新而不准确,如果提前把这些信息提取到购物车数组变量中,在客户整个购物过程中数据有可能发生了改变*///
//include("session.ini");//如果你已经在头部php文件包含了session.ini这里就不用再包含
class Cart
{
  /// <summary>
        /// 把指定商品加入购物车
        /// </summary>
        /// <param name="$id">要加入购物车的商品id</param>
  public function  AddToCart($id)
  {
   //如果指定的商品ID在购物车数组变量中没有那说明是用户第一次买这个商品      
   
   if(empty($_SESSION['myCart'][$id]))
   {
    $_SESSION['myCart'][$id] = 1;
   }
   //如果不为空那么说明他已经买过了,我们要在原来数量的基础上加1
   else
   {
    $_SESSION['myCart'][$id] += 1;
   }
  }
  
  /// <summary>
        /// 查看购物车按指定的模板购造HTML和数据
        /// 要把本方法输出的代码放到一个form表单中
        /// 当提交到转换处理页面时,可以从POST数组中得到
        /// 修改后的数量(input中的值)重新写入session变量中
        /// 然后立即重新导向本页面查看购物车表格会重新生成
        /// 这样可以正确的得到修改后的结果,
        /// 参考本类中的AlterGoodsCount方法
        /// </summary>
        /// <param name="$tempLate">HTML格式模板
        /// </param>
        /// <param name="$safeSql">基本的不带条件
        /// SQL</param>        
        /// <param name="$cashUrl">结账页面URL</param>
  public function ShowCart($tempLate,$safeSql,$alterquantityUrl,$cashUrl)
  {
   include($tempLate);//把模板包含进来
   $condition = "";//查询条件,准备拼接id参数
   ;
   //$testString = $myCart[0];
   $count = count($_SESSION['myCart']);
   
   //拼接SQL查询条件
   if($count == null)
   {
    echo "<td align='center' height='20'>您还没有挑选商品,去挑选您喜欢的商品吧!</td>";
   }
   else
   {
   for ($i = 0; $i < $count; $i++)
   {
//    $myarr = $dealCart->GetCart();
//    $key = key($myarr);
    //key()函数返回当前项的键值在这里就是商品ID
    $key = key($_SESSION['myCart']);   
    $condition .= " GoodsId=$key";
    if ($i < $count - 1)
    {
     $condition .= ' or ';
    }                        //用or连接多个条件
    next($_SESSION['myCart']);       //把指针在数组中推进
   }
   $safeSql .= $condition;
   $result = DBHelper::ExecuteCommand($safeSql);
   $cartItems = '';
   $total = 0;
   $textboxCount = 0; //计算textbox的数量用来拼接textboxname
   $inputCount = 0; //隐藏域中商品id的数量
   while ($row = mysql_fetch_array($result))
   {     
    $goodsId = $row['GoodsId'];
    $imgUrl = $row['GoodsPhopo'];
    $goodsName = $row['GoodsName'];
    $unitPrice = $row['GoodsPrice'];
    $goodsXingHao = $row['GoodsXingHao'];
    $goodsPinPai = $row['GoodsPinPai'];
    $goodsHui = $row['GoodsHuiyuanjia'];
    $goodsQuantity = $_SESSION['myCart'][$row['GoodsId']];
     $total += $unitPrice * $goodsQuantity;//计算总金额
    $textBoxName = 'textBox'.$textboxCount;//拼接textbox名字
    $inputName = 'input'.$inputCount;//拼接input名字
    ++$textboxCount;//每循环一次就将其加1
    ++$inputCount;
    $cartItems .= str_ireplace(
       array('{goodsId}','{imgUrl}','{goodsName}','{unitPrice}','{huiyuanPrice}','{GoodsXingHao}','{goodsPinPai}','{goodsQuantity}','{textBoxName}','{inputName}'),    array($goodsId,$imgUrl,$goodsName,$unitPrice,$goodsHui,$goodsXingHao,$goodsPinPai,$goodsQuantity,$textBoxName,$inputName),
       $cartContent
       );   
    }  
   }
   
   $cartItems .= str_ireplace(
      array('{total}','{cashUrl}','{textBoxCount}','{inputCount}'),
      array($total,$cashUrl,$textboxCount,$inputCount),
      $cartTotalAndGoCash
      );
   
   echo $cartItems; //输出查看购物车HTML
  }
  
  /// <summary>
        /// 把指定的商品移除购物车
        /// </summary>
        /// <param name="$id">商品id</param>
  public function RemoveFromCart($id)
  {
   $isSuccessful = false;
   $offSet = 0;     //记录要删除的元素的位置,将从这里开始删除一个元素
   $isFind = false;
   $goodCount = count($_SESSION['myCart']);
   $i = 0;
   while ($i < $goodCount)
   {
    $key = key($_SESSION['myCart']);
    if($key == $id)
    {
     $isSuccessful = true;
     $isFind = true;
     break;//如果相等就break掉
    }
    ++$offSet;  //如果上面的if条件不为真  
    next($_SESSION['myCart']);
   }
  //   while (($key = key($_SESSION['myCart'])))
//   {
//    if($key == $id)
//    {
//     $isSuccessful = true;
//     $isFind = true;
//     break;//如果相等就break掉
//    }
//    ++$offSet;  //如果上面的if条件不为真  
//    next($_SESSION['myCart']);
//   }
   
  if($isFind==true)
  {
   unset($_SESSION['myCart'][$id]);
//array_splice($_SESSION['myCart'],$offSet,1);//从数组的$offSet处删掉一个元素
  }
   return $isSuccessful;
  }  
  
  /// <summary>
        /// 修改购物车中指定的商品数量
        /// </summary>
        /// <param name="$id">商品id</param>
  public function AlterGoodsQuantity($id,$newQuantity)
  {
   $isSuccessful = false;
   if(!empty($_SESSION['myCart'][$id]))
   {   
    if($newQuantity > 0)
    {
     $_SESSION['myCart'][$id] = $newQuantity;
     $isSuccessful = true;
    }
    if($newQuantity < 0)
    {
     $_SESSION['myCart'][$id] = (-1) * $newQuantity;
     $isSuccessful = true;
    }   
   }
     
//   $_SESSION['myCart'] = $this->arrCart;
   return $isSuccessful;
  }
  
  /// <summary>
        /// 清空购物车,要求在调用本方法前以经在客户端用
        ///Javascript脚本询问过用户是否确定清空,
        ///本方法一经调用购物车信息将全部删除
        /// </summary>
  public function ClearCart()
  {
   array_splice($_SESSION['myCart'],0);//从头开始删除所有购物车数组变量
  }
}
?>
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-105178-1-1.html 上篇帖子: 二十五个顶级PHP模板引擎整理 下篇帖子: php进主页出现:HTTP 错误 500(Internal Server Error):服务器尝试执行请求时遇到了意外情况。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表