- 论坛徽章:
- 2
|
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 |
|