首 页   · 站长博客 · 用户注册 · 会员登陆  · 会员排行  ·最新主题  ·最近回复  精华区  版权声明  ·论坛管理
  当前登录身份:游客,请先登录。  笔名: 口令: 验证码:   
楼 主  index »  HTML/JS/CSS技术专区 » [提问]大家帮看下这个类  


  作者:qinga1b2
  注册时间:2005-04-20
  主题/回复:13/17
  积分:482
  等级:★★☆(五级)
  称号:略有小成

  qinga1b2@163.com..
  未提供
  www.

 

 发表:2005-04-25 20:08:40 阅读 2242 次 回复 6 次 得分1  |   字号 字色
[提问]大家帮看下这个类
<?
class Cart{
var $Cartitem;
var $count;
var $owner;
var $time;
var $cartid;

///////////初始构造函数////////////
function Cart(){
$this->count=0;
if(isset($userid)){
$this->owner=$userid;
}
else
{
$this->owner=0;
}
$this->time=date("Y-m-d");
$this->cartid=time();

}

////////////添加商品的函数//////////////
function add_item($ProductID){
$flag=FALSE;
for($i=1;$i<=$this->count;$i++){
if($this->Cartitem[$i]["productid"]==$ProductID){
$this->Cartitem[$i]["quantity"]++;
$flag=TRUE;
break;
}
}

while(!$flag){
$connect=mysql_connect("localhost","root","");
mysql_select_db("eshop");
$query="select Price,ProductName from Product where ProductID=".$ProductID."";
$result=mysql_query($query);
$res=mysql_fetch_object($result);
$price=$res->Price;
$pname=$res->ProductName;
mysql_close($connect);
$this->count++;
$this->Cartitem[$count]["productid"]=$ProductId;
$this->Cartitem[$count]["quantity"]=1;
$this->Cartitem[$count]["price"]=$price;
$this->Cartitem[$count]["productname"]=$ProductId;
}
}


/////////////删除购物车中的某一个商品/////////////////
function remove_item($ProductID){
$flag=FALSE;
for($i=1;$i<=$this->count;$i++){
if($this->Cartitem[$i]["productid"]==$ProductID)
$j=$i;
$flag=true;
break;
}
if($flag){
for($i=$j;$i<=($this->count-1);$i++){
$this->Cartitem[$i]=$this->Cartitem[$i++];
}
$this->count--;
}
}


/////////////设定用户id,作用是用于用户在购物后才登录的情况//////////////
function set_owner(){
$this->owner==$userid;
}

//////////////显示购物车的函数////////////////////

function showcart(){

echo '<table width="450" border="1" align="center">
  <tr align="center" valign="middle">
<td>商品名</td>
<td>数量</td>
<td>价格</td>
<td>总计</td>
<td>删除</td>
  </tr>
  <tr align="center">';
$total=0;
for($i=0;$i<=$this->count;$i++){
//   <tr align="center" valign="middle">
echo '<td>'.$this->Cartitem[$i]["productname"].';</td>';
echo '<td><input type="text" name="a'.$i.'" size="7" maxlength="7" value="'.$this->Cartitem[$i]["quantity"].'"></td>';
echo '<td>'.$this->Cartitem[$i]["price"].'</td>';
$sum=$this->Cartitem[$i]["quantity"]*$this->Cartitem[$i]["price"];
echo '<td>'.$sum.'</td>';
echo '<td><a href=update.php?joh=del&id='.$this->Cartitem[$i]["productid"].'</td>';
echo '</tr>';
}
echo '</table>';
echo '<p>总金额为:'.$total.'元。</p>';
echo '<p><input type="hidden" name="job" value="update">
<input type="image" border="0" name="submit" src="" width="32" height="20">
<a href='.$PHP_SELF.'><img src="" width="32" height="20"><a>
<a href=check.php?total='.$total.'><img src="" width="32" height="20"><a>
<a href=showall.php?job=clear><img src="" width="32" height="20"><a>
</p>';
echo '</form>';
}

////////////////更新购物车的函数////////////////////
function updatecart($cartinfo){
$delcount=0;
for($i=1;$i<=$this->count;$i++){
$this->Cartitem[$i]["quantity"]=$cartinfo[$i];
if($cartinfo[$i]==0){
$delcount++;
$del[$delcount]=$this->Cartitem[$i]["productid"];
}

}

////////////////删除数量为0的商品/////////////////////
for($j=1;$j<=$delcount;$i++){
$this->remove_item($del[$i]);
}
}
}
?>
是不是要设置几个session,把var $Cartitem;
var $count;
var $owner;
var $time;
var $cartid;
几个成员数据记录于session中,但怎么可以实现 呢?
 
 1#楼  
 
  回复人:一起PHP
  注册时间:2004-02-27
  主题/回复:247/1521
  积分:4649
  等级:★★★★★☆(十一级)
  称号:论坛圣人

   
 1#楼 发表于2005-04-25 22:49:39  评分:1 

