关于执行操作前检查有没有登录的问题[已解决/答案在12#]

#1 prince

问题是红字描述,何解?
//加了判断行点击链接后出现空白页面,后边的操作也没有成功
function del_bxPic(){
        if(!isset($_SESSION['username']))$this->jump(spUrl()); //加的代码是这行
        $pic_id = $this -> spArgs('pic_id');
…………
…………
我把这句:
if(!isset($_SESSION['username']))$this->jump(spUrl());
注释掉执行就能正确执行.

2010-12-08 14:54:18

#2 jake

spUrl()没有参数的时候,默认是生成spUrl('main', 'index'),也就是回到首页。

if(!isset($_SESSION['username']))$this->jump(spUrl());
的意思是如果session的username没有set,那么就会跳转到spUrl('main', 'index')——首页。

2010-12-08 15:38:31

#3 prince

回复 2 jake


   我的首页是登录页面,如果$_SESSION['username']没有设置的话就会跳到登录页面,如果设置了的话就会跳过这句执行后面的语句才是

2010-12-08 17:29:31

#4 jake

就是没有session就会跳转到首页,你做对了。

在这个判断之前输出一下session看看吧。

2010-12-08 17:45:52

#5 prince

回复 4 jake


    我执行了(其它代码全部注释掉):
echo $_SESSION['username'];
是有输出而且正确的.

2010-12-08 18:12:55

#6 jake

if(!isset($_SESSION['username']))echo $_SESSION['username'];
exit();

2010-12-08 18:36:13

#7 prince

按这样也是空白的,没有任何东西

2010-12-08 18:49:42

#8 prince

发现一个情况:在没有数据库写操作的情况下都正常,比如这个
   function modBxiangView(){
        if(!isset($_SESSION['username']))$this->jump(spUrl()); //没登录就返回首页
        $bxList = spClass('bxList');
        $conditions = array('bx_id' => ($this -> spArgs('bx_id')));
        $this -> results = $bxList -> find($conditions);
        $this -> display("main_modBxiang.html");
        }

2010-12-08 19:02:06

#9 prince

发个源码吧,又臭又长,不好意思
    function delBxiang(){
      //echo $_SESSION['acc_name'];
      if(!isset($_SESSION['acc_name']))$this->jump(spUrl());//没登录就返回首页
      $bx_album = spClass("bx_album");
      $conditions = array('bx_id' => $this -> spArgs('bx_id'));
          $photos = $bx_album -> findAll($conditions);//按条件查找所有符合条件的记录
          if (is_null($photos)){
            $bxList = spClass('bxList');
        $bxList -> delete($conditions);
        switch ($bxList){
            case true;
                $url = spUrl("main","bxList");
                $msg = '成功删除包厢';
                $this -> success($msg,$url);
                break;
            case false:
                $url = spUrl("main","bxList");
                $msg = '删除包厢失败,请重新登录再尝试,如再失败请报告管理员';
                $this -> error($msg,$url);
                break;
            }            
            }else{
            if (is_array($photos)){
               $iCount = count($photos);
               $delSucc = 0;
               $delErr = 0;
               for ($i = 0;$i < $iCount; $i++){
                 if (unlink('../img/user/'.$photos[$i]['picture'])){
                    $bx_album = spClass('bx_album');
                    $conditions = array('picture' => $photos[$i]['picture']);
                $bx_album -> delete($conditions);
                    $delSucc++;
                  }else{
                    $delErr++;
                    $delFileErr = array_unshift($delFileErr,('../img/user/'.$photos[$i]['picture']));
                    }
                }
             $bxList = spClass('bxList');
         $conditions = array('bx_id' => $this -> spArgs('bx_id'));
         $bxList -> delete($conditions);
         switch ($bxList){
            case true;
                $url = spUrl("main","bxList");
                $msg = '成功删除包厢:'."/n".'删除包厢图片'.$delSucc.'张;'."/n".'未删除图片'.$delErr;
                $this -> success($msg,$url);
                break;
            case false:
                $url = spUrl("main","bxList");
                $msg = '删除包厢失败,请重新登录再尝试,如再失败请报告管理员';
                $this -> error($msg,$url);
                break;
            }
            }
    }
}

2010-12-08 19:18:16

#10 jake

echo !isset($_SESSION['acc_name']);
if(!isset($_SESSION['acc_name']))$this->jump(spUrl());//没登录就返回首页
exit();

不要删除其他代码,只用exit停止运行就可以了。

2010-12-08 19:20:16

#11 prince

回复 10 jake


    没有用,还是一样

2010-12-08 20:05:31

#12 prince

找到问题所在了。问题是这句:
if (is_null($photos)){

过程是这样的,通过反复测试,发现有关联记录的就可以删除(即$photos不为空的情况下),后来把这句改为:
          if (($photos == 0)or($photos < 0)){
就解决问题了

2010-12-08 21:39:50