2010-03-19 9 views
0

J'utilise adldap http://adldap.sourceforge.net/Invalid argument supplied for foreach() en utilisant adldap

Et je passe la session de la page à la page, et de vérifier pour vous assurer que le nom d'utilisateur dans la session est membre d'un certain groupe de membres , pour cet exemple, c'est le groupe 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; } 
    } 
?> 

Il me donne l'erreur: Warning: Invalid argument supplied for foreach() sur la ligne 15, qui est cette ligne de code: foreach ($ result as $ key => $ value) {

Lorsque je décommente le code $ authUser = $ adldap-> authenticate ($ username, $ password); et entrez le nom d'utilisateur et mot de passe approprié, cela fonctionne bien, mais je ne devrais pas avoir à le faire, puisque la session est valide, je veux juste voir si le nom d'utilisateur stocké dans valid_session est en dehors du groupe STAFF.

Pourquoi est-ce que ça me donnerait ce problème?

Répondre

2

Selon this source file, user_groups() va, retourner faux si le nom d'utilisateur était vide (et dans d'autres cas aussi, vérifiez la source). Je parie que votre $_SESSION["user_session"] est vide, et $result est alors faux. Vous ne pouvez pas exécuter foreach sur un non-tableau, c'est pourquoi vous obtenez l'avertissement.

Vous aurez besoin de savoir pourquoi votre variable de session est vide, et/ou vérifier si $result est un tableau parce que faire un foreach sur elle:

if (is_array($result)) 
foreach ($result.... 
+0

J'ai imprimé la variable et imprimer le nom d'utilisateur approprié . $ _SESSION ['user_session'] – Brad

+0

$ result n'est pas un tableau, c'est un bon début pour voir pourquoi il ne l'est pas. – Brad

+0

@Brad alors c'est soit cette ligne: 'if (! $ This -> _ bind) {return (false); } 'ou plus loin le long de la fonction récursive' recursive_groups'. Assurez-vous de regarder dans votre version du code source d'adldap, cependant. –