这是一个类,使用的时候肯定是需要创建一个类的对象(Object类型)才能使用,但是对象类型的变量是无法通过POST和get方法在页面之间传递的,而且通过session传递虽然有人说可以成功但是我试验过没有成功,所以只能把这个类中的重要变量放在session中,保证这些变量值的时效性和动态性,然后在不同的页面上创建对象,然后用类里面的方法来操作session中的数据。
具体到这个类,如果要使用,我觉得首先得把你说的类的5个成员变量(其中包括一个数组)和5个session变量联系起来,但是联系起来的代价是比较大的,基本上要对这个类作很大的手术。。在构造函数中加入变量初始化的语句,也就是每次创建一个对象的同时,把session中的最新数据更新到对象当中的5个变量,这样才能保证在不同的页面中使用这个类的对象时数据始终都是新的。还一种方法是干脆整个类中不再定义这五个变量,也就是把这五个变量改成5个session,把类中对这五个变量的操作全都改成对session的操作。。这样和第一个方法也是差不多的,也比较费劲。
应该还有一种方法,就是把php.ini的register_globals设置为on,这样的话session变量可以和普通变量一样使用,程序基本上不用作大的修改,但是这样做除了带来严重的安全问题以外,也非常容易带来变量命名的冲突问题,由于PHP对变量命名冲突不会给出检测,所以很容易产生严重的错误。

总之,个人认为这个类直接拿来使用的可能性不太大,得根据自己的需要作比较大的修改。

当然,这是说在PHP4的情况下。据说PHP5中大大加强了面向对象的特性,对对象类型的变量的处理增加了许多新的方法,但是我还没有亲自体会过,不知道能不能用来解决这个问题。
 2#楼  
 
  回复人:qinga1b2
  注册时间:2005-04-20
  主题/回复:13/17
  积分:482
  等级:★★☆(五级)
  称号:略有小成

   
 2#楼 发表于2005-04-26 08:14:22  评分:× 

是不是在构造函数中定义的参数是session_register定义的变量名呀
还有你说的最后一种方法,是不是把成员数据改为session_register定义的变量呀,然后直接对session的变量操作,这样带来的安全问题是什么呀?
 3#楼  
 
  回复人:一起PHP
  注册时间:2004-02-27
  主题/回复:247/1521
  积分:4649
  等级:★★★★★☆(十一级)
  称号:论坛圣人

   
 3#楼 发表于2005-04-26 21:57:43  评分: 

安全问题?
session存放在服务器端,不会产生安全问题。

而且如果不这么改造,这个类基本上没有使用的价值,因为变量无法在页面之间传递,只有一个页面的购物网站是不大可能有用的。
 4#楼  
 
  回复人:qinga1b2
  注册时间:2005-04-20
  主题/回复:13/17
  积分:482
  等级:★★☆(五级)
  称号:略有小成

   
 4#楼 发表于2005-04-27 05:40:07  评分:× 

