Недопустимый аргумент для foreach() с использованием adldap

Я использую adldap http://adldap.sourceforge.net/

И я передаю сеанс со страницы на страницу и проверяю, является ли имя пользователя в сеансе членом определенной группы участников, в данном примере это группа STAFF.

<?php
    ini_set('display_errors',1);
    error_reporting(E_ALL);
    require_once('/web/ee_web/include/adLDAP.php');
    $adldap = new adLDAP();

    session_start();

    $group = "STAFF";

    //$authUser = $adldap->authenticate($username, $password);

    $result=$adldap->user_groups($_SESSION['user_session']);

    foreach($result as $key=>$value) {
        switch($value) {
            case $group:
                print '<h3>'.$group.'</h3>';
                break;

            default:
                print '<h3>Did not find specific value: '.$value.'</h3>';
            }
        if($value == $group) { print 'for loop broke'; break; }
    }
?>

Это дает мне ошибку: Предупреждение: недопустимый аргумент, указанный для foreach() в строке 15, которая представляет собой эту строку кода: foreach($result as $key=>$value) {

Когда я раскомментирую код $authUser = $adldap->authenticate($username, $password); и введите соответствующее имя пользователя и пароль, он работает нормально, но мне не нужно этого делать, поскольку сеанс действителен, я просто хочу посмотреть, входит ли имя пользователя, хранящееся в действительном_сеансе, в группу STAFF.

Почему это доставляет мне эту проблему?


person Brad    schedule 19.03.2010    source источник


Ответы (1)


Согласно этому исходному файлу, user_groups() вернет false, если имя пользователя было пустым (и в некоторых других случаях тоже проверьте источник). Бьюсь об заклад, ваше $_SESSION["user_session"] пусто, а $result тогда ложно. Вы не можете запустить foreach на не-массиве, поэтому вы получаете предупреждение.

Вам нужно будет выяснить, почему ваша переменная сеанса пуста, и/или проверить, является ли $result массивом, потому что для него выполняется foreach:

if (is_array($result))
 foreach ($result....
person Pekka    schedule 19.03.2010
comment
Я распечатал переменную, и она напечатала соответствующее имя пользователя. $_SESSION['user_session'] - person Brad; 19.03.2010
comment
$result не является массивом, это хорошее начало, чтобы понять, почему это не так. - person Brad; 19.03.2010
comment
@Brad, тогда это либо эта строка: if (!$this->_bind){ return (false); }, либо далее по рекурсивной функции recursive_groups. Однако убедитесь, что вы заглянули в свою версию исходного кода adldap. - person Pekka; 19.03.2010
comment
Мне пришлось бы привязываться, прежде чем даже думать об использовании user_groups()? Я предполагаю, что мне следует использовать ldap_search() для имени пользователя, которое хранится с действительным сеансом, а затем, если он возвращает группу, которую я ищу, затем возвращает true. - person Brad; 19.03.2010
comment
Что мне нужно сделать, так это посмотреть, является ли пользователь членом определенной группы, если да, то он может получить доступ к этой странице, если нет, он не может ее видеть. - person Brad; 19.03.2010