PHP函数没有返回TRUE - 但确实如此

时间:2014-06-04 08:07:23

标签: php mysql

第一次来这里。我努力让这个PHP功能发挥作用,5个小时后它让我疯了。

我有这个功能:

// DOES THE USER HAVE ACCESS?
function access_la_page($id) {

include('DB_db.php');

/// GENERATE SQL 
$sql = "SELECT parent FROM la_pages WHERE id = $id";

// PREPARE THE STATEMENT
$result = mysqli_query($conn, $sql);

if($result === false) {
  trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->error, E_USER_ERROR);
  echo "FAIL" . $conn->error; exit();
}

$row = mysqli_fetch_array($result);

// CHECK PERMISSIONS DATABASE TO SEE IF USER HAS ACCSS HIGHER UP THE CHAIN  
$sql2 = "SELECT * FROM la_pages_permissions WHERE la_page_id = $id AND user_id = " . $_SESSION['user_id'];

$result2 = mysqli_query($conn, $sql2);

if($result2 === false) {
  trigger_error('Wrong SQL: ' . $sql2 . ' Error: ' . $conn->error, E_USER_ERROR);
  echo "FAIL" . $conn->error; exit();
}

if(mysqli_num_rows($result2) > 0){

    $value = TRUE;

    return $value;

}elseif($row['parent']!==$id&&$row['parent']&&!isset($value)) { 
    access_la_page($row['parent']); // CHECK DB RECURSIVELY TO SEE IF USE HAS PERMISSION HIGHER UP THE CHAIN    
}


}

然后我调用这个函数:

if(access_la_page($_SESSION['la_page_id'])==TRUE){
    echo "Success";
}else{
    echo "Fail";
}

现在......如果函数在第一个实例上达到TRUE,它实际上将返回TRUE到我的页面,成功!但如果它循环,它不会返回TRUE。它什么都不返回。

但是,当我从语句中回应时,我可以看到函数正在按预期执行,当我回显$ value时,它显示为TRUE并且函数停止 - 这应该是应该发生的。但该函数不会返回TRUE。

这是否有意义,这是不行的,因为我在循环功能?

编辑 - 请原谅我的无知。我的引号是TRUE,我现在修改了它但它还没有工作

3 个答案:

答案 0 :(得分:0)

更改

$value = "TRUE";

$value = TRUE;

答案 1 :(得分:0)

如果最终的If语句通过,则会返回'TRUE'语句,但如果没有,则不会返回任何内容。

您可以确认这一点,因为此功能正在返回'TRUE'null。 这可能是原因。

尝试返回最后一个子句,如果递归检查是为了帮助决定,那么它应该返回一些东西:

if(mysqli_num_rows($result2) > 0){

    $value = "TRUE";

    return $value;

}elseif($row['parent']!==$id&&$row['parent']&&!isset($value)) {
    return access_la_page($row['parent']); // CHECK DB RECURSIVELY TO SEE IF USE HAS PERMISSION HIGHER UP THE CHAIN    
}

答案 2 :(得分:0)

Andy Gee的回答是正确的, 另外,您可以将if语句条件缩短为

if(!($result)){
      code here 

}