已有40人关注
php程序设计,第14章,购物车中,session的$producelist,$quatity是何时分配的?
发表在PHP图书答疑 2016-08-23
是否精华
版块置顶:
1.
在注册的时候,savereg.php中最后有如下代码,下面的$username,$producelist,$quatity在这里出现有何意义?
这里应该不是$_SESSION['producelist']...吧?
    mysqli_query($conn,"insert into tb_user (name,pwd,dongjie,email,truename,sfzh,tel,qq,tishi,huida,dizhi,youbian,regtime,pwd1) values ('$name','$pwd','$dongjie','$email','$truename','$sfzh','$tel','$qq','$tishi','$huida','$dizhi','$youbian','$regtime','$pwd1')");
$username=$name;
$producelist="";
$quatity="";
echo "<script>alert('恭喜,注册成功!');window.location='index.php';</script>";

2.
在直接登录-->chkuser.php,验证后,直接session存储用户名。这个时候应该只是传递了name。
session_start();
           $_SESSION['username']=$info['name'];
               header("location:index.php");
               exit;

3.在点击index.php点击购物时,跳转-->addgouwuche.php
下面的代码,这是第一次出现$_SESSION['producelist'],应该是空值吧,那$array这个数组也应该是空。count($array)为0,!in_array($id,$array)为真,执行下面语句。$_SESSION['producelist']=$id+”@”
$_SESSION['quatity']="1@";

如果第一次选择的id是2,那应该就是
$_SESSION['producelist']=”2@”
$_SESSION['quatity']="1@";

如果,再选择其他产品(不同id,比如是id为3的产品),$array=explode("@",isset($_SESSION['producelist'])?$_SESSION['producelist']:"");
$array是一个数组,值是2@。
继续执行,同上
$_SESSION['producelist']=”2@3@”
$_SESSION['quatity']="1@1@";

count($array)!=1为真,且!in_array($id,$array)为真,执行下面:
$_SESSION['producelist']=$_SESSION['producelist'].$id."@";
   $_SESSION['quatity']=$_SESSION['quatity']."1@";
这不是多加一次了吗?
请老师,给予更详细的指导。

addgouwuche.php中的代码:
$array=explode("@",isset($_SESSION['producelist'])?$_SESSION['producelist']:"");
if(count($array)==1){
   $_SESSION['producelist']=$_SESSION['producelist'].$id."@";
   $_SESSION['quatity']=$_SESSION['quatity']."1@";
}
if(count($array)!=1){
if(!in_array($id,$array)){
    $_SESSION['producelist']=$_SESSION['producelist'].$id."@";
   $_SESSION['quatity']=$_SESSION['quatity']."1@";
}else{
   $arrayquatity=explode("@",$_SESSION['quatity']);
$key=array_search($id,$array);
$arrayquatity[$key]=$arrayquatity[$key]+1;
$_SESSION['quatity']=implode("@",$arrayquatity);
}
}
分享到:
精彩评论 4
铁游夏
学分:0 LV1
TA的每日心情
还糊涂
2020-10-22 13:46:07
2016-08-23
沙发
savereg.php中的$username=$name;$producelist="";$quatity="";这3行代码可以去掉。

如果购物车为空,那么count($array)的值是1而不是0,另外,if(count($array)==1)和if(count($array)!=1)这两个if语句是不能同时执行的,所以不会出现多加一次的情况。
holli
学分:0 LV1
2016-08-24
板凳
[FIELDSET][LEGEND]引自:1楼[/LEGEND]
savereg.php中的$username=$name;$producelist="";$quatity="";这3行代码可以去掉。

如果购物车为空,那么count($array)的值是1而不是0,另外,if(count($array)==1)和if(count($array)!=1)这两个if语句是不能同时执行的,所以不会出现多加一次的情况。
[/FIELDSET]

回复:
谢谢你的回复。

if(){}if{}语句,第一个 if 块和第二个 if 块没有影响吧

如果是if(){}eles if{}语句,if 块和 else if 块本质上是互斥的,一旦语句1得到了执行,程序会跳过 else if 块,else if 块中的判断语句以及语句2一定会被跳过。

不能同时执行应该是第二种情况吧,代码中是第一种啊。
holli
学分:0 LV1
2016-08-24
地板
[FIELDSET][LEGEND]引自:1楼[/LEGEND]
savereg.php中的$username=$name;$producelist="";$quatity="";这3行代码可以去掉。

如果购物车为空,那么count($array)的值是1而不是0,另外,if(count($array)==1)和if(count($array)!=1)这两个if语句是不能同时执行的,所以不会出现多加一次的情况。
[/FIELDSET]

回复:
如果购物车是空的,如果$array=explode("@",isset($_SESSION['producelist'])?$_SESSION['producelist']:"");
这里是第一次出现$_SESSION['producelist'],那isset()判断是false,那应该是$array=""啊。

请老师给予解答。
铁游夏
学分:0 LV1
TA的每日心情
还糊涂
2020-10-22 13:46:07
2016-08-24
4L
$_SESSION['producelist']最开始是空,即'',但执行explode函数之后返回的数组中是有一个空元素的,所有count($array)的值是1

这里说的if(count($array)==1)和if(count($array)!=1)这两个if语句不能同时执行,意思是如果执行了if(count($array)==1)后面的语句,那么if(count($array)!=1)后面的语句就不会执行了,因为这两个判断条件是不一样的,仔细体会一下。
首页上一页 1 下一页尾页 4 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照