是呀,那我在类中添加个成员函数,在这之前定义几个session变量例如session_register('basket_product');
session_register('basket_price');
session_register('basket_amount');
session_register('basket_item);
然后把成员数据赋值给上面几个变量,不知道这样行不行嘛
板主,能不能回贴快点呀
有时上你这个网站有点问题,也不是这么好登录
 5#楼  
 
  回复人:一起PHP
  注册时间:2004-02-27
  主题/回复:247/1521
  积分:4649
  等级:★★★★★☆(十一级)
  称号:论坛圣人

   
 5#楼 发表于2005-04-27 16:26:23  评分: 

给你支个招吧:

 session中虽然不能存放对象,但是可以存放数组~~
所以,你可以定义一个数组:
$arr[basket_product][]
$arr[basket_price][]
$arr[basket_amount][]
$arr[basket_item][]

$_SESSION["basket"]=$arr;

这样,一个二维数组$arr存放到了session之中,什么时候用到第m种商品的信息,那么就用
$arr[basket_product][m]
$arr[basket_price][m]
$arr[basket_amount][m]
$arr[basket_item][m]
调用~
这样一来,所有对商品的增加、删除操作,就是对数组元素的插入、删除操作。

这样应该是可以实现一个购物车的。

还有,版主不可能24小时在线,如果有紧急问题,可以去群里发,如果版主在线会立即回复,如果不在线就只能等着了。
 6#楼  
 
  回复人:qinga1b2
  注册时间:2005-04-20
  主题/回复:13/17
  积分:482
  等级:★★☆(五级)
  称号:略有小成

   
 6#楼 发表于2005-04-28 05:27:26  评分:× 

<?
session_start();
session_register('basket_productid');
session_register('basket_quantity');
session_register('basket_price');
session_register('basket_productname');
session_register('Count');
class Cart{
var $Cartitem;
var $count;
var $owner;
var $time;
var $cartid;

///////////初始构造函数////////////
function Cart(){
$this->count=0;
if(isset($userid)){
$this->owner=$userid;
}
else
{
$this->owner=0;
}
$this->time=date("Y-m-d");
$this->cartid=time();

}

////////////添加商品的函数//////////////
function add_item($ProductID){
$flag=FALSE;
for($i=1;$i<=$this->count;$i++){
if($this->Cartitem[$i]["productid"]==$ProductID){
$this->Cartitem[$i]["quantity"]++;
$flag=TRUE;
break;
}
}

if(!$flag){
$connect=mysql_connect("localhost","root","");
mysql_select_db("eshop");
$query="select Price,ProductName from Product where ProductID=".$ProductID."";
$result=mysql_query($query);
$res=mysql_fetch_object($result);
$price=$res->Price;
$pname=$res->ProductName;
mysql_close($connect);
$this->count++;
$this->Cartitem[$this->count]["productid"]=$ProductID;
$this->Cartitem[$this->count]["quantity"]=1;
$this->Cartitem[$this->count]["price"]=$price;
$this->Cartitem[$this->count]["productname"]=$ProductID;
$this->session();
}

}
////////////////新增的显示物品的成员函数
function display(){
for($i=0;$i<=$this->count;$i++){
echo $basket_productid[$this->count];
echo '\t';
echo $basket_quantity[$this->count];
echo '\t';
echo $basket_price[$this->count];
echo '\t';
echo $basket_productname[$this->count];
echo '\t';
}
}
/////////////删除购物车中的某一个商品/////////////////可以不看
function remove_item($ProductID){
$flag=FALSE;
for($i=1;$i<=$this->count;$i++){
if($this->Cartitem[$i]["productid"]==$ProductID)
$j=$i;
$flag=true;
break;
}
if($flag){
for($i=$j;$i<=($this->count-1);$i++){
$this->Cartitem[$i]=$this->Cartitem[$i++];
}
$this->count--;
}
}


/////////////设定用户id,作用是用于用户在购物后才登录的情况//////////////
function set_owner(){
$this->owner==$userid;
}
////////////////////////新增的成员函数,把成员数据赋给session变量
function session(){
$basket_productid[]=$this->Cartitem[$this->count]["productid"];
$basket_quantity[]=$this->Cartitem[$this->count]["quantity"];
$basket_price[]=$this->Cartitem[$this->count]["price"];
$basket_productname[]=$this->Cartitem[$this->count]["productname"];
}


//////////////显示购物车的函数////////////////////这段可以没看先

function showcart(){

echo '<table width="450" border="1" align="center">
  <tr align="center" valign="middle">
<td>商品名</td>
<td>数量</td>
<td>价格</td>
<td>总计</td>
<td>删除</td>
  </tr>
  <tr align="center">';
$total=0;
for($i=0;$i<=$this->count;$i++){
//   <tr align="center" valign="middle">
echo '<td>'.$this->Cartitem[$i]["productname"].';</td>';
echo '<td><input type="text" name="a'.$i.'" size="7" maxlength="7" value="'.$this->Cartitem[$i]["quantity"].'"></td>';
echo '<td>'.$this->Cartitem[$i]["price"].'</td>';
$sum=$this->Cartitem[$i]["quantity"]*$this->Cartitem[$i]["price"];
echo '<td>'.$sum.'</td>';
echo '<td><a href=update.php?joh=del&id='.$this->Cartitem[$i]["productid"].'</td>';
echo '</tr>';
}
echo '</table>';
echo '<p>总金额为:'.$total.'元。</p>';
echo '<p><input type="hidden" name="job" value="update">
<input type="image" border="0" name="submit" src="" width="32" height="20">
<a href='.$PHP_SELF.'><img src="" width="32" height="20"><a>
<a href=check.php?total='.$total.'><img src="" width="32" height="20"><a>
<a href=showall.php?job=clear><img src="" width="32" height="20"><a>
</p>';
echo '</form>';
}

////////////////更新购物车的函数////////////////////
function updatecart($cartinfo){
$delcount=0;
for($i=1;$i<=$this->count;$i++){
$this->Cartitem[$i]["quantity"]=$cartinfo[$i];
if($cartinfo[$i]==0){
$delcount++;
$del[$delcount]=$this->Cartitem[$i]["productid"];
}

}

////////////////删除数量为0的商品/////////////////////可以不看 
for($j=1;$j<=$delcount;$i++){
$this->remove_item($del[$i]);
}
}
}
?>
行不
  页数1/1首页 « 1 » 末页
  发表回复:您还没有登陆,无法发表回复。请先[登陆]

一起PHP技术联盟 主办:一起PHP 联系方式:站长QQ:4304410 QQ群:8423742 20159565 站长博客 E-mail: nqp@nqp.me 执行时间:0.019sec
SimsmaBBS 2008 (v6.0) Developed by 17php.com,Copyright(C)2003-2010 All rights reserved. 副本授权:一起PHP官方专用版