Boucle while dans ldap

Fermé
gmartine - 5 févr. 2010 à 15:28
 gmartine - 5 févr. 2010 à 15:56
Bonjour,

j'ai un problème avec ma boucle while dans mon code php . le problème c'est que mon tableau s'affiche bien correctement mais les lignes se génèrent à l'infini. ce qui fait que ma page se charge en permanence.

en sql je sait qu'il faut utiliser mysql fetch array dans la boucle while mais en ldap aucune idée

voici mon code :

<?

// Fichier de configuration pour l'interface PHP

// de notre annuaire LDAP

$server = "ldap.gi.utc";

$ds=ldap_connect($server);

if ($ds) {
$r=ldap_bind($ds);

$dn = "ou=people, dc=gi, dc=utc";

$filtre="(|(ou=$heudiasyc*)(cn=$person*))";

$restriction = array( "cn", "sn", "mail", "title", "telephonenumber", "postofficebox" );

$sr=ldap_search($ds, $dn, $filtre, $restriction);

$nombre = ldap_count_entries($ds, $sr);


print $nombre." enregistrements trouves
";

// echo "Répétion des entré ...";
//echo "<br><br>";
$info = ldap_get_entries($ds, $sr);

// echo "Affichage des donné des ".$info["count"]. " entré trouvé :";

$i = 0;
echo "<table border=0 cellpadding=9>";
echo "<tr bgcolor=#4F707D>";
echo "<td width=200><font color=#FFFFFF>NOM PRENOM</font></td>";
echo "<td width=170><font color=#FFFFFF>FONCTION</font></td>";
echo "<td width=300><font color=#FFFFFF>TELEPHONE</font></td>";
echo "<td width=70><font color=#FFFFFF>EMAIL</font></td>";
echo "<td width=50><font color=#FFFFFF>BUREAU</font></td>";
echo "<tr>";


while($infos)
{
$i = $i + 1;
if ($i%2 == 0) echo '<tr bgcolor = "#FFFFFF">';
else echo '<tr bgcolor = "#eaf1f9">';

echo "<td>". $info[$i]["cn"][0] . "</td>";

echo "<td>". $info[$i]["title"][0] . "</td>";

echo "<td>". $info[$i]["telephonenumber"][0] . "</td>";


for($j=0;$j<$info[$i]["mail"]["count"];$j++) {
echo "<td>". $info[$i]["mail"][$j] ."</td>";
}



echo "<td>". $info[$i]["postofficebox"][0] . "</td>";

echo "</tr>";
}
ldap_close($ds);

echo "</table>";

}


else {
echo "Connexion au serveur LDAP impossible";

}

?>

merci ;)

4 réponses

biboo_ Messages postés 1249 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 14 mars 2012 106
5 févr. 2010 à 15:31
Bonjour

Ben oui, le problème est ton :

while($info) {
}


Si tu ne le modifies pas, il garde la même valeur donc la boucle est infinie.

La solution est donc :
$info = ldap_get_entries($ds, $sr); 
while($info) {
    // Tout ton code
    // Puis à la fin
    $info = ldap_get_entries($ds, $sr); 
}
0
merci mais
j'ai essayé ce que tu viens de me donner et sa me fait toujours la même chose

$info = ldap_get_entries($ds, $sr);
while($info) {
// Tout ton code
// Puis à la fin
$info = ldap_get_entries($ds, $sr); // cette partie se met bien dans la boucle while? car je l'ai mis dans la boucle while et il se passe rien
}
que mettre dans while(?) ?

merci
0
biboo_ Messages postés 1249 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 14 mars 2012 106
5 févr. 2010 à 15:38
Ah, correction: peux-tu essayer ça :
while(($info = ldap_get_entries($ds, $sr)) {
} 
0
toujours le même problème sauf qu'au bout de 30seconde il arrête le chargement de la page mais il me génère toujours des lignes vide dans le tableau quand même.

depuis ce matin ce truc me prend la tête ^^

merci
0
Bonjour

Il ne faut pas répéter le ldap_get_entries($ds, $sr) dans le while ni dans la boucle, ça n'a rien à voir avec le parcours d'une liste.

Ton programme initial était presque bon, mais la condition while ($info) était mauvaise. En fait, il faut boucler sur toutes les lignes du tableau $info, il fallait donc faire:
while ($i<count($info)-1) // -1 parce que tu incrémentes $i au début de ta boucle
0
Merci beaucoup ça fonctionne génial

par la même occasion serait-tu comment faire pour classé par ordre alphabétique?(nom)
0
biboo_ Messages postés 1249 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 14 mars 2012 106
5 févr. 2010 à 15:53
ton $info = ldap_get_entries($ds, $sr), il renvoie un tableau non?
Pas besoin de while alors. :)
$info = ldap_get_entries($ds, $sr);
$size = length($info)

for($i=0;$i<$size;$i++) {
  if ($i%2 == 0)        echo '<tr bgcolor = "#FFFFFF">';
  else                       echo '<tr bgcolor = "#eaf1f9">';
  echo "<td>". $info[$i]["cn"][0] . "</td>";
  echo "<td>". $info[$i]["title"][0] . "</td>";
  echo "<td>". $info[$i]["telephonenumber"][0] . "</td>";
   for($j=0;$j<$info[$i]["mail"]["count"];$j++) {
      echo "<td>". $info[$i]["mail"][$j] ."</td>";
   }
  echo "<td>". $info[$i]["postofficebox"][0] . "</td>";
  echo "</tr>";
}
ldap_close($ds);

echo "</table>";
}
0
biboo_ Messages postés 1249 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 14 mars 2012 106
5 févr. 2010 à 15:54
Bon ben on avait trouvé la réponse au même moment (sauf que je me suis cassé la tête à tout corriger :D)
0
gmartine > biboo_ Messages postés 1249 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 14 mars 2012
5 févr. 2010 à 15:56
merci bilboo de tes réponses

comment faire pour classé par ordre alphabétique? avec ldap
0