【发布时间】:2014-06-04 08:07:22
【问题描述】:
第一次来。我正在努力让这个 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 引号,我现在已经修改了,但它仍然不起作用
【问题讨论】:
-
"TRUE" !== TRUE: 一个是字符串,一个是布尔值 -
@MarkBaker 虽然这是正确的,但我不确定它是否会有所作为,当他没有使用严格相等时,非空字符串将等于 true:
echo TRUE == 'TRUE' ? 'OK' : 'FAIL'; // OK -
@Flosculus - 它可以带来很大的不同
echo FALSE == 'TRUE' ? 'OK' : 'FAIL'; -
@MarkBaker 诚然,我已经更新了我的答案,以解决函数返回逻辑中可能出现的问题。