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.