oop — невозможно скрыть содержимое страницы с помощью PHP exit ();

У меня есть эта функция добавления элемента todo:

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 успешно добавлен, выглядит так:

<a class="big" href="../items/viewall">Todo successfully added. Click here to go back.</a>

Но поскольку я хочу ограничить доступ обычного пользователя для добавления элемента todo, здесь есть функция limit:

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 успешно добавлен. Как видите, я поставил этот выход (); сделать эту строку невидимой, но все же ее увидеть. Что я должен делать? заранее спасибо

2

Решение

Это потому, что вы вызываете exit () внутри функции restrict (), область действия которой заканчивается областью действия функции.

Вместо того, чтобы показывать ошибку в функции restrict (), возвращает количество строк.

В зависимости от возвращенного количества либо предоставьте доступ, либо просто отобразите сообщение об ошибке.

Такой подход уменьшит количество строк кода.

Исправленный код:

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

Другие решения

Попробуй ниже, должно сработать.

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

По вопросам рекламы [email protected]