IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème Foreach + LDAP


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 37
    Points : 27
    Points
    27
    Par défaut Problème Foreach + LDAP
    Bonjour, j'ai un problème de foreach avec des fonctions Ldap.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    // on a créé 2 tableaux (1 avec les noms + prénoms, 1 avec les login) passés en parametre
    // recup_users_from_ldap interroge le ldap et rempli les 2 tableaux (passés par reference)
    function recup_users_from_ldap(&$tab_ldap, &$tab_login, $DEBUG=FALSE)
    {
    	// cnx à l'annuaire ldap :
    	$ds = ldap_connect($_SESSION['config']['ldap_server']);
     
    	if($_SESSION['config']['ldap_protocol_version'] != 0)
    		ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, $_SESSION['config']['ldap_protocol_version']) ;
    	if ($_SESSION['config']['ldap_user'] == "")
    		$bound = ldap_bind($ds);  // connexion anonyme au serveur
    	else
    		echo $ds; ?> <br/> <?php
    		echo $_SESSION['config']['ldap_user'];?> <br/> <?php
    		echo $_SESSION['config']['ldap_pass'];?> <br/> <?php
     
    		$bound = ldap_bind($ds, $_SESSION['config']['ldap_user'], $_SESSION['config']['ldap_pass']);
     
     
    	// recherche des entrées :
    	if ($_SESSION['config']['ldap_filtre_complet'] != "")
    		$filter = $_SESSION['config']['ldap_filtre_complet'];
    	else
    		//$filter = "(&(".$_SESSION['config']['ldap_nomaff']."=*)(".$_SESSION['config']['ldap_filtre']."=".$_SESSION['config']['ldap_filrech']."))";
    		$filter = "(&(".$_SESSION['config']['ldap_nomaff']."=*)(".$_SESSION['config']['ldap_filtre']."=".$_SESSION['config']['ldap_filrech']."))";
     
    	$sr   = ldap_search($ds, $_SESSION['config']['searchdn'], $filter);
    	$data = ldap_get_entries($ds,$sr);
    	$sdn = $_SESSION['config']['searchdn'];
     
    		echo $sdn;?> domaine<br/> <?php
    		echo $sr;?> search<br/> <?php
    		echo $ds;?> serv<br/> <?php
    		echo $filter;?> filtre<br/> <?php
    		echo $info;?> info2<br/> <?php
     
    	foreach ($data as $info)
    	{
    			echo $info[0];?> info<br/> <?php
     
    		$ldap_libelle_login=$_SESSION['config']['ldap_login'];
     
    		$ldap_libelle_nom=$_SESSION['config']['ldap_nom'];
     
    		$ldap_libelle_prenom=$_SESSION['config']['ldap_prenom'];
    		$login = $info[$ldap_libelle_login][0];
    		$nom = strtoupper(utf8_decode($info[$ldap_libelle_nom][0]))." ".utf8_decode($info[$ldap_libelle_prenom][0]);
    		// concaténation NOM Prénom
    		// utf8_decode permet de supprimer les caractères accentués mal interprêtés...
    		array_push($tab_ldap, $nom);
    		array_push($tab_login, $login);
    	}
     
     
    }
    Cela me sort :


    Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\site\admin\admin_index.php on line 2214



    Donc c'est soit le $data qui est mauvais, soit le $info. Je penche plus pour le $data, alors j'ai tout vérifié.

    Le $data est le resultat de ldap_get_entries de $ds et $sr.
    $data = ldap_get_entries($ds,$sr);

    Le $ds est normalement bon, car lui contient la resource qui permet de ce connecter au ldap (et quand je la change il n'arrive pas à ce connecter).

    $ds = ldap_connect($_SESSION['config']['ldap_server']);



    Donc ca peut être $sr. $sr est le résultat du ldap_search avec les trois paramètres, le $ds (connexion au serveur donc bon), le searchdn qui est le domaine de arborescence ldap où chercher, celui ci est bon aussi car quand je met une valeur bidon, j'ai une autre erreur de connexion, et le troisième le $filter qui est le paramètre de filtre.

    $sr = ldap_search($ds, $_SESSION['config']['searchdn'], $filter);



    $filter = "(&(".$_SESSION['config']['ldap_nomaff']."=*)(".$_SESSION['config']['ldap_filtre']."=".$_SESSION['config']['ldap_filrech']."))";


    J'ai donc tout echoté pour voir si chacun avait une valeur
    $ds = Resource
    $sr = Resource
    filter = (&(displayName=*)(objectclass=user))
    $data = Lui n'a rien a lecho, je pense que je sais pas l'echo comme il faut.

    N'ayant jamais programmé avec des fonction ldap, je ne peut vraiment pas voir ce qu'est l'erreur.

    Merci de vos lumières.

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur LAMP
    Inscrit en
    Janvier 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur LAMP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2010
    Messages : 48
    Points : 72
    Points
    72
    Par défaut
    Salut je ne connais pas ldap.

    Mais une chose est sûr si tu veux connaître la valeur de $data (qui devrait être un tableau) il faut utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo '<pre>';
    print_r($data);
    echo '</pre>';
    Vérifie que $data = ldap_get_entries($ds,$sr); te retourne un tableau (Edit: Il retourne bien un tableau)

    Sinon niveau code tu devrais (c'est mon avis) éviter d'ouvrir et fermer constament tes balises PHP juste pour un br.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    else
    		echo $ds; ?> <br/> <?php
     
                    // ...........
    ?>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    else
    		echo $ds.'<br/>';
    ?>
    Commence par vérifier ta connexion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if($ds = ldap_connect($_SESSION['config']['ldap_server']))
    {
         // OK
    }
    else
    {
         // ERREUR
    }

Discussions similaires

  1. problème connection LDAP
    Par Wlad13 dans le forum SharePoint
    Réponses: 3
    Dernier message: 12/01/2010, 13h37
  2. Problème foreach et arrayList()
    Par tom82 dans le forum C#
    Réponses: 0
    Dernier message: 07/04/2009, 17h06
  3. Problème avec ldap/nss/pam
    Par YaN87 dans le forum Réseau
    Réponses: 1
    Dernier message: 05/02/2009, 16h35
  4. Problème installation LDAP sous Ubuntu
    Par condor_01 dans le forum Ubuntu
    Réponses: 1
    Dernier message: 19/10/2007, 06h13
  5. [LDAP] problème fonction ldap
    Par illegalsene dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 23/02/2007, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo