Boucle while dans ldap

gmartine -  
 gmartine -
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 1462 Statut Membre 106
 
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
gmartine
 
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 1462 Statut Membre 106
 
Ah, correction: peux-tu essayer ça :
while(($info = ldap_get_entries($ds, $sr)) {
} 
0
gmartine
 
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
le père
 
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
gmartine
 
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 1462 Statut Membre 106
 
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 1462 Statut Membre 106
 
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 1462 Statut Membre
 
merci bilboo de tes réponses

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