首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用PHP exit()隐藏页面内容;

问无法使用PHP exit()隐藏页面内容;
EN

Stack Overflow用户
提问于 2015-01-06 20:02:03
回答 2查看 88关注 0票数 2

我有一个添加待办事项的函数:

代码语言:javascript
复制
function add() {
    //Access control
    $session=new Auth();
    $session->start();
    $access=new Access();
    $role=$_SESSION['userinfo']['role'];
    $action=2;
    $access->restrict($role,$action);
    $todo = $_POST['todo'];
    $this->set('title','Success - My Todo List App');
    $this->set('todo',$this->Item->query('insert into items (item_name) values (\''.mysql_real_escape_string($todo).'\')'));   
}

正常情况下,添加todo成功的页面是这样的:

代码语言:javascript
复制
<a class="big" href="../items/viewall">Todo successfully added. Click here to go back.</a>

但是因为我想限制一个普通用户来添加一个待办事项,所以这里有一个限制函数:

代码语言:javascript
复制
function restrict($role,$action){
    $sql=mysql_query("SELECT * FROM permissions WHERE role_id='$role' AND action_id='$action'");
    $count=mysql_num_rows($sql);
    if($count>0){
        echo "<div class='warning_positive'>Access Granted</div>";
    }
    else{
        echo "<div class='warning_negative'>Access Denied</div>";
        exit();
    }
}

为了拒绝访问,它显示访问被拒绝,并且不添加该todo项。但它仍然显示Todo成功添加。如您所见,我放入了exit();,以使该字符串不可见,但仍可见。我该怎么办?提前感谢

EN

回答 2

Stack Overflow用户

发布于 2015-01-06 20:06:07

这是因为您在restrict()函数中调用exit(),该函数的作用域以函数作用域结束。

返回行数,而不是在restrict()函数中显示错误。

根据返回的计数,可以授予访问权限,也可以只显示错误消息。

这种方法将减少代码行。

已更正代码:

代码语言:javascript
复制
function restrict($role,$action){
  $sql=mysql_query("SELECT * FROM permissions WHERE role_id='$role' AND action_id='$action'");
  $count=mysql_num_rows($sql);
  return $count;
}

function add() {
  //Access control
  $session=new Auth();
  $session->start();
  $access=new Access();
  $role=$_SESSION['userinfo']['role'];
  $action=2;
  $access = $access->restrict($role,$action);
  if ($access > 0) {
    echo "<div class='warning_positive'>Access Granted</div>";
    $todo = $_POST['todo'];
    $this->set('title','Success - My Todo List App');
    $this->set('todo',$this->Item->query('insert into items (item_name) values (\''.mysql_real_escape_string($todo).'\')'));   
  }
  else {
        echo "<div class='warning_negative'>Access Denied</div>";
  }
}
票数 1
EN

Stack Overflow用户

发布于 2015-01-06 20:06:22

请在下面尝试,应该可以。

代码语言:javascript
复制
function add() {
    //Access control
    $session=new Auth();
    $session->start();
    $access=new Access();
    $role=$_SESSION['userinfo']['role'];
    $action=2;
    if($access->restrict($role,$action)){
        echo "<div class='warning_positive'>Access Granted</div>";    
    }else{
        echo "<div class='warning_negative'>Access Denied</div>";
        exit();
    }
    $todo = $_POST['todo'];
    $this->set('title','Success - My Todo List App');
    $this->set('todo',$this->Item->query('insert into items (item_name) values (\''.mysql_real_escape_string($todo).'\')'));   
}


function restrict($role,$action){
    $sql=mysql_query("SELECT * FROM permissions WHERE role_id='$role' AND action_id='$action'");
    $count=mysql_num_rows($sql);
    if($count>0){
        return true;
    }
    else{
        return false;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27798260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档